You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/02/23 18:08:09 UTC

[01/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Repository: hbase-site
Updated Branches:
  refs/heads/asf-site f6cc92246 -> d02dd5db7


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/src-html/org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html
index c13d105..6d2e5d7 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html
@@ -725,1370 +725,1370 @@
 <span class="sourceLineNo">717</span>  }<a name="line.717"></a>
 <span class="sourceLineNo">718</span><a name="line.718"></a>
 <span class="sourceLineNo">719</span>  @Test<a name="line.719"></a>
-<span class="sourceLineNo">720</span>  public void testQualifierFilter() throws IOException {<a name="line.720"></a>
+<span class="sourceLineNo">720</span>  public void testInclusiveStopFilterWithReverseScan() throws IOException {<a name="line.720"></a>
 <span class="sourceLineNo">721</span><a name="line.721"></a>
-<span class="sourceLineNo">722</span>    // Match two keys (one from each family) in half the rows<a name="line.722"></a>
-<span class="sourceLineNo">723</span>    long expectedRows = this.numRows / 2;<a name="line.723"></a>
-<span class="sourceLineNo">724</span>    long expectedKeys = 2;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    Filter f = new QualifierFilter(CompareOp.EQUAL,<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    Scan s = new Scan();<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    s.setFilter(f);<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.729"></a>
+<span class="sourceLineNo">722</span>    // Grab rows from group one<a name="line.722"></a>
+<span class="sourceLineNo">723</span><a name="line.723"></a>
+<span class="sourceLineNo">724</span>    // If we just use start/stop row, we get total/2 - 1 rows<a name="line.724"></a>
+<span class="sourceLineNo">725</span>    long expectedRows = (this.numRows / 2) - 1;<a name="line.725"></a>
+<span class="sourceLineNo">726</span>    long expectedKeys = this.colsPerRow;<a name="line.726"></a>
+<span class="sourceLineNo">727</span>    Scan s = new Scan(Bytes.toBytes("testRowOne-3"), Bytes.toBytes("testRowOne-0"));<a name="line.727"></a>
+<span class="sourceLineNo">728</span>    s.setReversed(true);<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    verifyScan(s, expectedRows, expectedKeys);<a name="line.729"></a>
 <span class="sourceLineNo">730</span><a name="line.730"></a>
-<span class="sourceLineNo">731</span>    // Match keys less than same qualifier<a name="line.731"></a>
-<span class="sourceLineNo">732</span>    // Expect only two keys (one from each family) in half the rows<a name="line.732"></a>
-<span class="sourceLineNo">733</span>    expectedRows = this.numRows / 2;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>    expectedKeys = 2;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>    f = new QualifierFilter(CompareOp.LESS,<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.736"></a>
-<span class="sourceLineNo">737</span>    s = new Scan();<a name="line.737"></a>
-<span class="sourceLineNo">738</span>    s.setFilter(f);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.739"></a>
-<span class="sourceLineNo">740</span><a name="line.740"></a>
-<span class="sourceLineNo">741</span>    // Match keys less than or equal<a name="line.741"></a>
-<span class="sourceLineNo">742</span>    // Expect four keys (two from each family) in half the rows<a name="line.742"></a>
-<span class="sourceLineNo">743</span>    expectedRows = this.numRows / 2;<a name="line.743"></a>
-<span class="sourceLineNo">744</span>    expectedKeys = 4;<a name="line.744"></a>
-<span class="sourceLineNo">745</span>    f = new QualifierFilter(CompareOp.LESS_OR_EQUAL,<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.746"></a>
-<span class="sourceLineNo">747</span>    s = new Scan();<a name="line.747"></a>
-<span class="sourceLineNo">748</span>    s.setFilter(f);<a name="line.748"></a>
-<span class="sourceLineNo">749</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.749"></a>
-<span class="sourceLineNo">750</span><a name="line.750"></a>
-<span class="sourceLineNo">751</span>    // Match keys not equal<a name="line.751"></a>
-<span class="sourceLineNo">752</span>    // Expect four keys (two from each family)<a name="line.752"></a>
-<span class="sourceLineNo">753</span>    // Only look in first group of rows<a name="line.753"></a>
-<span class="sourceLineNo">754</span>    expectedRows = this.numRows / 2;<a name="line.754"></a>
-<span class="sourceLineNo">755</span>    expectedKeys = 4;<a name="line.755"></a>
-<span class="sourceLineNo">756</span>    f = new QualifierFilter(CompareOp.NOT_EQUAL,<a name="line.756"></a>
-<span class="sourceLineNo">757</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.757"></a>
-<span class="sourceLineNo">758</span>    s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    s.setFilter(f);<a name="line.759"></a>
-<span class="sourceLineNo">760</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.760"></a>
-<span class="sourceLineNo">761</span><a name="line.761"></a>
-<span class="sourceLineNo">762</span>    // Match keys greater or equal<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    // Expect four keys (two from each family)<a name="line.763"></a>
-<span class="sourceLineNo">764</span>    // Only look in first group of rows<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    expectedRows = this.numRows / 2;<a name="line.765"></a>
-<span class="sourceLineNo">766</span>    expectedKeys = 4;<a name="line.766"></a>
-<span class="sourceLineNo">767</span>    f = new QualifierFilter(CompareOp.GREATER_OR_EQUAL,<a name="line.767"></a>
-<span class="sourceLineNo">768</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    s.setFilter(f);<a name="line.770"></a>
-<span class="sourceLineNo">771</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.771"></a>
-<span class="sourceLineNo">772</span><a name="line.772"></a>
-<span class="sourceLineNo">773</span>    // Match keys greater<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    // Expect two keys (one from each family)<a name="line.774"></a>
-<span class="sourceLineNo">775</span>    // Only look in first group of rows<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    expectedRows = this.numRows / 2;<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    expectedKeys = 2;<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    f = new QualifierFilter(CompareOp.GREATER,<a name="line.778"></a>
-<span class="sourceLineNo">779</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    s.setFilter(f);<a name="line.781"></a>
-<span class="sourceLineNo">782</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.782"></a>
-<span class="sourceLineNo">783</span><a name="line.783"></a>
-<span class="sourceLineNo">784</span>    // Match keys not equal to<a name="line.784"></a>
-<span class="sourceLineNo">785</span>    // Look across rows and fully validate the keys and ordering<a name="line.785"></a>
-<span class="sourceLineNo">786</span>    // Expect varied numbers of keys, 4 per row in group one, 6 per row in group two<a name="line.786"></a>
-<span class="sourceLineNo">787</span>    f = new QualifierFilter(CompareOp.NOT_EQUAL,<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        new BinaryComparator(QUALIFIERS_ONE[2]));<a name="line.788"></a>
-<span class="sourceLineNo">789</span>    s = new Scan();<a name="line.789"></a>
-<span class="sourceLineNo">790</span>    s.setFilter(f);<a name="line.790"></a>
-<span class="sourceLineNo">791</span><a name="line.791"></a>
-<span class="sourceLineNo">792</span>    KeyValue [] kvs = {<a name="line.792"></a>
-<span class="sourceLineNo">793</span>        // testRowOne-0<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.794"></a>
-<span class="sourceLineNo">795</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.795"></a>
-<span class="sourceLineNo">796</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.797"></a>
-<span class="sourceLineNo">798</span>        // testRowOne-2<a name="line.798"></a>
-<span class="sourceLineNo">799</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.799"></a>
-<span class="sourceLineNo">800</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.800"></a>
-<span class="sourceLineNo">801</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.801"></a>
-<span class="sourceLineNo">802</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.802"></a>
-<span class="sourceLineNo">803</span>        // testRowOne-3<a name="line.803"></a>
-<span class="sourceLineNo">804</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.804"></a>
-<span class="sourceLineNo">805</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.805"></a>
-<span class="sourceLineNo">806</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.806"></a>
-<span class="sourceLineNo">807</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.807"></a>
-<span class="sourceLineNo">808</span>        // testRowTwo-0<a name="line.808"></a>
-<span class="sourceLineNo">809</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.809"></a>
-<span class="sourceLineNo">810</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.810"></a>
-<span class="sourceLineNo">811</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.811"></a>
-<span class="sourceLineNo">812</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.812"></a>
-<span class="sourceLineNo">813</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.813"></a>
-<span class="sourceLineNo">814</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.814"></a>
-<span class="sourceLineNo">815</span>        // testRowTwo-2<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.816"></a>
-<span class="sourceLineNo">817</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.817"></a>
-<span class="sourceLineNo">818</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.818"></a>
-<span class="sourceLineNo">819</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.819"></a>
-<span class="sourceLineNo">820</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.820"></a>
-<span class="sourceLineNo">821</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.821"></a>
-<span class="sourceLineNo">822</span>        // testRowTwo-3<a name="line.822"></a>
-<span class="sourceLineNo">823</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.823"></a>
-<span class="sourceLineNo">824</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.824"></a>
-<span class="sourceLineNo">825</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.825"></a>
-<span class="sourceLineNo">826</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.826"></a>
-<span class="sourceLineNo">827</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.827"></a>
-<span class="sourceLineNo">828</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.828"></a>
-<span class="sourceLineNo">829</span>    };<a name="line.829"></a>
-<span class="sourceLineNo">830</span>    verifyScanFull(s, kvs);<a name="line.830"></a>
-<span class="sourceLineNo">831</span><a name="line.831"></a>
-<span class="sourceLineNo">832</span><a name="line.832"></a>
-<span class="sourceLineNo">833</span>    // Test across rows and groups with a regex<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    // Filter out "test*-2"<a name="line.834"></a>
-<span class="sourceLineNo">835</span>    // Expect 4 keys per row across both groups<a name="line.835"></a>
-<span class="sourceLineNo">836</span>    f = new QualifierFilter(CompareOp.NOT_EQUAL,<a name="line.836"></a>
-<span class="sourceLineNo">837</span>        new RegexStringComparator("test.+-2"));<a name="line.837"></a>
-<span class="sourceLineNo">838</span>    s = new Scan();<a name="line.838"></a>
-<span class="sourceLineNo">839</span>    s.setFilter(f);<a name="line.839"></a>
-<span class="sourceLineNo">840</span><a name="line.840"></a>
-<span class="sourceLineNo">841</span>    kvs = new KeyValue [] {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>        // testRowOne-0<a name="line.842"></a>
-<span class="sourceLineNo">843</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.843"></a>
-<span class="sourceLineNo">844</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.844"></a>
-<span class="sourceLineNo">845</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.845"></a>
-<span class="sourceLineNo">846</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.846"></a>
-<span class="sourceLineNo">847</span>        // testRowOne-2<a name="line.847"></a>
-<span class="sourceLineNo">848</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.848"></a>
-<span class="sourceLineNo">849</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.849"></a>
-<span class="sourceLineNo">850</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.850"></a>
-<span class="sourceLineNo">851</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.851"></a>
-<span class="sourceLineNo">852</span>        // testRowOne-3<a name="line.852"></a>
-<span class="sourceLineNo">853</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.853"></a>
-<span class="sourceLineNo">854</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.854"></a>
-<span class="sourceLineNo">855</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.855"></a>
-<span class="sourceLineNo">856</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.856"></a>
-<span class="sourceLineNo">857</span>        // testRowTwo-0<a name="line.857"></a>
-<span class="sourceLineNo">858</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.858"></a>
-<span class="sourceLineNo">859</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.859"></a>
-<span class="sourceLineNo">860</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.860"></a>
-<span class="sourceLineNo">861</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.861"></a>
-<span class="sourceLineNo">862</span>        // testRowTwo-2<a name="line.862"></a>
-<span class="sourceLineNo">863</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.863"></a>
-<span class="sourceLineNo">864</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.864"></a>
-<span class="sourceLineNo">865</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.865"></a>
-<span class="sourceLineNo">866</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.866"></a>
-<span class="sourceLineNo">867</span>        // testRowTwo-3<a name="line.867"></a>
-<span class="sourceLineNo">868</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.868"></a>
-<span class="sourceLineNo">869</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.869"></a>
-<span class="sourceLineNo">870</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.870"></a>
-<span class="sourceLineNo">871</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.871"></a>
-<span class="sourceLineNo">872</span>    };<a name="line.872"></a>
-<span class="sourceLineNo">873</span>    verifyScanFull(s, kvs);<a name="line.873"></a>
-<span class="sourceLineNo">874</span><a name="line.874"></a>
-<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
-<span class="sourceLineNo">876</span><a name="line.876"></a>
-<span class="sourceLineNo">877</span>  @Test<a name="line.877"></a>
-<span class="sourceLineNo">878</span>  public void testFamilyFilter() throws IOException {<a name="line.878"></a>
-<span class="sourceLineNo">879</span><a name="line.879"></a>
-<span class="sourceLineNo">880</span>      // Match family, only half of columns returned.<a name="line.880"></a>
-<span class="sourceLineNo">881</span>      long expectedRows = this.numRows;<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      long expectedKeys = this.colsPerRow / 2;<a name="line.882"></a>
-<span class="sourceLineNo">883</span>      Filter f = new FamilyFilter(CompareOp.EQUAL,<a name="line.883"></a>
-<span class="sourceLineNo">884</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      Scan s = new Scan();<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      s.setFilter(f);<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.887"></a>
-<span class="sourceLineNo">888</span><a name="line.888"></a>
-<span class="sourceLineNo">889</span>      // Match keys less than given family, should return nothing<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      expectedRows = 0;<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      expectedKeys = 0;<a name="line.891"></a>
-<span class="sourceLineNo">892</span>      f = new FamilyFilter(CompareOp.LESS,<a name="line.892"></a>
-<span class="sourceLineNo">893</span>          new BinaryComparator(Bytes.toBytes("testFamily")));<a name="line.893"></a>
-<span class="sourceLineNo">894</span>      s = new Scan();<a name="line.894"></a>
-<span class="sourceLineNo">895</span>      s.setFilter(f);<a name="line.895"></a>
-<span class="sourceLineNo">896</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.896"></a>
-<span class="sourceLineNo">897</span><a name="line.897"></a>
-<span class="sourceLineNo">898</span>      // Match keys less than or equal, should return half of columns<a name="line.898"></a>
-<span class="sourceLineNo">899</span>      expectedRows = this.numRows;<a name="line.899"></a>
-<span class="sourceLineNo">900</span>      expectedKeys = this.colsPerRow / 2;<a name="line.900"></a>
-<span class="sourceLineNo">901</span>      f = new FamilyFilter(CompareOp.LESS_OR_EQUAL,<a name="line.901"></a>
-<span class="sourceLineNo">902</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.902"></a>
-<span class="sourceLineNo">903</span>      s = new Scan();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>      s.setFilter(f);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.905"></a>
-<span class="sourceLineNo">906</span><a name="line.906"></a>
-<span class="sourceLineNo">907</span>      // Match keys from second family<a name="line.907"></a>
-<span class="sourceLineNo">908</span>      // look only in second group of rows<a name="line.908"></a>
-<span class="sourceLineNo">909</span>      expectedRows = this.numRows / 2;<a name="line.909"></a>
-<span class="sourceLineNo">910</span>      expectedKeys = this.colsPerRow / 2;<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      f = new FamilyFilter(CompareOp.NOT_EQUAL,<a name="line.911"></a>
-<span class="sourceLineNo">912</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      s.setFilter(f);<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.915"></a>
+<span class="sourceLineNo">731</span>    // Now use start row with inclusive stop filter<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    expectedRows = this.numRows / 2;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    s = new Scan(Bytes.toBytes("testRowOne-3"));<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    s.setReversed(true);<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    s.setFilter(new InclusiveStopFilter(Bytes.toBytes("testRowOne-0")));<a name="line.735"></a>
+<span class="sourceLineNo">736</span>    verifyScan(s, expectedRows, expectedKeys);<a name="line.736"></a>
+<span class="sourceLineNo">737</span><a name="line.737"></a>
+<span class="sourceLineNo">738</span>    // Grab rows from group two<a name="line.738"></a>
+<span class="sourceLineNo">739</span><a name="line.739"></a>
+<span class="sourceLineNo">740</span>    // If we just use start/stop row, we get total/2 - 1 rows<a name="line.740"></a>
+<span class="sourceLineNo">741</span>    expectedRows = (this.numRows / 2) - 1;<a name="line.741"></a>
+<span class="sourceLineNo">742</span>    expectedKeys = this.colsPerRow;<a name="line.742"></a>
+<span class="sourceLineNo">743</span>    s = new Scan(Bytes.toBytes("testRowTwo-3"), Bytes.toBytes("testRowTwo-0"));<a name="line.743"></a>
+<span class="sourceLineNo">744</span>    s.setReversed(true);<a name="line.744"></a>
+<span class="sourceLineNo">745</span>    verifyScan(s, expectedRows, expectedKeys);<a name="line.745"></a>
+<span class="sourceLineNo">746</span><a name="line.746"></a>
+<span class="sourceLineNo">747</span>    // Now use start row with inclusive stop filter<a name="line.747"></a>
+<span class="sourceLineNo">748</span>    expectedRows = this.numRows / 2;<a name="line.748"></a>
+<span class="sourceLineNo">749</span>    s = new Scan(Bytes.toBytes("testRowTwo-3"));<a name="line.749"></a>
+<span class="sourceLineNo">750</span>    s.setReversed(true);<a name="line.750"></a>
+<span class="sourceLineNo">751</span>    s.setFilter(new InclusiveStopFilter(Bytes.toBytes("testRowTwo-0")));<a name="line.751"></a>
+<span class="sourceLineNo">752</span>    verifyScan(s, expectedRows, expectedKeys);<a name="line.752"></a>
+<span class="sourceLineNo">753</span><a name="line.753"></a>
+<span class="sourceLineNo">754</span>  }<a name="line.754"></a>
+<span class="sourceLineNo">755</span><a name="line.755"></a>
+<span class="sourceLineNo">756</span>  @Test<a name="line.756"></a>
+<span class="sourceLineNo">757</span>  public void testQualifierFilter() throws IOException {<a name="line.757"></a>
+<span class="sourceLineNo">758</span><a name="line.758"></a>
+<span class="sourceLineNo">759</span>    // Match two keys (one from each family) in half the rows<a name="line.759"></a>
+<span class="sourceLineNo">760</span>    long expectedRows = this.numRows / 2;<a name="line.760"></a>
+<span class="sourceLineNo">761</span>    long expectedKeys = 2;<a name="line.761"></a>
+<span class="sourceLineNo">762</span>    Filter f = new QualifierFilter(CompareOp.EQUAL,<a name="line.762"></a>
+<span class="sourceLineNo">763</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.763"></a>
+<span class="sourceLineNo">764</span>    Scan s = new Scan();<a name="line.764"></a>
+<span class="sourceLineNo">765</span>    s.setFilter(f);<a name="line.765"></a>
+<span class="sourceLineNo">766</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.766"></a>
+<span class="sourceLineNo">767</span><a name="line.767"></a>
+<span class="sourceLineNo">768</span>    // Match keys less than same qualifier<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    // Expect only two keys (one from each family) in half the rows<a name="line.769"></a>
+<span class="sourceLineNo">770</span>    expectedRows = this.numRows / 2;<a name="line.770"></a>
+<span class="sourceLineNo">771</span>    expectedKeys = 2;<a name="line.771"></a>
+<span class="sourceLineNo">772</span>    f = new QualifierFilter(CompareOp.LESS,<a name="line.772"></a>
+<span class="sourceLineNo">773</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.773"></a>
+<span class="sourceLineNo">774</span>    s = new Scan();<a name="line.774"></a>
+<span class="sourceLineNo">775</span>    s.setFilter(f);<a name="line.775"></a>
+<span class="sourceLineNo">776</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.776"></a>
+<span class="sourceLineNo">777</span><a name="line.777"></a>
+<span class="sourceLineNo">778</span>    // Match keys less than or equal<a name="line.778"></a>
+<span class="sourceLineNo">779</span>    // Expect four keys (two from each family) in half the rows<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    expectedRows = this.numRows / 2;<a name="line.780"></a>
+<span class="sourceLineNo">781</span>    expectedKeys = 4;<a name="line.781"></a>
+<span class="sourceLineNo">782</span>    f = new QualifierFilter(CompareOp.LESS_OR_EQUAL,<a name="line.782"></a>
+<span class="sourceLineNo">783</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    s = new Scan();<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    s.setFilter(f);<a name="line.785"></a>
+<span class="sourceLineNo">786</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.786"></a>
+<span class="sourceLineNo">787</span><a name="line.787"></a>
+<span class="sourceLineNo">788</span>    // Match keys not equal<a name="line.788"></a>
+<span class="sourceLineNo">789</span>    // Expect four keys (two from each family)<a name="line.789"></a>
+<span class="sourceLineNo">790</span>    // Only look in first group of rows<a name="line.790"></a>
+<span class="sourceLineNo">791</span>    expectedRows = this.numRows / 2;<a name="line.791"></a>
+<span class="sourceLineNo">792</span>    expectedKeys = 4;<a name="line.792"></a>
+<span class="sourceLineNo">793</span>    f = new QualifierFilter(CompareOp.NOT_EQUAL,<a name="line.793"></a>
+<span class="sourceLineNo">794</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.794"></a>
+<span class="sourceLineNo">795</span>    s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.795"></a>
+<span class="sourceLineNo">796</span>    s.setFilter(f);<a name="line.796"></a>
+<span class="sourceLineNo">797</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.797"></a>
+<span class="sourceLineNo">798</span><a name="line.798"></a>
+<span class="sourceLineNo">799</span>    // Match keys greater or equal<a name="line.799"></a>
+<span class="sourceLineNo">800</span>    // Expect four keys (two from each family)<a name="line.800"></a>
+<span class="sourceLineNo">801</span>    // Only look in first group of rows<a name="line.801"></a>
+<span class="sourceLineNo">802</span>    expectedRows = this.numRows / 2;<a name="line.802"></a>
+<span class="sourceLineNo">803</span>    expectedKeys = 4;<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    f = new QualifierFilter(CompareOp.GREATER_OR_EQUAL,<a name="line.804"></a>
+<span class="sourceLineNo">805</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.805"></a>
+<span class="sourceLineNo">806</span>    s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.806"></a>
+<span class="sourceLineNo">807</span>    s.setFilter(f);<a name="line.807"></a>
+<span class="sourceLineNo">808</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.808"></a>
+<span class="sourceLineNo">809</span><a name="line.809"></a>
+<span class="sourceLineNo">810</span>    // Match keys greater<a name="line.810"></a>
+<span class="sourceLineNo">811</span>    // Expect two keys (one from each family)<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    // Only look in first group of rows<a name="line.812"></a>
+<span class="sourceLineNo">813</span>    expectedRows = this.numRows / 2;<a name="line.813"></a>
+<span class="sourceLineNo">814</span>    expectedKeys = 2;<a name="line.814"></a>
+<span class="sourceLineNo">815</span>    f = new QualifierFilter(CompareOp.GREATER,<a name="line.815"></a>
+<span class="sourceLineNo">816</span>        new BinaryComparator(Bytes.toBytes("testQualifierOne-2")));<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    s.setFilter(f);<a name="line.818"></a>
+<span class="sourceLineNo">819</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.819"></a>
+<span class="sourceLineNo">820</span><a name="line.820"></a>
+<span class="sourceLineNo">821</span>    // Match keys not equal to<a name="line.821"></a>
+<span class="sourceLineNo">822</span>    // Look across rows and fully validate the keys and ordering<a name="line.822"></a>
+<span class="sourceLineNo">823</span>    // Expect varied numbers of keys, 4 per row in group one, 6 per row in group two<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    f = new QualifierFilter(CompareOp.NOT_EQUAL,<a name="line.824"></a>
+<span class="sourceLineNo">825</span>        new BinaryComparator(QUALIFIERS_ONE[2]));<a name="line.825"></a>
+<span class="sourceLineNo">826</span>    s = new Scan();<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    s.setFilter(f);<a name="line.827"></a>
+<span class="sourceLineNo">828</span><a name="line.828"></a>
+<span class="sourceLineNo">829</span>    KeyValue [] kvs = {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>        // testRowOne-0<a name="line.830"></a>
+<span class="sourceLineNo">831</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.831"></a>
+<span class="sourceLineNo">832</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.832"></a>
+<span class="sourceLineNo">833</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.833"></a>
+<span class="sourceLineNo">834</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.834"></a>
+<span class="sourceLineNo">835</span>        // testRowOne-2<a name="line.835"></a>
+<span class="sourceLineNo">836</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.836"></a>
+<span class="sourceLineNo">837</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.837"></a>
+<span class="sourceLineNo">838</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.838"></a>
+<span class="sourceLineNo">839</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.839"></a>
+<span class="sourceLineNo">840</span>        // testRowOne-3<a name="line.840"></a>
+<span class="sourceLineNo">841</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.841"></a>
+<span class="sourceLineNo">842</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.842"></a>
+<span class="sourceLineNo">843</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.843"></a>
+<span class="sourceLineNo">844</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.844"></a>
+<span class="sourceLineNo">845</span>        // testRowTwo-0<a name="line.845"></a>
+<span class="sourceLineNo">846</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.846"></a>
+<span class="sourceLineNo">847</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.847"></a>
+<span class="sourceLineNo">848</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.848"></a>
+<span class="sourceLineNo">849</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.849"></a>
+<span class="sourceLineNo">850</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.850"></a>
+<span class="sourceLineNo">851</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.851"></a>
+<span class="sourceLineNo">852</span>        // testRowTwo-2<a name="line.852"></a>
+<span class="sourceLineNo">853</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.853"></a>
+<span class="sourceLineNo">854</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.854"></a>
+<span class="sourceLineNo">855</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.855"></a>
+<span class="sourceLineNo">856</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.856"></a>
+<span class="sourceLineNo">857</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.857"></a>
+<span class="sourceLineNo">858</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.858"></a>
+<span class="sourceLineNo">859</span>        // testRowTwo-3<a name="line.859"></a>
+<span class="sourceLineNo">860</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.860"></a>
+<span class="sourceLineNo">861</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.861"></a>
+<span class="sourceLineNo">862</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.862"></a>
+<span class="sourceLineNo">863</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.863"></a>
+<span class="sourceLineNo">864</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.864"></a>
+<span class="sourceLineNo">865</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.865"></a>
+<span class="sourceLineNo">866</span>    };<a name="line.866"></a>
+<span class="sourceLineNo">867</span>    verifyScanFull(s, kvs);<a name="line.867"></a>
+<span class="sourceLineNo">868</span><a name="line.868"></a>
+<span class="sourceLineNo">869</span><a name="line.869"></a>
+<span class="sourceLineNo">870</span>    // Test across rows and groups with a regex<a name="line.870"></a>
+<span class="sourceLineNo">871</span>    // Filter out "test*-2"<a name="line.871"></a>
+<span class="sourceLineNo">872</span>    // Expect 4 keys per row across both groups<a name="line.872"></a>
+<span class="sourceLineNo">873</span>    f = new QualifierFilter(CompareOp.NOT_EQUAL,<a name="line.873"></a>
+<span class="sourceLineNo">874</span>        new RegexStringComparator("test.+-2"));<a name="line.874"></a>
+<span class="sourceLineNo">875</span>    s = new Scan();<a name="line.875"></a>
+<span class="sourceLineNo">876</span>    s.setFilter(f);<a name="line.876"></a>
+<span class="sourceLineNo">877</span><a name="line.877"></a>
+<span class="sourceLineNo">878</span>    kvs = new KeyValue [] {<a name="line.878"></a>
+<span class="sourceLineNo">879</span>        // testRowOne-0<a name="line.879"></a>
+<span class="sourceLineNo">880</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.880"></a>
+<span class="sourceLineNo">881</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.881"></a>
+<span class="sourceLineNo">882</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.883"></a>
+<span class="sourceLineNo">884</span>        // testRowOne-2<a name="line.884"></a>
+<span class="sourceLineNo">885</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.885"></a>
+<span class="sourceLineNo">886</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.886"></a>
+<span class="sourceLineNo">887</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.887"></a>
+<span class="sourceLineNo">888</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.888"></a>
+<span class="sourceLineNo">889</span>        // testRowOne-3<a name="line.889"></a>
+<span class="sourceLineNo">890</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.890"></a>
+<span class="sourceLineNo">891</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.891"></a>
+<span class="sourceLineNo">892</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.892"></a>
+<span class="sourceLineNo">893</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.893"></a>
+<span class="sourceLineNo">894</span>        // testRowTwo-0<a name="line.894"></a>
+<span class="sourceLineNo">895</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.895"></a>
+<span class="sourceLineNo">896</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.896"></a>
+<span class="sourceLineNo">897</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.897"></a>
+<span class="sourceLineNo">898</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.898"></a>
+<span class="sourceLineNo">899</span>        // testRowTwo-2<a name="line.899"></a>
+<span class="sourceLineNo">900</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.900"></a>
+<span class="sourceLineNo">901</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.901"></a>
+<span class="sourceLineNo">902</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.902"></a>
+<span class="sourceLineNo">903</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.903"></a>
+<span class="sourceLineNo">904</span>        // testRowTwo-3<a name="line.904"></a>
+<span class="sourceLineNo">905</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.905"></a>
+<span class="sourceLineNo">906</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.906"></a>
+<span class="sourceLineNo">907</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.907"></a>
+<span class="sourceLineNo">908</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.908"></a>
+<span class="sourceLineNo">909</span>    };<a name="line.909"></a>
+<span class="sourceLineNo">910</span>    verifyScanFull(s, kvs);<a name="line.910"></a>
+<span class="sourceLineNo">911</span><a name="line.911"></a>
+<span class="sourceLineNo">912</span>  }<a name="line.912"></a>
+<span class="sourceLineNo">913</span><a name="line.913"></a>
+<span class="sourceLineNo">914</span>  @Test<a name="line.914"></a>
+<span class="sourceLineNo">915</span>  public void testFamilyFilter() throws IOException {<a name="line.915"></a>
 <span class="sourceLineNo">916</span><a name="line.916"></a>
-<span class="sourceLineNo">917</span>      // Match all columns<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      // look only in second group of rows<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      expectedRows = this.numRows / 2;<a name="line.919"></a>
-<span class="sourceLineNo">920</span>      expectedKeys = this.colsPerRow;<a name="line.920"></a>
-<span class="sourceLineNo">921</span>      f = new FamilyFilter(CompareOp.GREATER_OR_EQUAL,<a name="line.921"></a>
-<span class="sourceLineNo">922</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.922"></a>
-<span class="sourceLineNo">923</span>      s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.923"></a>
-<span class="sourceLineNo">924</span>      s.setFilter(f);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.925"></a>
-<span class="sourceLineNo">926</span><a name="line.926"></a>
-<span class="sourceLineNo">927</span>      // Match all columns in second family<a name="line.927"></a>
-<span class="sourceLineNo">928</span>      // look only in second group of rows<a name="line.928"></a>
-<span class="sourceLineNo">929</span>      expectedRows = this.numRows / 2;<a name="line.929"></a>
-<span class="sourceLineNo">930</span>      expectedKeys = this.colsPerRow / 2;<a name="line.930"></a>
-<span class="sourceLineNo">931</span>      f = new FamilyFilter(CompareOp.GREATER,<a name="line.931"></a>
-<span class="sourceLineNo">932</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.932"></a>
-<span class="sourceLineNo">933</span>      s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.933"></a>
-<span class="sourceLineNo">934</span>      s.setFilter(f);<a name="line.934"></a>
-<span class="sourceLineNo">935</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.935"></a>
-<span class="sourceLineNo">936</span><a name="line.936"></a>
-<span class="sourceLineNo">937</span>      // Match keys not equal to given family<a name="line.937"></a>
-<span class="sourceLineNo">938</span>      // Look across rows and fully validate the keys and ordering<a name="line.938"></a>
-<span class="sourceLineNo">939</span>      f = new FamilyFilter(CompareOp.NOT_EQUAL,<a name="line.939"></a>
-<span class="sourceLineNo">940</span>          new BinaryComparator(FAMILIES[1]));<a name="line.940"></a>
-<span class="sourceLineNo">941</span>      s = new Scan();<a name="line.941"></a>
-<span class="sourceLineNo">942</span>      s.setFilter(f);<a name="line.942"></a>
+<span class="sourceLineNo">917</span>      // Match family, only half of columns returned.<a name="line.917"></a>
+<span class="sourceLineNo">918</span>      long expectedRows = this.numRows;<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      long expectedKeys = this.colsPerRow / 2;<a name="line.919"></a>
+<span class="sourceLineNo">920</span>      Filter f = new FamilyFilter(CompareOp.EQUAL,<a name="line.920"></a>
+<span class="sourceLineNo">921</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.921"></a>
+<span class="sourceLineNo">922</span>      Scan s = new Scan();<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      s.setFilter(f);<a name="line.923"></a>
+<span class="sourceLineNo">924</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.924"></a>
+<span class="sourceLineNo">925</span><a name="line.925"></a>
+<span class="sourceLineNo">926</span>      // Match keys less than given family, should return nothing<a name="line.926"></a>
+<span class="sourceLineNo">927</span>      expectedRows = 0;<a name="line.927"></a>
+<span class="sourceLineNo">928</span>      expectedKeys = 0;<a name="line.928"></a>
+<span class="sourceLineNo">929</span>      f = new FamilyFilter(CompareOp.LESS,<a name="line.929"></a>
+<span class="sourceLineNo">930</span>          new BinaryComparator(Bytes.toBytes("testFamily")));<a name="line.930"></a>
+<span class="sourceLineNo">931</span>      s = new Scan();<a name="line.931"></a>
+<span class="sourceLineNo">932</span>      s.setFilter(f);<a name="line.932"></a>
+<span class="sourceLineNo">933</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.933"></a>
+<span class="sourceLineNo">934</span><a name="line.934"></a>
+<span class="sourceLineNo">935</span>      // Match keys less than or equal, should return half of columns<a name="line.935"></a>
+<span class="sourceLineNo">936</span>      expectedRows = this.numRows;<a name="line.936"></a>
+<span class="sourceLineNo">937</span>      expectedKeys = this.colsPerRow / 2;<a name="line.937"></a>
+<span class="sourceLineNo">938</span>      f = new FamilyFilter(CompareOp.LESS_OR_EQUAL,<a name="line.938"></a>
+<span class="sourceLineNo">939</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.939"></a>
+<span class="sourceLineNo">940</span>      s = new Scan();<a name="line.940"></a>
+<span class="sourceLineNo">941</span>      s.setFilter(f);<a name="line.941"></a>
+<span class="sourceLineNo">942</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.942"></a>
 <span class="sourceLineNo">943</span><a name="line.943"></a>
-<span class="sourceLineNo">944</span>      KeyValue [] kvs = {<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          // testRowOne-0<a name="line.945"></a>
-<span class="sourceLineNo">946</span>          new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.946"></a>
-<span class="sourceLineNo">947</span>          new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.947"></a>
-<span class="sourceLineNo">948</span>          new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.948"></a>
-<span class="sourceLineNo">949</span>          // testRowOne-2<a name="line.949"></a>
-<span class="sourceLineNo">950</span>          new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.950"></a>
-<span class="sourceLineNo">951</span>          new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.951"></a>
-<span class="sourceLineNo">952</span>          new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.952"></a>
-<span class="sourceLineNo">953</span>          // testRowOne-3<a name="line.953"></a>
-<span class="sourceLineNo">954</span>          new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.954"></a>
-<span class="sourceLineNo">955</span>          new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.955"></a>
-<span class="sourceLineNo">956</span>          new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.956"></a>
-<span class="sourceLineNo">957</span>          // testRowTwo-0<a name="line.957"></a>
-<span class="sourceLineNo">958</span>          new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.958"></a>
-<span class="sourceLineNo">959</span>          new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.959"></a>
-<span class="sourceLineNo">960</span>          new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.960"></a>
-<span class="sourceLineNo">961</span>          // testRowTwo-2<a name="line.961"></a>
-<span class="sourceLineNo">962</span>          new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.962"></a>
-<span class="sourceLineNo">963</span>          new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.963"></a>
-<span class="sourceLineNo">964</span>          new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.964"></a>
-<span class="sourceLineNo">965</span>          // testRowTwo-3<a name="line.965"></a>
-<span class="sourceLineNo">966</span>          new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.966"></a>
-<span class="sourceLineNo">967</span>          new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.967"></a>
-<span class="sourceLineNo">968</span>          new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.968"></a>
-<span class="sourceLineNo">969</span>      };<a name="line.969"></a>
-<span class="sourceLineNo">970</span>      verifyScanFull(s, kvs);<a name="line.970"></a>
-<span class="sourceLineNo">971</span><a name="line.971"></a>
-<span class="sourceLineNo">972</span><a name="line.972"></a>
-<span class="sourceLineNo">973</span>      // Test across rows and groups with a regex<a name="line.973"></a>
-<span class="sourceLineNo">974</span>      // Filter out "test*-2"<a name="line.974"></a>
-<span class="sourceLineNo">975</span>      // Expect 4 keys per row across both groups<a name="line.975"></a>
+<span class="sourceLineNo">944</span>      // Match keys from second family<a name="line.944"></a>
+<span class="sourceLineNo">945</span>      // look only in second group of rows<a name="line.945"></a>
+<span class="sourceLineNo">946</span>      expectedRows = this.numRows / 2;<a name="line.946"></a>
+<span class="sourceLineNo">947</span>      expectedKeys = this.colsPerRow / 2;<a name="line.947"></a>
+<span class="sourceLineNo">948</span>      f = new FamilyFilter(CompareOp.NOT_EQUAL,<a name="line.948"></a>
+<span class="sourceLineNo">949</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      s.setFilter(f);<a name="line.951"></a>
+<span class="sourceLineNo">952</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.952"></a>
+<span class="sourceLineNo">953</span><a name="line.953"></a>
+<span class="sourceLineNo">954</span>      // Match all columns<a name="line.954"></a>
+<span class="sourceLineNo">955</span>      // look only in second group of rows<a name="line.955"></a>
+<span class="sourceLineNo">956</span>      expectedRows = this.numRows / 2;<a name="line.956"></a>
+<span class="sourceLineNo">957</span>      expectedKeys = this.colsPerRow;<a name="line.957"></a>
+<span class="sourceLineNo">958</span>      f = new FamilyFilter(CompareOp.GREATER_OR_EQUAL,<a name="line.958"></a>
+<span class="sourceLineNo">959</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.959"></a>
+<span class="sourceLineNo">960</span>      s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.960"></a>
+<span class="sourceLineNo">961</span>      s.setFilter(f);<a name="line.961"></a>
+<span class="sourceLineNo">962</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.962"></a>
+<span class="sourceLineNo">963</span><a name="line.963"></a>
+<span class="sourceLineNo">964</span>      // Match all columns in second family<a name="line.964"></a>
+<span class="sourceLineNo">965</span>      // look only in second group of rows<a name="line.965"></a>
+<span class="sourceLineNo">966</span>      expectedRows = this.numRows / 2;<a name="line.966"></a>
+<span class="sourceLineNo">967</span>      expectedKeys = this.colsPerRow / 2;<a name="line.967"></a>
+<span class="sourceLineNo">968</span>      f = new FamilyFilter(CompareOp.GREATER,<a name="line.968"></a>
+<span class="sourceLineNo">969</span>          new BinaryComparator(Bytes.toBytes("testFamilyOne")));<a name="line.969"></a>
+<span class="sourceLineNo">970</span>      s = new Scan(HConstants.EMPTY_START_ROW, Bytes.toBytes("testRowTwo"));<a name="line.970"></a>
+<span class="sourceLineNo">971</span>      s.setFilter(f);<a name="line.971"></a>
+<span class="sourceLineNo">972</span>      verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.972"></a>
+<span class="sourceLineNo">973</span><a name="line.973"></a>
+<span class="sourceLineNo">974</span>      // Match keys not equal to given family<a name="line.974"></a>
+<span class="sourceLineNo">975</span>      // Look across rows and fully validate the keys and ordering<a name="line.975"></a>
 <span class="sourceLineNo">976</span>      f = new FamilyFilter(CompareOp.NOT_EQUAL,<a name="line.976"></a>
-<span class="sourceLineNo">977</span>          new RegexStringComparator("test.*One"));<a name="line.977"></a>
+<span class="sourceLineNo">977</span>          new BinaryComparator(FAMILIES[1]));<a name="line.977"></a>
 <span class="sourceLineNo">978</span>      s = new Scan();<a name="line.978"></a>
 <span class="sourceLineNo">979</span>      s.setFilter(f);<a name="line.979"></a>
 <span class="sourceLineNo">980</span><a name="line.980"></a>
-<span class="sourceLineNo">981</span>      kvs = new KeyValue [] {<a name="line.981"></a>
+<span class="sourceLineNo">981</span>      KeyValue [] kvs = {<a name="line.981"></a>
 <span class="sourceLineNo">982</span>          // testRowOne-0<a name="line.982"></a>
-<span class="sourceLineNo">983</span>          new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.983"></a>
-<span class="sourceLineNo">984</span>          new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.984"></a>
-<span class="sourceLineNo">985</span>          new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.985"></a>
+<span class="sourceLineNo">983</span>          new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.983"></a>
+<span class="sourceLineNo">984</span>          new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.984"></a>
+<span class="sourceLineNo">985</span>          new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.985"></a>
 <span class="sourceLineNo">986</span>          // testRowOne-2<a name="line.986"></a>
-<span class="sourceLineNo">987</span>          new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.987"></a>
-<span class="sourceLineNo">988</span>          new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.988"></a>
-<span class="sourceLineNo">989</span>          new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.989"></a>
+<span class="sourceLineNo">987</span>          new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.987"></a>
+<span class="sourceLineNo">988</span>          new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.988"></a>
+<span class="sourceLineNo">989</span>          new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.989"></a>
 <span class="sourceLineNo">990</span>          // testRowOne-3<a name="line.990"></a>
-<span class="sourceLineNo">991</span>          new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.991"></a>
-<span class="sourceLineNo">992</span>          new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.992"></a>
-<span class="sourceLineNo">993</span>          new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.993"></a>
+<span class="sourceLineNo">991</span>          new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.991"></a>
+<span class="sourceLineNo">992</span>          new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.992"></a>
+<span class="sourceLineNo">993</span>          new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.993"></a>
 <span class="sourceLineNo">994</span>          // testRowTwo-0<a name="line.994"></a>
-<span class="sourceLineNo">995</span>          new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.995"></a>
-<span class="sourceLineNo">996</span>          new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.996"></a>
-<span class="sourceLineNo">997</span>          new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.997"></a>
+<span class="sourceLineNo">995</span>          new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.995"></a>
+<span class="sourceLineNo">996</span>          new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.996"></a>
+<span class="sourceLineNo">997</span>          new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.997"></a>
 <span class="sourceLineNo">998</span>          // testRowTwo-2<a name="line.998"></a>
-<span class="sourceLineNo">999</span>          new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.999"></a>
-<span class="sourceLineNo">1000</span>          new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>          new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1001"></a>
+<span class="sourceLineNo">999</span>          new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>          new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>          new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1001"></a>
 <span class="sourceLineNo">1002</span>          // testRowTwo-3<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>          new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>          new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>          new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1005"></a>
+<span class="sourceLineNo">1003</span>          new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>          new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>          new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1005"></a>
 <span class="sourceLineNo">1006</span>      };<a name="line.1006"></a>
 <span class="sourceLineNo">1007</span>      verifyScanFull(s, kvs);<a name="line.1007"></a>
 <span class="sourceLineNo">1008</span><a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>    }<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span><a name="line.1010"></a>
-<span class="sourceLineNo">1011</span><a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>  @Test<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span>  public void testRowFilter() throws IOException {<a name="line.1013"></a>
-<span class="sourceLineNo">1014</span><a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>    // Match a single row, all keys<a name="line.1015"></a>
-<span class="sourceLineNo">1016</span>    long expectedRows = 1;<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>    long expectedKeys = this.colsPerRow;<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>    Filter f = new RowFilter(CompareOp.EQUAL,<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>    Scan s = new Scan();<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>    s.setFilter(f);<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span><a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>    // Match a two rows, one from each group, using regex<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>    expectedRows = 2;<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    expectedKeys = this.colsPerRow;<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    f = new RowFilter(CompareOp.EQUAL,<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>        new RegexStringComparator("testRow.+-2"));<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span>    s = new Scan();<a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>    s.setFilter(f);<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span><a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>    // Match rows less than<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>    // Expect all keys in one row<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>    expectedRows = 1;<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>    expectedKeys = this.colsPerRow;<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    f = new RowFilter(CompareOp.LESS,<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span>    s = new Scan();<a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>    s.setFilter(f);<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span><a name="line.1042"></a>
-<span class="sourceLineNo">1043</span>    // Match rows less than or equal<a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>    // Expect all keys in two rows<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    expectedRows = 2;<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>    expectedKeys = this.colsPerRow;<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span>    f = new RowFilter(CompareOp.LESS_OR_EQUAL,<a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    s = new Scan();<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    s.setFilter(f);<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span><a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>    // Match rows not equal<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>    // Expect all keys in all but one row<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    expectedRows = this.numRows - 1;<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>    expectedKeys = this.colsPerRow;<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span>    f = new RowFilter(CompareOp.NOT_EQUAL,<a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    s = new Scan();<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    s.setFilter(f);<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span><a name="line.1062"></a>
-<span class="sourceLineNo">1063</span>    // Match keys greater or equal<a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>    // Expect all keys in all but one row<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    expectedRows = this.numRows - 1;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>    expectedKeys = this.colsPerRow;<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span>    f = new RowFilter(CompareOp.GREATER_OR_EQUAL,<a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>    s = new Scan();<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>    s.setFilter(f);<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span><a name="line.1072"></a>
-<span class="sourceLineNo">1073</span>    // Match keys greater<a name="line.1073"></a>
-<span class="sourceLineNo">1074</span>    // Expect all keys in all but two rows<a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>    expectedRows = this.numRows - 2;<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    expectedKeys = this.colsPerRow;<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    f = new RowFilter(CompareOp.GREATER,<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    s = new Scan();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    s.setFilter(f);<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1081"></a>
-<span class="sourceLineNo">1082</span><a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // Match rows not equal to testRowTwo-2<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // Look across rows and fully validate the keys and ordering<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    // Should see all keys in all rows but testRowTwo-2<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>    f = new RowFilter(CompareOp.NOT_EQUAL,<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span>    s = new Scan();<a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    s.setFilter(f);<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span><a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    KeyValue [] kvs = {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>        // testRowOne-0<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>        new KeyValue(ROWS_ONE[0], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>        new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>        // testRowOne-3<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>        new KeyValue(ROWS_ONE[3], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>        new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>        // testRowTwo-0<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>        new KeyValue(ROWS_TWO[0], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span>        new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>        // testRowTwo-2<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        // testRowTwo-3<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>        new KeyValue(ROWS_TWO[3], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>        new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    };<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>    verifyScanFull(s, kvs);<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span><a name="line.1129"></a>
-<span class="sourceLineNo">1130</span><a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>    // Test across rows and groups with a regex<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>    // Filter out everything that doesn't match "*-2"<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>    // Expect all keys in two rows<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>    f = new RowFilter(CompareOp.EQUAL,<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>        new RegexStringComparator(".+-2"));<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>    s = new Scan();<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>    s.setFilter(f);<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span><a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>    kvs = new KeyValue [] {<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>        // testRowOne-2<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>        new KeyValue(ROWS_ONE[2], FAMILIES[0], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>        new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>        // testRowTwo-2<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>        new KeyValue(ROWS_TWO[2], FAMILIES[0], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>        new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1])<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    };<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    verifyScanFull(s, kvs);<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span><a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>  }<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span><a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>  @Test<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>  public void testValueFilter() throws IOException {<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span><a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    // Match group one rows<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    long expectedRows = this.numRows / 2;<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    long expectedKeys = this.colsPerRow;<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>    Filter f = new ValueFilter(CompareOp.EQUAL,<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>        new BinaryComparator(Bytes.toBytes("testValueOne")));<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>    Scan s = new Scan();<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>    s.setFilter(f);<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span><a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>    // Match group two rows<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    expectedRows = this.numRows / 2;<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    expectedKeys = this.colsPerRow;<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>    f = new ValueFilter(CompareOp.EQUAL,<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span>        new BinaryComparator(Bytes.toBytes("testValueTwo")));<a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>    s = new Scan();<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>    s.setFilter(f);<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span><a name="line.1179"></a>
-<span class="sourceLineNo">1180</span>    // Match all values using regex<a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>    expectedRows = this.numRows;<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>    expectedKeys = this.colsPerRow;<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>    f = new ValueFilter(CompareOp.EQUAL,<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>        new RegexStringComparator("testValue((One)|(Two))"));<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>    s = new Scan();<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>    s.setFilter(f);<a name="line.1186"></a>
-<span class="sourceLineNo">1187</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span><a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    // Match values less than<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    // Expect group one rows<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>    expectedRows = this.numRows / 2;<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>    expectedKeys = this.colsPerRow;<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>    f = new ValueFilter(CompareOp.LESS,<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        new BinaryComparator(Bytes.toBytes("testValueTwo")));<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>    s = new Scan();<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>    s.setFilter(f);<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1197"></a>
+<span class="sourceLineNo">1009</span><a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>      // Test across rows and groups with a regex<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>      // Filter out "test*-2"<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>      // Expect 4 keys per row across both groups<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>      f = new FamilyFilter(CompareOp.NOT_EQUAL,<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>          new RegexStringComparator("test.*One"));<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>      s = new Scan();<a name="line.1015"></a>
+<span class="sourceLineNo">1016</span>      s.setFilter(f);<a name="line.1016"></a>
+<span class="sourceLineNo">1017</span><a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>      kvs = new KeyValue [] {<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>          // testRowOne-0<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>          new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>          new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>          new KeyValue(ROWS_ONE[0], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          // testRowOne-2<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>          new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>          new KeyValue(ROWS_ONE[2], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>          // testRowOne-3<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>          new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[0], VALUES[0]),<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>          new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[2], VALUES[0]),<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>          new KeyValue(ROWS_ONE[3], FAMILIES[1], QUALIFIERS_ONE[3], VALUES[0]),<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>          // testRowTwo-0<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>          new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span>          new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>          new KeyValue(ROWS_TWO[0], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>          // testRowTwo-2<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>          new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>          new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>          new KeyValue(ROWS_TWO[2], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>          // testRowTwo-3<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span>          new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[0], VALUES[1]),<a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>          new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[2], VALUES[1]),<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>          new KeyValue(ROWS_TWO[3], FAMILIES[1], QUALIFIERS_TWO[3], VALUES[1]),<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>      };<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>      verifyScanFull(s, kvs);<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span><a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>    }<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span><a name="line.1047"></a>
+<span class="sourceLineNo">1048</span><a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>  @Test<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span>  public void testRowFilter() throws IOException {<a name="line.1050"></a>
+<span class="sourceLineNo">1051</span><a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    // Match a single row, all keys<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>    long expectedRows = 1;<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span>    long expectedKeys = this.colsPerRow;<a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>    Filter f = new RowFilter(CompareOp.EQUAL,<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>    Scan s = new Scan();<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span>    s.setFilter(f);<a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span><a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // Match a two rows, one from each group, using regex<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    expectedRows = 2;<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>    expectedKeys = this.colsPerRow;<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>    f = new RowFilter(CompareOp.EQUAL,<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>        new RegexStringComparator("testRow.+-2"));<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    s = new Scan();<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>    s.setFilter(f);<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1068"></a>
+<span class="sourceLineNo">1069</span><a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>    // Match rows less than<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    // Expect all keys in one row<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    expectedRows = 1;<a name="line.1072"></a>
+<span class="sourceLineNo">1073</span>    expectedKeys = this.colsPerRow;<a name="line.1073"></a>
+<span class="sourceLineNo">1074</span>    f = new RowFilter(CompareOp.LESS,<a name="line.1074"></a>
+<span class="sourceLineNo">1075</span>        new BinaryComparator(Bytes.toBytes("testRowOne-2")));<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    s = new Scan();<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>    s.setFilter(f);<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span>    verifyScanNoEarlyOut(s, expectedRows, expectedKeys);<a name="line.1078"></a>
+<span class="sourceLineNo">1079</span><a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>    // Match rows less than or equal<a name="line.1080"></a>
+<span class="sourceLi

<TRUNCATED>

[14/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
index 3a9a7f7..d857fe6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
@@ -311,1174 +311,1177 @@
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  private IOEngine getIOEngineFromName(String ioEngineName, long capacity)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:"))<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:")) {<a name="line.306"></a>
 <span class="sourceLineNo">307</span>      return new FileIOEngine(ioEngineName.substring(5), capacity);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    else if (ioEngineName.startsWith("offheap"))<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    } else if (ioEngineName.startsWith("offheap")) {<a name="line.308"></a>
 <span class="sourceLineNo">309</span>      return new ByteBufferIOEngine(capacity, true);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    else if (ioEngineName.startsWith("heap"))<a name="line.310"></a>
+<span class="sourceLineNo">310</span>    } else if (ioEngineName.startsWith("heap")) {<a name="line.310"></a>
 <span class="sourceLineNo">311</span>      return new ByteBufferIOEngine(capacity, false);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    else<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw new IllegalArgumentException(<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * Cache the block with the specified name and buffer.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param cacheKey block's cache key<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param buf block buffer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    cacheBlock(cacheKey, buf, false, false);<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>   * Cache the block with the specified name and buffer.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @param cacheKey block's cache key<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param cachedItem block buffer<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @param inMemory if block is in-memory<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param cacheDataInL1<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final boolean cacheDataInL1) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Cache the block to ramCache<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param cacheKey block's cache key<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param cachedItem block buffer<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param inMemory if block is in-memory<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param wait if true, blocking wait when queue is full<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      boolean wait) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (!cacheEnabled) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>    /*<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    RAMQueueEntry re =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    boolean successfulAddition = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (wait) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } catch (InterruptedException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Thread.currentThread().interrupt();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      successfulAddition = bq.offer(re);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (!successfulAddition) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ramCache.remove(cacheKey);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      cacheStats.failInsert();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    } else {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.blockNumber.incrementAndGet();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Get the buffer of the block with the specified key.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param key block's cache key<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @return buffer of specified cache key, or null if not in cache<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 Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      boolean updateCacheMetrics) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (!cacheEnabled) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (re != null) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (updateCacheMetrics) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      re.access(accessCount.incrementAndGet());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return re.getData();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (bucketEntry != null) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      long start = System.nanoTime();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        lock.readLock().lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        // existence here.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          // TODO : change this area - should be removed after server cells and<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // 12295 are available<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int len = bucketEntry.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          long timeTaken = System.nanoTime() - start;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (updateCacheMetrics) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            cacheStats.ioHit(timeTaken);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            bucketEntry.refCount.incrementAndGet();<a name="line.430"></a>
+<span class="sourceLineNo">312</span>    } else if (ioEngineName.startsWith("mmap:")) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FileMmapEngine(ioEngineName.substring(5), capacity);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Cache the block with the specified name and buffer.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param cacheKey block's cache key<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param buf block buffer<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    cacheBlock(cacheKey, buf, false, false);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * Cache the block with the specified name and buffer.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param cacheKey block's cache key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param cachedItem block buffer<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param inMemory if block is in-memory<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param cacheDataInL1<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final boolean cacheDataInL1) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<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>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Cache the block to ramCache<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cacheKey block's cache key<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param cachedItem block buffer<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param inMemory if block is in-memory<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param wait if true, blocking wait when queue is full<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      boolean wait) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    if (!cacheEnabled) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    /*<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    RAMQueueEntry re =<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    boolean successfulAddition = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (wait) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      } catch (InterruptedException e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        Thread.currentThread().interrupt();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      successfulAddition = bq.offer(re);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    if (!successfulAddition) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ramCache.remove(cacheKey);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      cacheStats.failInsert();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } else {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.blockNumber.incrementAndGet();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Get the buffer of the block with the specified key.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param key block's cache key<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return buffer of specified cache key, or null if not in cache<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      boolean updateCacheMetrics) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (!cacheEnabled) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (re != null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (updateCacheMetrics) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      re.access(accessCount.incrementAndGet());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return re.getData();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (bucketEntry != null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      long start = System.nanoTime();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        lock.readLock().lock();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // existence here.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          // TODO : change this area - should be removed after server cells and<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          // 12295 are available<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          int len = bucketEntry.getLength();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          long timeTaken = System.nanoTime() - start;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          if (updateCacheMetrics) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            cacheStats.ioHit(timeTaken);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>          }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            ioErrorStartTime = -1;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          return cachedBlock;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } catch (IOException ioex) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        checkIOErrorIsTolerated();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      } finally {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        lock.readLock().unlock();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.446"></a>
+<span class="sourceLineNo">432</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>            bucketEntry.refCount.incrementAndGet();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            ioErrorStartTime = -1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          return cachedBlock;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      } catch (IOException ioex) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        checkIOErrorIsTolerated();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      } finally {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        lock.readLock().unlock();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return null;<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>  @VisibleForTesting<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (decrementBlockNumber) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      this.blockNumber.decrementAndGet();<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return evictBlock(cacheKey, true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // bucket map<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!cacheEnabled) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return false;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (bucketEntry == null) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (removedBlock != null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        return true;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      } else {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        return false;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      lock.writeLock().lock();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      lock.writeLock().unlock();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return true;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (removedBlock != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.blockNumber.decrementAndGet();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return removedBlock;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (!cacheEnabled) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return false;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    if (bucketEntry == null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (removedBlock != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        return false;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      lock.writeLock().lock();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      int refCount = bucketEntry.refCount.get();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if(refCount == 0) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        } else {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      } else {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        if(!deletedBlock) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          if (LOG.isDebugEnabled()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.533"></a>
-<span class="sourceLineNo">534</span>                + " readers. Can not be freed now");<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          if (LOG.isDebugEnabled()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.539"></a>
-<span class="sourceLineNo">540</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.540"></a>
-<span class="sourceLineNo">541</span>                + " for evicting at a later point");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          bucketEntry.markedForEvict = true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } finally {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      lock.writeLock().unlock();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /*<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  private static class StatisticsThread extends Thread {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    private final BucketCache bucketCache;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      super("BucketCacheStatsThread");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      setDaemon(true);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      this.bucketCache = bucketCache;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    @Override<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public void run() {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bucketCache.logStats();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void logStats() {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    long freeSize = totalSize - usedSize;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    long cacheSize = getRealCacheSize();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    cacheStats.reset();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public long getRealCacheSize() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return this.realCacheSize.get();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private long acceptableSize() {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>  private long singleSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private long multiSize() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        * DEFAULT_MIN_FACTOR);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private long memorySize() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        * DEFAULT_MIN_FACTOR);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * ensure there must be some blocks evicted<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param why Why we are being called<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  private void freeSpace(final String why) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // Ensure only one freeSpace progress at a time<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    try {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      freeInProgress = true;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      long bytesToFreeWithoutExtra = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      // Calculate free byte for each bucketSizeinfo<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        bytesToFreeForBucket[i] = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          if (msgBuffer != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.644"></a>
-<span class="sourceLineNo">645</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (msgBuffer != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.650"></a>
+<span class="sourceLineNo">448</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return null;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @VisibleForTesting<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (decrementBlockNumber) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      this.blockNumber.decrementAndGet();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return evictBlock(cacheKey, true);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  // bucket map<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (!cacheEnabled) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    if (bucketEntry == null) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (removedBlock != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        return true;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        return false;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      lock.writeLock().lock();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      } else {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      lock.writeLock().unlock();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    return true;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (removedBlock != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      this.blockNumber.decrementAndGet();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return removedBlock;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (!cacheEnabled) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (bucketEntry == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      if (removedBlock != null) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        return true;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        return false;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      lock.writeLock().lock();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      int refCount = bucketEntry.refCount.get();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      if(refCount == 0) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        } else {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>          return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        }<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      } else {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if(!deletedBlock) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          if (LOG.isDebugEnabled()) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                + " readers. Can not be freed now");<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          }<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          return false;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.542"></a>
+<span class="sourceLineNo">543</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.543"></a>
+<span class="sourceLineNo">544</span>                + " for evicting at a later point");<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          bucketEntry.markedForEvict = true;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      lock.writeLock().unlock();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    return true;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /*<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private static class StatisticsThread extends Thread {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    private final BucketCache bucketCache;<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      super("BucketCacheStatsThread");<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      setDaemon(true);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      this.bucketCache = bucketCache;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    public void run() {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      bucketCache.logStats();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  public void logStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    long freeSize = totalSize - usedSize;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    long cacheSize = getRealCacheSize();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.581"></a>
+<span class="sourceLineNo">582</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.590"></a>
+<span class="sourceLineNo">591</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    cacheStats.reset();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  public long getRealCacheSize() {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return this.realCacheSize.get();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  private long acceptableSize() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>  private long singleSize() {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private long multiSize() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        * DEFAULT_MIN_FACTOR);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>  private long memorySize() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        * DEFAULT_MIN_FACTOR);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * ensure there must be some blocks evicted<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * @param why Why we are being called<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   */<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  private void freeSpace(final String why) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // Ensure only one freeSpace progress at a time<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      freeInProgress = true;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      long bytesToFreeWithoutExtra = 0;<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Calculate free byte for each bucketSizeinfo<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        bytesToFreeForBucket[i] = 0;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (msgBuffer != null) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.647"></a>
+<span class="sourceLineNo">648</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
 <span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        return;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.665"></a>
+<span class="sourceLineNo">652</span>      if (msgBuffer != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span><a name="line.655"></a>
+<span class="sourceLineNo">656</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      }<a name="line.665"></a>
 <span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // Instantiate priority buckets<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          blockSize, singleSize());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          blockSize, multiSize());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          blockSize, memorySize());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      // group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          case SINGLE: {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            break;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          case MULTI: {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            break;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          case MEMORY: {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            break;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>      bucketQueue.add(bucketSingle);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      bucketQueue.add(bucketMulti);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      bucketQueue.add(bucketMemory);<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>      int remainingBuckets = 3;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      long bytesFreed = 0;<a name="line.701"></a>
+<span class="sourceLineNo">667</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>      // Instantiate priority buckets<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          blockSize, singleSize());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          blockSize, multiSize());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.675"></a>
+<span class="sourceLineNo">676</span>          blockSize, memorySize());<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // group<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          case SINGLE: {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            break;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          case MULTI: {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>            break;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>          case MEMORY: {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>            break;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>      bucketQueue.add(bucketSingle);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      bucketQueue.add(bucketMulti);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      bucketQueue.add(bucketMemory);<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>      BucketEntryGroup bucketGroup;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        long overflow = bucketGroup.overflow();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        if (overflow &gt; 0) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.707"></a>
-<span class="sourceLineNo">708</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        remainingBuckets--;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.715"></a>
-<span class="sourceLineNo">716</span>       * free space<a name="line.716"></a>
-<span class="sourceLineNo">717</span>       */<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      boolean needFreeForExtra = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          needFreeForExtra = true;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (needFreeForExtra) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        bucketQueue.clear();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        remainingBuckets = 2;<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>        bucketQueue.add(bucketSingle);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        bucketQueue.add(bucketMulti);<a name="line.734"></a>
+<span class="sourceLineNo">703</span>      int remainingBuckets = 3;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      long bytesFreed = 0;<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>      BucketEntryGroup bucketGroup;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        long overflow = bucketGroup.overflow();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        if (overflow &gt; 0) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        remainingBuckets--;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>      /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.718"></a>
+<span class="sourceLineNo">719</span>       * free space<a name="line.719"></a>
+<span class="sourceLineNo">720</span>       */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      boolean needFreeForExtra = false;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          needFreeForExtra = true;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          break;<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (needFreeForExtra) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        bucketQueue.clear();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        remainingBuckets = 2;<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>        while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          long bucketBytesToFree = (bytesToFreeWithExtra - bytesFreed) / remainingBuckets;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          remainingBuckets--;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span>      if (LOG.isDebugEnabled()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        long single = bucketSingle.totalSize();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        long multi = bucketMulti.totalSize();<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        long memory = bucketMemory.totalSize();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isDebugEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.debug("Bucket cache free space completed; " + "freed="<a name="line.748"></a>
-<span class="sourceLineNo">749</span>            + StringUtils.byteDesc(bytesFreed) + ", " + "total="<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            + StringUtils.byteDesc(totalSize) + ", " + "single="<a name="line.750"></a>
-<span class="sourceLineNo">751</span>            + StringUtils.byteDesc(single) + ", " + "multi="<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            + StringUtils.byteDesc(multi) + ", " + "memory="<a name="line.752"></a>
-<span class="sourceLineNo">753</span>            + StringUtils.byteDesc(memory));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>    } catch (Throwable t) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      LOG.warn("Failed freeing space", t);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      cacheStats.evict();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      freeInProgress = false;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      freeSpaceLock.unlock();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  // This handles flushing the RAM cache to IOEngine.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  @VisibleForTesting<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  class WriterThread extends HasThread {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    private final BlockingQueue&lt;RAMQueueEntry&gt; inputQueue;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private volatile boolean writerEnabled = true;<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    WriterThread(BlockingQueue&lt;RAMQueueEntry&gt; queue) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      this.inputQueue = queue;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Used for test<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    @VisibleForTesting<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    void disableWriter() {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      this.writerEnabled = false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>    public void run() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      List&lt;RAMQueueEntry&gt; entries = new ArrayList&lt;RAMQueueEntry&gt;();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      try {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        while (cacheEnabled &amp;&amp; writerEnabled) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          try {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>            try {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>              // Blocks<a name="line.788"></a>
-<span class="sourceLineNo">789</span>              entries = getRAMQueueEntries(inputQueue, entries);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            } catch (InterruptedException ie) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>              if (!cacheEnabled) break;<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            doDrain(entries);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          } catch (Exception ioe) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            LOG.error("WriterThread encountered error", ioe);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a name="line.797"></a>

<TRUNCATED>

[10/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
index 03578e8..d0873aa 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
@@ -300,173 +300,183 @@
 <span class="sourceLineNo">292</span>                new SecureBulkLoadListener(fs, bulkToken, conf));<a name="line.292"></a>
 <span class="sourceLineNo">293</span>          } catch (Exception e) {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>            LOG.error("Failed to complete bulk load", e);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          return false;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        }<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      });<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (region.getCoprocessorHost() != null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        loaded = region.getCoprocessorHost().postBulkLoadHFile(familyPaths, loaded);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      } catch (IOException e) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        ResponseConverter.setControllerException(controller, e);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(false).build());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(loaded).build());<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private List&lt;BulkLoadObserver&gt; getBulkLoadObservers() {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    List&lt;BulkLoadObserver&gt; coprocessorList =<a name="line.313"></a>
-<span class="sourceLineNo">314</span>              this.env.getRegion().getCoprocessorHost().findCoprocessors(BulkLoadObserver.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return coprocessorList;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private Path createStagingDir(Path baseDir,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>                                User user,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>                                TableName tableName) throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return createStagingDir(baseDir, user, randomDir);<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 Path createStagingDir(Path baseDir,<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                                User user,<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                                String randomDir) throws IOException {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    Path p = new Path(baseDir, randomDir);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    return p;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private User getActiveUser() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    User user = RpcServer.getRequestUser();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (user == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return null;<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>    //this is for testing<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (userProvider.isHadoopSecurityEnabled()<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        &amp;&amp; "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return User.createUserForTesting(conf, user.getShortName(), new String[]{});<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return user;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  @Override<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  public Service getService() {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    return this;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    // Target filesystem<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    private FileSystem fs;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    private String stagingDir;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    private Configuration conf;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // Source filesystem<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private FileSystem srcFs = null;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      this.fs = fs;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      this.stagingDir = stagingDir;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      this.conf = conf;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      this.origPermissions = new HashMap&lt;String, FsPermission&gt;();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    @Override<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    public String prepareBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Path p = new Path(srcPath);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      if (p.equals(stageP)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        LOG.debug(p.getName()<a name="line.380"></a>
-<span class="sourceLineNo">381</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        return stageP.toString();<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>      if (srcFs == null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        srcFs = FileSystem.get(p.toUri(), conf);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>      if(!isFile(p)) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        throw new IOException("Path does not reference a file: " + p);<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>      // Check to see if the source and target filesystems are the same<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      } else {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        if(!fs.rename(p, stageP)) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return stageP.toString();<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 void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      LOG.debug("Bulk Load done for: " + srcPath);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        // files are copied so no need to move them back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        return;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      Path p = new Path(srcPath);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      Path stageP = new Path(stagingDir,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          new Path(Bytes.toString(family), p.getName()));<a name="line.423"></a>
+<span class="sourceLineNo">295</span>          } finally {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            if (fs != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              try {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>                if(!UserGroupInformation.getCurrentUser().equals(ugi)) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>                  FileSystem.closeAllForUGI(ugi);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>                }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>              } catch (IOException e) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>                LOG.error("Failed to close FileSystem for " + ugi.getUserName(), e);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>            }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          return false;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      });<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    if (region.getCoprocessorHost() != null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        loaded = region.getCoprocessorHost().postBulkLoadHFile(familyPaths, loaded);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      } catch (IOException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResponseConverter.setControllerException(controller, e);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(false).build());<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>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(loaded).build());<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>  private List&lt;BulkLoadObserver&gt; getBulkLoadObservers() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    List&lt;BulkLoadObserver&gt; coprocessorList =<a name="line.323"></a>
+<span class="sourceLineNo">324</span>              this.env.getRegion().getCoprocessorHost().findCoprocessors(BulkLoadObserver.class);<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    return coprocessorList;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private Path createStagingDir(Path baseDir,<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                                User user,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                                TableName tableName) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return createStagingDir(baseDir, user, randomDir);<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>  private Path createStagingDir(Path baseDir,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>                                User user,<a name="line.339"></a>
+<span class="sourceLineNo">340</span>                                String randomDir) throws IOException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    Path p = new Path(baseDir, randomDir);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return p;<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>  private User getActiveUser() {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    User user = RpcServer.getRequestUser();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    if (user == null) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      return null;<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>    //this is for testing<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (userProvider.isHadoopSecurityEnabled()<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        &amp;&amp; "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      return User.createUserForTesting(conf, user.getShortName(), new String[]{});<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return user;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public Service getService() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return this;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    // Target filesystem<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    private FileSystem fs;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    private String stagingDir;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    private Configuration conf;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    // Source filesystem<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    private FileSystem srcFs = null;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      this.fs = fs;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      this.stagingDir = stagingDir;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      this.conf = conf;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      this.origPermissions = new HashMap&lt;String, FsPermission&gt;();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    public String prepareBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      Path p = new Path(srcPath);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      if (p.equals(stageP)) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        LOG.debug(p.getName()<a name="line.390"></a>
+<span class="sourceLineNo">391</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        return stageP.toString();<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>      if (srcFs == null) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        srcFs = FileSystem.get(p.toUri(), conf);<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>      if(!isFile(p)) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        throw new IOException("Path does not reference a file: " + p);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>      // Check to see if the source and target filesystems are the same<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.405"></a>
+<span class="sourceLineNo">406</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } else {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if(!fs.rename(p, stageP)) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return stageP.toString();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      LOG.debug("Bulk Load done for: " + srcPath);<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>      // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      // prepare stage, so no need of rename here again<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      if (p.equals(stageP)) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.428"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        // files are copied so no need to move them back<a name="line.428"></a>
 <span class="sourceLineNo">429</span>        return;<a name="line.429"></a>
 <span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>      LOG.debug("Moving " + stageP + " back to " + p);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if(!fs.rename(stageP, p))<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // restore original permission<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      if (origPermissions.containsKey(srcPath)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        fs.setPermission(p, origPermissions.get(srcPath));<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      } else {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>     * Check if the path is referencing a file.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>     * This is mainly needed to avoid symlinks.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>     * @param p<a name="line.447"></a>
-<span class="sourceLineNo">448</span>     * @return true if the p is a file<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @throws IOException<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private boolean isFile(Path p) throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      boolean isFile = !status.isDirectory();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      try {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      } catch (Exception e) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      return isFile;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span>}<a name="line.461"></a>
+<span class="sourceLineNo">431</span>      Path p = new Path(srcPath);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Path stageP = new Path(stagingDir,<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          new Path(Bytes.toString(family), p.getName()));<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>      // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      // prepare stage, so no need of rename here again<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      if (p.equals(stageP)) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        return;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span>      LOG.debug("Moving " + stageP + " back to " + p);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      if(!fs.rename(stageP, p))<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // restore original permission<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      if (origPermissions.containsKey(srcPath)) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        fs.setPermission(p, origPermissions.get(srcPath));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      } else {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>    /**<a name="line.454"></a>
+<span class="sourceLineNo">455</span>     * Check if the path is referencing a file.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>     * This is mainly needed to avoid symlinks.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>     * @param p<a name="line.457"></a>
+<span class="sourceLineNo">458</span>     * @return true if the p is a file<a name="line.458"></a>
+<span class="sourceLineNo">459</span>     * @throws IOException<a name="line.459"></a>
+<span class="sourceLineNo">460</span>     */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    private boolean isFile(Path p) throws IOException {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      boolean isFile = !status.isDirectory();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      } catch (Exception e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return isFile;<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
index 03578e8..d0873aa 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
@@ -300,173 +300,183 @@
 <span class="sourceLineNo">292</span>                new SecureBulkLoadListener(fs, bulkToken, conf));<a name="line.292"></a>
 <span class="sourceLineNo">293</span>          } catch (Exception e) {<a name="line.293"></a>
 <span class="sourceLineNo">294</span>            LOG.error("Failed to complete bulk load", e);<a name="line.294"></a>
-<span class="sourceLineNo">295</span>          }<a name="line.295"></a>
-<span class="sourceLineNo">296</span>          return false;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        }<a name="line.297"></a>
-<span class="sourceLineNo">298</span>      });<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    }<a name="line.299"></a>
-<span class="sourceLineNo">300</span>    if (region.getCoprocessorHost() != null) {<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      try {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>        loaded = region.getCoprocessorHost().postBulkLoadHFile(familyPaths, loaded);<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      } catch (IOException e) {<a name="line.303"></a>
-<span class="sourceLineNo">304</span>        ResponseConverter.setControllerException(controller, e);<a name="line.304"></a>
-<span class="sourceLineNo">305</span>        done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(false).build());<a name="line.305"></a>
-<span class="sourceLineNo">306</span>        return;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      }<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>    done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(loaded).build());<a name="line.309"></a>
-<span class="sourceLineNo">310</span>  }<a name="line.310"></a>
-<span class="sourceLineNo">311</span><a name="line.311"></a>
-<span class="sourceLineNo">312</span>  private List&lt;BulkLoadObserver&gt; getBulkLoadObservers() {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    List&lt;BulkLoadObserver&gt; coprocessorList =<a name="line.313"></a>
-<span class="sourceLineNo">314</span>              this.env.getRegion().getCoprocessorHost().findCoprocessors(BulkLoadObserver.class);<a name="line.314"></a>
-<span class="sourceLineNo">315</span><a name="line.315"></a>
-<span class="sourceLineNo">316</span>    return coprocessorList;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>  }<a name="line.317"></a>
-<span class="sourceLineNo">318</span><a name="line.318"></a>
-<span class="sourceLineNo">319</span>  private Path createStagingDir(Path baseDir,<a name="line.319"></a>
-<span class="sourceLineNo">320</span>                                User user,<a name="line.320"></a>
-<span class="sourceLineNo">321</span>                                TableName tableName) throws IOException {<a name="line.321"></a>
-<span class="sourceLineNo">322</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.322"></a>
-<span class="sourceLineNo">323</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.324"></a>
-<span class="sourceLineNo">325</span>    return createStagingDir(baseDir, user, randomDir);<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 Path createStagingDir(Path baseDir,<a name="line.328"></a>
-<span class="sourceLineNo">329</span>                                User user,<a name="line.329"></a>
-<span class="sourceLineNo">330</span>                                String randomDir) throws IOException {<a name="line.330"></a>
-<span class="sourceLineNo">331</span>    Path p = new Path(baseDir, randomDir);<a name="line.331"></a>
-<span class="sourceLineNo">332</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.332"></a>
-<span class="sourceLineNo">333</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    return p;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  }<a name="line.335"></a>
-<span class="sourceLineNo">336</span><a name="line.336"></a>
-<span class="sourceLineNo">337</span>  private User getActiveUser() {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>    User user = RpcServer.getRequestUser();<a name="line.338"></a>
-<span class="sourceLineNo">339</span>    if (user == null) {<a name="line.339"></a>
-<span class="sourceLineNo">340</span>      return null;<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>    //this is for testing<a name="line.343"></a>
-<span class="sourceLineNo">344</span>    if (userProvider.isHadoopSecurityEnabled()<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        &amp;&amp; "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.345"></a>
-<span class="sourceLineNo">346</span>      return User.createUserForTesting(conf, user.getShortName(), new String[]{});<a name="line.346"></a>
-<span class="sourceLineNo">347</span>    }<a name="line.347"></a>
-<span class="sourceLineNo">348</span><a name="line.348"></a>
-<span class="sourceLineNo">349</span>    return user;<a name="line.349"></a>
-<span class="sourceLineNo">350</span>  }<a name="line.350"></a>
-<span class="sourceLineNo">351</span><a name="line.351"></a>
-<span class="sourceLineNo">352</span>  @Override<a name="line.352"></a>
-<span class="sourceLineNo">353</span>  public Service getService() {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>    return this;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>  }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    // Target filesystem<a name="line.358"></a>
-<span class="sourceLineNo">359</span>    private FileSystem fs;<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    private String stagingDir;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    private Configuration conf;<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    // Source filesystem<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    private FileSystem srcFs = null;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.364"></a>
-<span class="sourceLineNo">365</span><a name="line.365"></a>
-<span class="sourceLineNo">366</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.366"></a>
-<span class="sourceLineNo">367</span>      this.fs = fs;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      this.stagingDir = stagingDir;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      this.conf = conf;<a name="line.369"></a>
-<span class="sourceLineNo">370</span>      this.origPermissions = new HashMap&lt;String, FsPermission&gt;();<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    }<a name="line.371"></a>
-<span class="sourceLineNo">372</span><a name="line.372"></a>
-<span class="sourceLineNo">373</span>    @Override<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    public String prepareBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      Path p = new Path(srcPath);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.376"></a>
-<span class="sourceLineNo">377</span><a name="line.377"></a>
-<span class="sourceLineNo">378</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      if (p.equals(stageP)) {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>        LOG.debug(p.getName()<a name="line.380"></a>
-<span class="sourceLineNo">381</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.381"></a>
-<span class="sourceLineNo">382</span>        return stageP.toString();<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>      if (srcFs == null) {<a name="line.385"></a>
-<span class="sourceLineNo">386</span>        srcFs = FileSystem.get(p.toUri(), conf);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>      }<a name="line.387"></a>
-<span class="sourceLineNo">388</span><a name="line.388"></a>
-<span class="sourceLineNo">389</span>      if(!isFile(p)) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>        throw new IOException("Path does not reference a file: " + p);<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>      // Check to see if the source and target filesystems are the same<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.395"></a>
-<span class="sourceLineNo">396</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      } else {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.400"></a>
-<span class="sourceLineNo">401</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        if(!fs.rename(p, stageP)) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        }<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return stageP.toString();<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 void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      LOG.debug("Bulk Load done for: " + srcPath);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>    }<a name="line.413"></a>
-<span class="sourceLineNo">414</span><a name="line.414"></a>
-<span class="sourceLineNo">415</span>    @Override<a name="line.415"></a>
-<span class="sourceLineNo">416</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.416"></a>
-<span class="sourceLineNo">417</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        // files are copied so no need to move them back<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        return;<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      }<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      Path p = new Path(srcPath);<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      Path stageP = new Path(stagingDir,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>          new Path(Bytes.toString(family), p.getName()));<a name="line.423"></a>
+<span class="sourceLineNo">295</span>          } finally {<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            if (fs != null) {<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              try {<a name="line.297"></a>
+<span class="sourceLineNo">298</span>                if(!UserGroupInformation.getCurrentUser().equals(ugi)) {<a name="line.298"></a>
+<span class="sourceLineNo">299</span>                  FileSystem.closeAllForUGI(ugi);<a name="line.299"></a>
+<span class="sourceLineNo">300</span>                }<a name="line.300"></a>
+<span class="sourceLineNo">301</span>              } catch (IOException e) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>                LOG.error("Failed to close FileSystem for " + ugi.getUserName(), e);<a name="line.302"></a>
+<span class="sourceLineNo">303</span>              }<a name="line.303"></a>
+<span class="sourceLineNo">304</span>            }<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          }<a name="line.305"></a>
+<span class="sourceLineNo">306</span>          return false;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>        }<a name="line.307"></a>
+<span class="sourceLineNo">308</span>      });<a name="line.308"></a>
+<span class="sourceLineNo">309</span>    }<a name="line.309"></a>
+<span class="sourceLineNo">310</span>    if (region.getCoprocessorHost() != null) {<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      try {<a name="line.311"></a>
+<span class="sourceLineNo">312</span>        loaded = region.getCoprocessorHost().postBulkLoadHFile(familyPaths, loaded);<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      } catch (IOException e) {<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        ResponseConverter.setControllerException(controller, e);<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(false).build());<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>    }<a name="line.318"></a>
+<span class="sourceLineNo">319</span>    done.run(SecureBulkLoadHFilesResponse.newBuilder().setLoaded(loaded).build());<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>  private List&lt;BulkLoadObserver&gt; getBulkLoadObservers() {<a name="line.322"></a>
+<span class="sourceLineNo">323</span>    List&lt;BulkLoadObserver&gt; coprocessorList =<a name="line.323"></a>
+<span class="sourceLineNo">324</span>              this.env.getRegion().getCoprocessorHost().findCoprocessors(BulkLoadObserver.class);<a name="line.324"></a>
+<span class="sourceLineNo">325</span><a name="line.325"></a>
+<span class="sourceLineNo">326</span>    return coprocessorList;<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  }<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  private Path createStagingDir(Path baseDir,<a name="line.329"></a>
+<span class="sourceLineNo">330</span>                                User user,<a name="line.330"></a>
+<span class="sourceLineNo">331</span>                                TableName tableName) throws IOException {<a name="line.331"></a>
+<span class="sourceLineNo">332</span>    String tblName = tableName.getNameAsString().replace(":", "_");<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    String randomDir = user.getShortName()+"__"+ tblName +"__"+<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        (new BigInteger(RANDOM_WIDTH, random).toString(RANDOM_RADIX));<a name="line.334"></a>
+<span class="sourceLineNo">335</span>    return createStagingDir(baseDir, user, randomDir);<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>  private Path createStagingDir(Path baseDir,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>                                User user,<a name="line.339"></a>
+<span class="sourceLineNo">340</span>                                String randomDir) throws IOException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    Path p = new Path(baseDir, randomDir);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    fs.mkdirs(p, PERM_ALL_ACCESS);<a name="line.342"></a>
+<span class="sourceLineNo">343</span>    fs.setPermission(p, PERM_ALL_ACCESS);<a name="line.343"></a>
+<span class="sourceLineNo">344</span>    return p;<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>  private User getActiveUser() {<a name="line.347"></a>
+<span class="sourceLineNo">348</span>    User user = RpcServer.getRequestUser();<a name="line.348"></a>
+<span class="sourceLineNo">349</span>    if (user == null) {<a name="line.349"></a>
+<span class="sourceLineNo">350</span>      return null;<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>    //this is for testing<a name="line.353"></a>
+<span class="sourceLineNo">354</span>    if (userProvider.isHadoopSecurityEnabled()<a name="line.354"></a>
+<span class="sourceLineNo">355</span>        &amp;&amp; "simple".equalsIgnoreCase(conf.get(User.HBASE_SECURITY_CONF_KEY))) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>      return User.createUserForTesting(conf, user.getShortName(), new String[]{});<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>    return user;<a name="line.359"></a>
+<span class="sourceLineNo">360</span>  }<a name="line.360"></a>
+<span class="sourceLineNo">361</span><a name="line.361"></a>
+<span class="sourceLineNo">362</span>  @Override<a name="line.362"></a>
+<span class="sourceLineNo">363</span>  public Service getService() {<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return this;<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  private static class SecureBulkLoadListener implements BulkLoadListener {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    // Target filesystem<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    private FileSystem fs;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    private String stagingDir;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    private Configuration conf;<a name="line.371"></a>
+<span class="sourceLineNo">372</span>    // Source filesystem<a name="line.372"></a>
+<span class="sourceLineNo">373</span>    private FileSystem srcFs = null;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    private Map&lt;String, FsPermission&gt; origPermissions = null;<a name="line.374"></a>
+<span class="sourceLineNo">375</span><a name="line.375"></a>
+<span class="sourceLineNo">376</span>    public SecureBulkLoadListener(FileSystem fs, String stagingDir, Configuration conf) {<a name="line.376"></a>
+<span class="sourceLineNo">377</span>      this.fs = fs;<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      this.stagingDir = stagingDir;<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      this.conf = conf;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>      this.origPermissions = new HashMap&lt;String, FsPermission&gt;();<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">382</span><a name="line.382"></a>
+<span class="sourceLineNo">383</span>    @Override<a name="line.383"></a>
+<span class="sourceLineNo">384</span>    public String prepareBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      Path p = new Path(srcPath);<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      Path stageP = new Path(stagingDir, new Path(Bytes.toString(family), p.getName()));<a name="line.386"></a>
+<span class="sourceLineNo">387</span><a name="line.387"></a>
+<span class="sourceLineNo">388</span>      // In case of Replication for bulk load files, hfiles are already copied in staging directory<a name="line.388"></a>
+<span class="sourceLineNo">389</span>      if (p.equals(stageP)) {<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        LOG.debug(p.getName()<a name="line.390"></a>
+<span class="sourceLineNo">391</span>            + " is already available in staging directory. Skipping copy or rename.");<a name="line.391"></a>
+<span class="sourceLineNo">392</span>        return stageP.toString();<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>      if (srcFs == null) {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>        srcFs = FileSystem.get(p.toUri(), conf);<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>      if(!isFile(p)) {<a name="line.399"></a>
+<span class="sourceLineNo">400</span>        throw new IOException("Path does not reference a file: " + p);<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      }<a name="line.401"></a>
+<span class="sourceLineNo">402</span><a name="line.402"></a>
+<span class="sourceLineNo">403</span>      // Check to see if the source and target filesystems are the same<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.404"></a>
+<span class="sourceLineNo">405</span>        LOG.debug("Bulk-load file " + srcPath + " is on different filesystem than " +<a name="line.405"></a>
+<span class="sourceLineNo">406</span>            "the destination filesystem. Copying file over to destination staging dir.");<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        FileUtil.copy(srcFs, p, fs, stageP, false, conf);<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      } else {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        LOG.debug("Moving " + p + " to " + stageP);<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        FileStatus origFileStatus = fs.getFileStatus(p);<a name="line.410"></a>
+<span class="sourceLineNo">411</span>        origPermissions.put(srcPath, origFileStatus.getPermission());<a name="line.411"></a>
+<span class="sourceLineNo">412</span>        if(!fs.rename(p, stageP)) {<a name="line.412"></a>
+<span class="sourceLineNo">413</span>          throw new IOException("Failed to move HFile: " + p + " to " + stageP);<a name="line.413"></a>
+<span class="sourceLineNo">414</span>        }<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      }<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      fs.setPermission(stageP, PERM_ALL_ACCESS);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      return stageP.toString();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    @Override<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    public void doneBulkLoad(byte[] family, String srcPath) throws IOException {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      LOG.debug("Bulk Load done for: " + srcPath);<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>      // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.425"></a>
-<span class="sourceLineNo">426</span>      // prepare stage, so no need of rename here again<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      if (p.equals(stageP)) {<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.428"></a>
+<span class="sourceLineNo">425</span>    @Override<a name="line.425"></a>
+<span class="sourceLineNo">426</span>    public void failedBulkLoad(final byte[] family, final String srcPath) throws IOException {<a name="line.426"></a>
+<span class="sourceLineNo">427</span>      if (!FSHDFSUtils.isSameHdfs(conf, srcFs, fs)) {<a name="line.427"></a>
+<span class="sourceLineNo">428</span>        // files are copied so no need to move them back<a name="line.428"></a>
 <span class="sourceLineNo">429</span>        return;<a name="line.429"></a>
 <span class="sourceLineNo">430</span>      }<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>      LOG.debug("Moving " + stageP + " back to " + p);<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      if(!fs.rename(stageP, p))<a name="line.433"></a>
-<span class="sourceLineNo">434</span>        throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.434"></a>
-<span class="sourceLineNo">435</span><a name="line.435"></a>
-<span class="sourceLineNo">436</span>      // restore original permission<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      if (origPermissions.containsKey(srcPath)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>        fs.setPermission(p, origPermissions.get(srcPath));<a name="line.438"></a>
-<span class="sourceLineNo">439</span>      } else {<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      }<a name="line.441"></a>
-<span class="sourceLineNo">442</span>    }<a name="line.442"></a>
-<span class="sourceLineNo">443</span><a name="line.443"></a>
-<span class="sourceLineNo">444</span>    /**<a name="line.444"></a>
-<span class="sourceLineNo">445</span>     * Check if the path is referencing a file.<a name="line.445"></a>
-<span class="sourceLineNo">446</span>     * This is mainly needed to avoid symlinks.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>     * @param p<a name="line.447"></a>
-<span class="sourceLineNo">448</span>     * @return true if the p is a file<a name="line.448"></a>
-<span class="sourceLineNo">449</span>     * @throws IOException<a name="line.449"></a>
-<span class="sourceLineNo">450</span>     */<a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private boolean isFile(Path p) throws IOException {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      boolean isFile = !status.isDirectory();<a name="line.453"></a>
-<span class="sourceLineNo">454</span>      try {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>      } catch (Exception e) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      }<a name="line.457"></a>
-<span class="sourceLineNo">458</span>      return isFile;<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    }<a name="line.459"></a>
-<span class="sourceLineNo">460</span>  }<a name="line.460"></a>
-<span class="sourceLineNo">461</span>}<a name="line.461"></a>
+<span class="sourceLineNo">431</span>      Path p = new Path(srcPath);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>      Path stageP = new Path(stagingDir,<a name="line.432"></a>
+<span class="sourceLineNo">433</span>          new Path(Bytes.toString(family), p.getName()));<a name="line.433"></a>
+<span class="sourceLineNo">434</span><a name="line.434"></a>
+<span class="sourceLineNo">435</span>      // In case of Replication for bulk load files, hfiles are not renamed by end point during<a name="line.435"></a>
+<span class="sourceLineNo">436</span>      // prepare stage, so no need of rename here again<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      if (p.equals(stageP)) {<a name="line.437"></a>
+<span class="sourceLineNo">438</span>        LOG.debug(p.getName() + " is already available in source directory. Skipping rename.");<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        return;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>      }<a name="line.440"></a>
+<span class="sourceLineNo">441</span><a name="line.441"></a>
+<span class="sourceLineNo">442</span>      LOG.debug("Moving " + stageP + " back to " + p);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>      if(!fs.rename(stageP, p))<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        throw new IOException("Failed to move HFile: " + stageP + " to " + p);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>      // restore original permission<a name="line.446"></a>
+<span class="sourceLineNo">447</span>      if (origPermissions.containsKey(srcPath)) {<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        fs.setPermission(p, origPermissions.get(srcPath));<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      } else {<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        LOG.warn("Can't find previous permission for path=" + srcPath);<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      }<a name="line.451"></a>
+<span class="sourceLineNo">452</span>    }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>    /**<a name="line.454"></a>
+<span class="sourceLineNo">455</span>     * Check if the path is referencing a file.<a name="line.455"></a>
+<span class="sourceLineNo">456</span>     * This is mainly needed to avoid symlinks.<a name="line.456"></a>
+<span class="sourceLineNo">457</span>     * @param p<a name="line.457"></a>
+<span class="sourceLineNo">458</span>     * @return true if the p is a file<a name="line.458"></a>
+<span class="sourceLineNo">459</span>     * @throws IOException<a name="line.459"></a>
+<span class="sourceLineNo">460</span>     */<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    private boolean isFile(Path p) throws IOException {<a name="line.461"></a>
+<span class="sourceLineNo">462</span>      FileStatus status = srcFs.getFileStatus(p);<a name="line.462"></a>
+<span class="sourceLineNo">463</span>      boolean isFile = !status.isDirectory();<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      try {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        isFile = isFile &amp;&amp; !(Boolean)Methods.call(FileStatus.class, status, "isSymlink", null, null);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      } catch (Exception e) {<a name="line.466"></a>
+<span class="sourceLineNo">467</span>      }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return isFile;<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>
 
 
 


[13/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
index 3a9a7f7..d857fe6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
@@ -311,1174 +311,1177 @@
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  private IOEngine getIOEngineFromName(String ioEngineName, long capacity)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:"))<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:")) {<a name="line.306"></a>
 <span class="sourceLineNo">307</span>      return new FileIOEngine(ioEngineName.substring(5), capacity);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    else if (ioEngineName.startsWith("offheap"))<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    } else if (ioEngineName.startsWith("offheap")) {<a name="line.308"></a>
 <span class="sourceLineNo">309</span>      return new ByteBufferIOEngine(capacity, true);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    else if (ioEngineName.startsWith("heap"))<a name="line.310"></a>
+<span class="sourceLineNo">310</span>    } else if (ioEngineName.startsWith("heap")) {<a name="line.310"></a>
 <span class="sourceLineNo">311</span>      return new ByteBufferIOEngine(capacity, false);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    else<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw new IllegalArgumentException(<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * Cache the block with the specified name and buffer.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param cacheKey block's cache key<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param buf block buffer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    cacheBlock(cacheKey, buf, false, false);<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>   * Cache the block with the specified name and buffer.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @param cacheKey block's cache key<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param cachedItem block buffer<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @param inMemory if block is in-memory<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param cacheDataInL1<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final boolean cacheDataInL1) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Cache the block to ramCache<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param cacheKey block's cache key<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param cachedItem block buffer<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param inMemory if block is in-memory<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param wait if true, blocking wait when queue is full<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      boolean wait) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (!cacheEnabled) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>    /*<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    RAMQueueEntry re =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    boolean successfulAddition = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (wait) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } catch (InterruptedException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Thread.currentThread().interrupt();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      successfulAddition = bq.offer(re);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (!successfulAddition) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ramCache.remove(cacheKey);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      cacheStats.failInsert();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    } else {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.blockNumber.incrementAndGet();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Get the buffer of the block with the specified key.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param key block's cache key<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @return buffer of specified cache key, or null if not in cache<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 Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      boolean updateCacheMetrics) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (!cacheEnabled) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (re != null) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (updateCacheMetrics) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      re.access(accessCount.incrementAndGet());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return re.getData();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (bucketEntry != null) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      long start = System.nanoTime();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        lock.readLock().lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        // existence here.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          // TODO : change this area - should be removed after server cells and<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // 12295 are available<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int len = bucketEntry.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          long timeTaken = System.nanoTime() - start;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (updateCacheMetrics) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            cacheStats.ioHit(timeTaken);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            bucketEntry.refCount.incrementAndGet();<a name="line.430"></a>
+<span class="sourceLineNo">312</span>    } else if (ioEngineName.startsWith("mmap:")) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FileMmapEngine(ioEngineName.substring(5), capacity);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Cache the block with the specified name and buffer.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param cacheKey block's cache key<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param buf block buffer<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    cacheBlock(cacheKey, buf, false, false);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * Cache the block with the specified name and buffer.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param cacheKey block's cache key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param cachedItem block buffer<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param inMemory if block is in-memory<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param cacheDataInL1<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final boolean cacheDataInL1) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<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>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Cache the block to ramCache<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cacheKey block's cache key<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param cachedItem block buffer<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param inMemory if block is in-memory<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param wait if true, blocking wait when queue is full<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      boolean wait) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    if (!cacheEnabled) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    /*<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    RAMQueueEntry re =<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    boolean successfulAddition = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (wait) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      } catch (InterruptedException e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        Thread.currentThread().interrupt();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      successfulAddition = bq.offer(re);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    if (!successfulAddition) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ramCache.remove(cacheKey);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      cacheStats.failInsert();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } else {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.blockNumber.incrementAndGet();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Get the buffer of the block with the specified key.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param key block's cache key<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return buffer of specified cache key, or null if not in cache<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      boolean updateCacheMetrics) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (!cacheEnabled) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (re != null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (updateCacheMetrics) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      re.access(accessCount.incrementAndGet());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return re.getData();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (bucketEntry != null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      long start = System.nanoTime();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        lock.readLock().lock();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // existence here.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          // TODO : change this area - should be removed after server cells and<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          // 12295 are available<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          int len = bucketEntry.getLength();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          long timeTaken = System.nanoTime() - start;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          if (updateCacheMetrics) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            cacheStats.ioHit(timeTaken);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>          }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            ioErrorStartTime = -1;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          return cachedBlock;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } catch (IOException ioex) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        checkIOErrorIsTolerated();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      } finally {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        lock.readLock().unlock();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.446"></a>
+<span class="sourceLineNo">432</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>            bucketEntry.refCount.incrementAndGet();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            ioErrorStartTime = -1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          return cachedBlock;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      } catch (IOException ioex) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        checkIOErrorIsTolerated();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      } finally {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        lock.readLock().unlock();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return null;<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>  @VisibleForTesting<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (decrementBlockNumber) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      this.blockNumber.decrementAndGet();<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return evictBlock(cacheKey, true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // bucket map<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!cacheEnabled) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return false;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (bucketEntry == null) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (removedBlock != null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        return true;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      } else {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        return false;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      lock.writeLock().lock();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      lock.writeLock().unlock();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return true;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (removedBlock != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.blockNumber.decrementAndGet();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return removedBlock;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (!cacheEnabled) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return false;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    if (bucketEntry == null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (removedBlock != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        return false;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      lock.writeLock().lock();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      int refCount = bucketEntry.refCount.get();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if(refCount == 0) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        } else {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      } else {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        if(!deletedBlock) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          if (LOG.isDebugEnabled()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.533"></a>
-<span class="sourceLineNo">534</span>                + " readers. Can not be freed now");<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          if (LOG.isDebugEnabled()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.539"></a>
-<span class="sourceLineNo">540</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.540"></a>
-<span class="sourceLineNo">541</span>                + " for evicting at a later point");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          bucketEntry.markedForEvict = true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } finally {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      lock.writeLock().unlock();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /*<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  private static class StatisticsThread extends Thread {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    private final BucketCache bucketCache;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      super("BucketCacheStatsThread");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      setDaemon(true);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      this.bucketCache = bucketCache;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    @Override<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public void run() {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bucketCache.logStats();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void logStats() {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    long freeSize = totalSize - usedSize;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    long cacheSize = getRealCacheSize();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    cacheStats.reset();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public long getRealCacheSize() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return this.realCacheSize.get();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private long acceptableSize() {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>  private long singleSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private long multiSize() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        * DEFAULT_MIN_FACTOR);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private long memorySize() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        * DEFAULT_MIN_FACTOR);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * ensure there must be some blocks evicted<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param why Why we are being called<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  private void freeSpace(final String why) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // Ensure only one freeSpace progress at a time<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    try {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      freeInProgress = true;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      long bytesToFreeWithoutExtra = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      // Calculate free byte for each bucketSizeinfo<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        bytesToFreeForBucket[i] = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          if (msgBuffer != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.644"></a>
-<span class="sourceLineNo">645</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (msgBuffer != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.650"></a>
+<span class="sourceLineNo">448</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return null;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @VisibleForTesting<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (decrementBlockNumber) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      this.blockNumber.decrementAndGet();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return evictBlock(cacheKey, true);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  // bucket map<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (!cacheEnabled) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    if (bucketEntry == null) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (removedBlock != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        return true;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        return false;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      lock.writeLock().lock();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      } else {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      lock.writeLock().unlock();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    return true;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (removedBlock != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      this.blockNumber.decrementAndGet();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return removedBlock;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (!cacheEnabled) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (bucketEntry == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      if (removedBlock != null) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        return true;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        return false;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      lock.writeLock().lock();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      int refCount = bucketEntry.refCount.get();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      if(refCount == 0) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        } else {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>          return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        }<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      } else {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if(!deletedBlock) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          if (LOG.isDebugEnabled()) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                + " readers. Can not be freed now");<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          }<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          return false;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.542"></a>
+<span class="sourceLineNo">543</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.543"></a>
+<span class="sourceLineNo">544</span>                + " for evicting at a later point");<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          bucketEntry.markedForEvict = true;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      lock.writeLock().unlock();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    return true;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /*<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private static class StatisticsThread extends Thread {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    private final BucketCache bucketCache;<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      super("BucketCacheStatsThread");<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      setDaemon(true);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      this.bucketCache = bucketCache;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    public void run() {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      bucketCache.logStats();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  public void logStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    long freeSize = totalSize - usedSize;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    long cacheSize = getRealCacheSize();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.581"></a>
+<span class="sourceLineNo">582</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.590"></a>
+<span class="sourceLineNo">591</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    cacheStats.reset();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  public long getRealCacheSize() {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return this.realCacheSize.get();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  private long acceptableSize() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>  private long singleSize() {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private long multiSize() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        * DEFAULT_MIN_FACTOR);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>  private long memorySize() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        * DEFAULT_MIN_FACTOR);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * ensure there must be some blocks evicted<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * @param why Why we are being called<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   */<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  private void freeSpace(final String why) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // Ensure only one freeSpace progress at a time<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      freeInProgress = true;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      long bytesToFreeWithoutExtra = 0;<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Calculate free byte for each bucketSizeinfo<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        bytesToFreeForBucket[i] = 0;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (msgBuffer != null) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.647"></a>
+<span class="sourceLineNo">648</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
 <span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        return;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.665"></a>
+<span class="sourceLineNo">652</span>      if (msgBuffer != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span><a name="line.655"></a>
+<span class="sourceLineNo">656</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      }<a name="line.665"></a>
 <span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // Instantiate priority buckets<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          blockSize, singleSize());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          blockSize, multiSize());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          blockSize, memorySize());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      // group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          case SINGLE: {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            break;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          case MULTI: {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            break;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          case MEMORY: {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            break;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>      bucketQueue.add(bucketSingle);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      bucketQueue.add(bucketMulti);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      bucketQueue.add(bucketMemory);<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>      int remainingBuckets = 3;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      long bytesFreed = 0;<a name="line.701"></a>
+<span class="sourceLineNo">667</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>      // Instantiate priority buckets<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          blockSize, singleSize());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          blockSize, multiSize());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.675"></a>
+<span class="sourceLineNo">676</span>          blockSize, memorySize());<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // group<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          case SINGLE: {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            break;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          case MULTI: {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>            break;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>          case MEMORY: {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>            break;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>      bucketQueue.add(bucketSingle);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      bucketQueue.add(bucketMulti);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      bucketQueue.add(bucketMemory);<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>      BucketEntryGroup bucketGroup;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        long overflow = bucketGroup.overflow();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        if (overflow &gt; 0) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.707"></a>
-<span class="sourceLineNo">708</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        remainingBuckets--;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.715"></a>
-<span class="sourceLineNo">716</span>       * free space<a name="line.716"></a>
-<span class="sourceLineNo">717</span>       */<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      boolean needFreeForExtra = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          needFreeForExtra = true;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (needFreeForExtra) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        bucketQueue.clear();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        remainingBuckets = 2;<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>        bucketQueue.add(bucketSingle);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        bucketQueue.add(bucketMulti);<a name="line.734"></a>
+<span class="sourceLineNo">703</span>      int remainingBuckets = 3;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      long bytesFreed = 0;<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>      BucketEntryGroup bucketGroup;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        long overflow = bucketGroup.overflow();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        if (overflow &gt; 0) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        remainingBuckets--;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>      /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.718"></a>
+<span class="sourceLineNo">719</span>       * free space<a name="line.719"></a>
+<span class="sourceLineNo">720</span>       */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      boolean needFreeForExtra = false;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          needFreeForExtra = true;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          break;<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (needFreeForExtra) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        bucketQueue.clear();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        remainingBuckets = 2;<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>        while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          long bucketBytesToFree = (bytesToFreeWithExtra - bytesFreed) / remainingBuckets;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          remainingBuckets--;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span>      if (LOG.isDebugEnabled()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        long single = bucketSingle.totalSize();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        long multi = bucketMulti.totalSize();<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        long memory = bucketMemory.totalSize();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isDebugEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.debug("Bucket cache free space completed; " + "freed="<a name="line.748"></a>
-<span class="sourceLineNo">749</span>            + StringUtils.byteDesc(bytesFreed) + ", " + "total="<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            + StringUtils.byteDesc(totalSize) + ", " + "single="<a name="line.750"></a>
-<span class="sourceLineNo">751</span>            + StringUtils.byteDesc(single) + ", " + "multi="<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            + StringUtils.byteDesc(multi) + ", " + "memory="<a name="line.752"></a>
-<span class="sourceLineNo">753</span>            + StringUtils.byteDesc(memory));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>    } catch (Throwable t) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      LOG.warn("Failed freeing space", t);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      cacheStats.evict();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      freeInProgress = false;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      freeSpaceLock.unlock();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  // This handles flushing the RAM cache to IOEngine.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  @VisibleForTesting<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  class WriterThread extends HasThread {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    private final BlockingQueue&lt;RAMQueueEntry&gt; inputQueue;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private volatile boolean writerEnabled = true;<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    WriterThread(BlockingQueue&lt;RAMQueueEntry&gt; queue) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      this.inputQueue = queue;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Used for test<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    @VisibleForTesting<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    void disableWriter() {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      this.writerEnabled = false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>    public void run() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      List&lt;RAMQueueEntry&gt; entries = new ArrayList&lt;RAMQueueEntry&gt;();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      try {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        while (cacheEnabled &amp;&amp; writerEnabled) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          try {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>            try {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>              // Blocks<a name="line.788"></a>
-<span class="sourceLineNo">789</span>              entries = getRAMQueueEntries(inputQueue, entries);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            } catch (InterruptedException ie) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>              if (!cacheEnabled) break;<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            doDrain(entries);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          } catch (Exception ioe) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            LOG.error("WriterThread encountered error", ioe);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>      } catch (Throwable t

<TRUNCATED>

[07/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
index 6cff868..2a832cb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
@@ -26,258 +26,262 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.util;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.nio.ByteBuffer;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.concurrent.locks.Lock;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.commons.logging.Log;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.LogFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.nio.MultiByteBuff;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.util.StringUtils;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * This class manages an array of ByteBuffers with a default size 4MB. These<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * buffers are sequential and could be considered as a large buffer.It supports<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * reading/writing data from this large buffer with a position and offset<a name="line.36"></a>
-<span class="sourceLineNo">037</span> */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>@InterfaceAudience.Private<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public final class ByteBufferArray {<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private ByteBuffer buffers[];<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private Lock locks[];<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private int bufferSize;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private int bufferCount;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  /**<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * we will allocate one additional buffer with capacity 0;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * @param capacity total size of the byte buffer array<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  public ByteBufferArray(long capacity, boolean directByteBuffer) {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.60"></a>
-<span class="sourceLineNo">061</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.61"></a>
-<span class="sourceLineNo">062</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    locks = new Lock[bufferCount + 1];<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    for (int i = 0; i &lt;= bufferCount; i++) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      locks[i] = new ReentrantLock();<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      if (i &lt; bufferCount) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>        buffers[i] = directByteBuffer ? ByteBuffer.allocateDirect(bufferSize)<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            : ByteBuffer.allocate(bufferSize);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      } else {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>        buffers[i] = ByteBuffer.allocate(0);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private long roundUp(long n, long to) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    return ((n + to - 1) / to) * to;<a name="line.78"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.nio.ByteBuffer;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.locks.Lock;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.nio.MultiByteBuff;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.util.StringUtils;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * This class manages an array of ByteBuffers with a default size 4MB. These<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * buffers are sequential and could be considered as a large buffer.It supports<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * reading/writing data from this large buffer with a position and offset<a name="line.37"></a>
+<span class="sourceLineNo">038</span> */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
+<span class="sourceLineNo">040</span>public final class ByteBufferArray {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  public static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private ByteBuffer buffers[];<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private Lock locks[];<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private int bufferSize;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private int bufferCount;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private ByteBufferAllocator allocator;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * we will allocate one additional buffer with capacity 0;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * @param capacity total size of the byte buffer array<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      throws IOException {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.65"></a>
+<span class="sourceLineNo">066</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    locks = new Lock[bufferCount + 1];<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.allocator = allocator;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    for (int i = 0; i &lt;= bufferCount; i++) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      locks[i] = new ReentrantLock();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      if (i &lt; bufferCount) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        buffers[i] = allocator.allocate(bufferSize, directByteBuffer);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      } else {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        // always create on heap<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        buffers[i] = ByteBuffer.allocate(0);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
 <span class="sourceLineNo">079</span>  }<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  /**<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param start start position in the ByteBufferArray<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param dstArray The array into which bytes are to be written<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @return number of bytes read<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    return getMultiple(start, len, dstArray, 0);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param start start offset of this buffer array<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param dstArray The array into which bytes are to be written<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   *          written<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @return number of bytes read<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    return len;<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>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      bb.get(array, arrayIdx, len);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  };<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Transfers bytes from the given source array into this buffer array<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param start start offset of this buffer array<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param srcArray The array from which bytes are to be read<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    putMultiple(start, len, srcArray, 0);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Transfers bytes from the given source array into this buffer array<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param start start offset of this buffer array<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param srcArray The array from which bytes are to be read<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   *          read<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      bb.put(array, arrayIdx, len);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  };<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private interface Visitor {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.144"></a>
-<span class="sourceLineNo">145</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.145"></a>
-<span class="sourceLineNo">146</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.146"></a>
-<span class="sourceLineNo">147</span>     * @param bb byte buffer<a name="line.147"></a>
-<span class="sourceLineNo">148</span>     * @param array a source or destination byte array<a name="line.148"></a>
-<span class="sourceLineNo">149</span>     * @param arrayOffset offset of the byte array<a name="line.149"></a>
-<span class="sourceLineNo">150</span>     * @param len read/write length<a name="line.150"></a>
-<span class="sourceLineNo">151</span>     */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    void visit(ByteBuffer bb, byte[] array, int arrayOffset, int len);<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>   * Access(read or write) this buffer array with a position and length as the<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param start start offset of this buffer array<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param len The maximum number of bytes to be accessed<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param array The array from/to which bytes are to be read/written<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   *          be read or written<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @param visitor implement of how to visit the byte buffer<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    assert len &gt;= 0;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    long end = start + len;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    assert array.length &gt;= len + arrayOffset;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      LOG.error(msg);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      throw new RuntimeException(msg);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    int srcIndex = 0, cnt = -1;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      Lock lock = locks[i];<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      lock.lock();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        ByteBuffer bb = buffers[i];<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        if (i == startBuffer) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>          cnt = bufferSize - startOffset;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          if (cnt &gt; len) cnt = len;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          bb.limit(startOffset + cnt).position(startOffset);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        } else if (i == endBuffer) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          cnt = endOffset;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          bb.limit(cnt).position(0);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        } else {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          cnt = bufferSize;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          bb.limit(cnt).position(0);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        visitor.visit(bb, array, srcIndex + arrayOffset, cnt);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        srcIndex += cnt;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } finally {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        lock.unlock();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    assert srcIndex == len;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   * 'position' 0 to 'length' 5.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * @param offset<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param len<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    assert len &gt;= 0;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    long end = offset + len;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (endBuffer == this.bufferCount) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      endBuffer--;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      endBufferOffset = bufferSize;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          + ",bufferSize=" + bufferSize;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      LOG.error(msg);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      throw new RuntimeException(msg);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    int srcIndex = 0, cnt = -1;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = startBuffer,j=0; i &lt;= endBuffer; ++i,j++) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Lock lock = locks[i];<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      lock.lock();<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      try {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        ByteBuffer bb = buffers[i];<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        if (i == startBuffer) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          cnt = bufferSize - startBufferOffset;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          if (cnt &gt; len) cnt = len;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          ByteBuffer dup = bb.duplicate();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          dup.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          mbb[j] = dup.slice();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } else if (i == endBuffer) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          cnt = endBufferOffset;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          ByteBuffer dup = bb.duplicate();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          dup.position(0).limit(cnt);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          mbb[j] = dup.slice();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        } else {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          cnt = bufferSize ;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          ByteBuffer dup = bb.duplicate();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          dup.position(0).limit(cnt);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          mbb[j] = dup.slice();<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        srcIndex += cnt;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      } finally {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        lock.unlock();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    assert srcIndex == len;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (mbb.length &gt; 1) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return new MultiByteBuff(mbb);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    } else {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return new SingleByteBuff(mbb[0]);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>}<a name="line.272"></a>
+<span class="sourceLineNo">081</span>  private long roundUp(long n, long to) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    return ((n + to - 1) / to) * to;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param start start position in the ByteBufferArray<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param dstArray The array into which bytes are to be written<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @return number of bytes read<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    return getMultiple(start, len, dstArray, 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  /**<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param start start offset of this buffer array<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @param dstArray The array into which bytes are to be written<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   *          written<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * @return number of bytes read<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    return len;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      bb.get(array, arrayIdx, len);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  };<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * Transfers bytes from the given source array into this buffer array<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param start start offset of this buffer array<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param srcArray The array from which bytes are to be read<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    putMultiple(start, len, srcArray, 0);<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>  /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * Transfers bytes from the given source array into this buffer array<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param start start offset of this buffer array<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   * @param srcArray The array from which bytes are to be read<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *          read<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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 final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      bb.put(array, arrayIdx, len);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  };<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private interface Visitor {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    /**<a name="line.147"></a>
+<span class="sourceLineNo">148</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.148"></a>
+<span class="sourceLineNo">149</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.149"></a>
+<span class="sourceLineNo">150</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.150"></a>
+<span class="sourceLineNo">151</span>     * @param bb byte buffer<a name="line.151"></a>
+<span class="sourceLineNo">152</span>     * @param array a source or destination byte array<a name="line.152"></a>
+<span class="sourceLineNo">153</span>     * @param arrayOffset offset of the byte array<a name="line.153"></a>
+<span class="sourceLineNo">154</span>     * @param len read/write length<a name="line.154"></a>
+<span class="sourceLineNo">155</span>     */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    void visit(ByteBuffer bb, byte[] array, int arrayOffset, int len);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param start start offset of this buffer array<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param len The maximum number of bytes to be accessed<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param array The array from/to which bytes are to be read/written<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   *          be read or written<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param visitor implement of how to visit the byte buffer<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assert len &gt;= 0;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    long end = start + len;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assert array.length &gt;= len + arrayOffset;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      LOG.error(msg);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      throw new RuntimeException(msg);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    int srcIndex = 0, cnt = -1;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      Lock lock = locks[i];<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      lock.lock();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      try {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        ByteBuffer bb = buffers[i];<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        if (i == startBuffer) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          cnt = bufferSize - startOffset;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          if (cnt &gt; len) cnt = len;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          bb.limit(startOffset + cnt).position(startOffset);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        } else if (i == endBuffer) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          cnt = endOffset;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          bb.limit(cnt).position(0);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        } else {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          cnt = bufferSize;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          bb.limit(cnt).position(0);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        visitor.visit(bb, array, srcIndex + arrayOffset, cnt);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        srcIndex += cnt;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      } finally {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        lock.unlock();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    assert srcIndex == len;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>  /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * 'position' 0 to 'length' 5.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @param offset<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param len<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assert len &gt;= 0;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    long end = offset + len;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (endBuffer == this.bufferCount) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      endBuffer--;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      endBufferOffset = bufferSize;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          + ",bufferSize=" + bufferSize;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      LOG.error(msg);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      throw new RuntimeException(msg);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    int srcIndex = 0, cnt = -1;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    for (int i = startBuffer,j=0; i &lt;= endBuffer; ++i,j++) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      Lock lock = locks[i];<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      lock.lock();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      try {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        ByteBuffer bb = buffers[i];<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (i == startBuffer) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          cnt = bufferSize - startBufferOffset;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          if (cnt &gt; len) cnt = len;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          ByteBuffer dup = bb.duplicate();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          dup.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          mbb[j] = dup.slice();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        } else if (i == endBuffer) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          cnt = endBufferOffset;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          ByteBuffer dup = bb.duplicate();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          dup.position(0).limit(cnt);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          mbb[j] = dup.slice();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          cnt = bufferSize ;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          ByteBuffer dup = bb.duplicate();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          dup.position(0).limit(cnt);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          mbb[j] = dup.slice();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        srcIndex += cnt;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      } finally {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        lock.unlock();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    assert srcIndex == len;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    if (mbb.length &gt; 1) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      return new MultiByteBuff(mbb);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    } else {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      return new SingleByteBuff(mbb[0]);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>}<a name="line.276"></a>
 
 
 


[08/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index 507426b..52d47c0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -68,14 +68,14 @@
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -133,142 +133,142 @@
 <span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
+<span class="sourceLineNo">128</span>    // 25, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 25, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public boolean getCatalogJanitorEnabled()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_catalogJanitorEnabled;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private boolean m_catalogJanitorEnabled;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 26, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setFilter(String filter)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 24, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_deadServers = deadServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_deadServers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 26, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_filter = filter;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_filter__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public String getFilter()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_deadServers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_filter;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getDeadServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private String m_filter;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getFilter__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_deadServers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_filter__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_deadServers__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 29, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_filter__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 24, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 29, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_assignmentManager = assignmentManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_assignmentManager__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 24, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_deadServers = deadServers;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_deadServers__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public AssignmentManager getAssignmentManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_assignmentManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_deadServers;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private AssignmentManager m_assignmentManager;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getDeadServers__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_assignmentManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_deadServers__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 23, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_deadServers__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 23, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_servers = servers;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_servers__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public List&lt;ServerName&gt; getServers()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_servers;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private List&lt;ServerName&gt; m_servers;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getServers__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_servers__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_servers__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 26, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_filter = filter;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_filter__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public String getFilter()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_filter;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private String m_filter;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getFilter__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 28, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setServerManager(ServerManager serverManager)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 28, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_serverManager = serverManager;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_serverManager__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public ServerManager getServerManager()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_serverManager;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private ServerManager m_serverManager;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getServerManager__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_serverManager__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_serverManager__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 22, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 29, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 22, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_metaLocation = metaLocation;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_metaLocation__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 29, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_assignmentManager = assignmentManager;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_assignmentManager__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public ServerName getMetaLocation()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public AssignmentManager getAssignmentManager()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_metaLocation;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_assignmentManager;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private ServerName m_metaLocation;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private AssignmentManager m_assignmentManager;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_metaLocation__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_assignmentManager__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 28, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setServerManager(ServerManager serverManager)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 28, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_serverManager = serverManager;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_serverManager__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public ServerManager getServerManager()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_serverManager;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private ServerManager m_serverManager;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getServerManager__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_serverManager__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_serverManager__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -287,59 +287,59 @@
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected boolean catalogJanitorEnabled;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected String filter;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setFilter(p_filter);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected AssignmentManager assignmentManager;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<a name="line.300"></a>
 <span class="sourceLineNo">301</span>  }<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  <a name="line.302"></a>
-<span class="sourceLineNo">303</span>  protected List&lt;ServerName&gt; servers;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setServers(p_servers);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<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>  protected String filter;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setFilter(p_filter);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected ServerManager serverManager;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerName metaLocation;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<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>  protected ServerName metaLocation;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected AssignmentManager assignmentManager;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index f8ccc2f..afc0f44 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -69,14 +69,14 @@
 <span class="sourceLineNo">061</span>{<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  private final HMaster master;<a name="line.62"></a>
 <span class="sourceLineNo">063</span>  private final Map&lt;String,Integer&gt; frags;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>  private final String format;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  private final AssignmentManager assignmentManager;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private final List&lt;ServerName&gt; servers;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  private final String filter;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  private final ServerManager serverManager;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>  private final ServerName metaLocation;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  private final boolean catalogJanitorEnabled;<a name="line.71"></a>
+<span class="sourceLineNo">064</span>  private final boolean catalogJanitorEnabled;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  private final String filter;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  private final Set&lt;ServerName&gt; deadServers;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  private final String format;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  private final List&lt;ServerName&gt; servers;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>  private final ServerName metaLocation;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  private final AssignmentManager assignmentManager;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  private final ServerManager serverManager;<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  // 68, 1<a name="line.72"></a>
 <span class="sourceLineNo">073</span>  <a name="line.73"></a>
 <span class="sourceLineNo">074</span>  public String formatZKString() {<a name="line.74"></a>
@@ -110,37 +110,37 @@
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
 <span class="sourceLineNo">103</span>      p_implData.setFrags(null);<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      p_implData.setFormat("html");<a name="line.107"></a>
+<span class="sourceLineNo">107</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    }<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.109"></a>
+<span class="sourceLineNo">109</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.109"></a>
 <span class="sourceLineNo">110</span>    {<a name="line.110"></a>
-<span class="sourceLineNo">111</span>      p_implData.setDeadServers(null);<a name="line.111"></a>
+<span class="sourceLineNo">111</span>      p_implData.setFilter("general");<a name="line.111"></a>
 <span class="sourceLineNo">112</span>    }<a name="line.112"></a>
-<span class="sourceLineNo">113</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.113"></a>
+<span class="sourceLineNo">113</span>    if(! p_implData.getDeadServers__IsNotDefault())<a name="line.113"></a>
 <span class="sourceLineNo">114</span>    {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>      p_implData.setAssignmentManager(null);<a name="line.115"></a>
+<span class="sourceLineNo">115</span>      p_implData.setDeadServers(null);<a name="line.115"></a>
 <span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.117"></a>
+<span class="sourceLineNo">117</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.117"></a>
 <span class="sourceLineNo">118</span>    {<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      p_implData.setServers(null);<a name="line.119"></a>
+<span class="sourceLineNo">119</span>      p_implData.setFormat("html");<a name="line.119"></a>
 <span class="sourceLineNo">120</span>    }<a name="line.120"></a>
-<span class="sourceLineNo">121</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.121"></a>
+<span class="sourceLineNo">121</span>    if(! p_implData.getServers__IsNotDefault())<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    {<a name="line.122"></a>
-<span class="sourceLineNo">123</span>      p_implData.setFilter("general");<a name="line.123"></a>
+<span class="sourceLineNo">123</span>      p_implData.setServers(null);<a name="line.123"></a>
 <span class="sourceLineNo">124</span>    }<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.125"></a>
+<span class="sourceLineNo">125</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    {<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      p_implData.setServerManager(null);<a name="line.127"></a>
+<span class="sourceLineNo">127</span>      p_implData.setMetaLocation(null);<a name="line.127"></a>
 <span class="sourceLineNo">128</span>    }<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    if(! p_implData.getMetaLocation__IsNotDefault())<a name="line.129"></a>
+<span class="sourceLineNo">129</span>    if(! p_implData.getAssignmentManager__IsNotDefault())<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      p_implData.setMetaLocation(null);<a name="line.131"></a>
+<span class="sourceLineNo">131</span>      p_implData.setAssignmentManager(null);<a name="line.131"></a>
 <span class="sourceLineNo">132</span>    }<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    if(! p_implData.getCatalogJanitorEnabled__IsNotDefault())<a name="line.133"></a>
+<span class="sourceLineNo">133</span>    if(! p_implData.getServerManager__IsNotDefault())<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    {<a name="line.134"></a>
-<span class="sourceLineNo">135</span>      p_implData.setCatalogJanitorEnabled(true);<a name="line.135"></a>
+<span class="sourceLineNo">135</span>      p_implData.setServerManager(null);<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    }<a name="line.136"></a>
 <span class="sourceLineNo">137</span>    return p_implData;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>  }<a name="line.138"></a>
@@ -149,14 +149,14 @@
 <span class="sourceLineNo">141</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.141"></a>
 <span class="sourceLineNo">142</span>    master = p_implData.getMaster();<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    frags = p_implData.getFrags();<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    format = p_implData.getFormat();<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    deadServers = p_implData.getDeadServers();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.146"></a>
-<span class="sourceLineNo">147</span>    servers = p_implData.getServers();<a name="line.147"></a>
-<span class="sourceLineNo">148</span>    filter = p_implData.getFilter();<a name="line.148"></a>
-<span class="sourceLineNo">149</span>    serverManager = p_implData.getServerManager();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>    metaLocation = p_implData.getMetaLocation();<a name="line.150"></a>
-<span class="sourceLineNo">151</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.151"></a>
+<span class="sourceLineNo">144</span>    catalogJanitorEnabled = p_implData.getCatalogJanitorEnabled();<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    filter = p_implData.getFilter();<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    deadServers = p_implData.getDeadServers();<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    format = p_implData.getFormat();<a name="line.147"></a>
+<span class="sourceLineNo">148</span>    servers = p_implData.getServers();<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    metaLocation = p_implData.getMetaLocation();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    assignmentManager = p_implData.getAssignmentManager();<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    serverManager = p_implData.getServerManager();<a name="line.151"></a>
 <span class="sourceLineNo">152</span>  }<a name="line.152"></a>
 <span class="sourceLineNo">153</span>  <a name="line.153"></a>
 <span class="sourceLineNo">154</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.154"></a>
@@ -170,8 +170,8 @@
 <span class="sourceLineNo">162</span>      // 60, 3<a name="line.162"></a>
 <span class="sourceLineNo">163</span>      {<a name="line.163"></a>
 <span class="sourceLineNo">164</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_6 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.164"></a>
-<span class="sourceLineNo">165</span>        __jamon__var_6.setFilter(filter);<a name="line.165"></a>
-<span class="sourceLineNo">166</span>        __jamon__var_6.setFormat("json" );<a name="line.166"></a>
+<span class="sourceLineNo">165</span>        __jamon__var_6.setFormat("json" );<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        __jamon__var_6.setFilter(filter);<a name="line.166"></a>
 <span class="sourceLineNo">167</span>        __jamon__var_6.renderNoFlush(jamonWriter);<a name="line.167"></a>
 <span class="sourceLineNo">168</span>      }<a name="line.168"></a>
 <span class="sourceLineNo">169</span>      // 60, 68<a name="line.169"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index c2ab698..46c00c7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -34,9 +34,9 @@
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
 <span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -94,23 +94,23 @@
 <span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 23, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<a name="line.90"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 23, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcn__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcn()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcn;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcn;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcn__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcn__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcv__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 21, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFilter(String filter)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 21, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_filter = filter;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_filter__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFilter()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_filter;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_filter;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFilter__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_filter__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_filter__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -163,10 +163,10 @@
 <span class="sourceLineNo">155</span>    return this;<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>  protected String bcn;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcn(p_bcn);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String filter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFilter(p_filter);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
index c2ab698..46c00c7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.Intf.html
@@ -34,9 +34,9 @@
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
 <span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -94,23 +94,23 @@
 <span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 23, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<a name="line.90"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 23, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcn__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcn()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcn;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcn;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcn__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcn__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcv__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 21, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFilter(String filter)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 21, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_filter = filter;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_filter__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFilter()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_filter;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_filter;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFilter__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_filter__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_filter__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -163,10 +163,10 @@
 <span class="sourceLineNo">155</span>    return this;<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>  protected String bcn;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcn(p_bcn);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String filter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFilter(p_filter);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index c2ab698..46c00c7 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -34,9 +34,9 @@
 <span class="sourceLineNo">026</span>    @org.jamon.annotations.Argument(name = "regionServer", type = "HRegionServer")},<a name="line.26"></a>
 <span class="sourceLineNo">027</span>  optionalArguments = {<a name="line.27"></a>
 <span class="sourceLineNo">028</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.28"></a>
-<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String"),<a name="line.29"></a>
+<span class="sourceLineNo">029</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.29"></a>
 <span class="sourceLineNo">030</span>    @org.jamon.annotations.Argument(name = "bcv", type = "String"),<a name="line.30"></a>
-<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "filter", type = "String")})<a name="line.31"></a>
+<span class="sourceLineNo">031</span>    @org.jamon.annotations.Argument(name = "bcn", type = "String")})<a name="line.31"></a>
 <span class="sourceLineNo">032</span>public class RSStatusTmpl<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  extends org.jamon.AbstractTemplateProxy<a name="line.33"></a>
 <span class="sourceLineNo">034</span>{<a name="line.34"></a>
@@ -94,23 +94,23 @@
 <span class="sourceLineNo">086</span>      return m_format__IsNotDefault;<a name="line.86"></a>
 <span class="sourceLineNo">087</span>    }<a name="line.87"></a>
 <span class="sourceLineNo">088</span>    private boolean m_format__IsNotDefault;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    // 23, 1<a name="line.89"></a>
-<span class="sourceLineNo">090</span>    public void setBcn(String bcn)<a name="line.90"></a>
+<span class="sourceLineNo">089</span>    // 21, 1<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    public void setFilter(String filter)<a name="line.90"></a>
 <span class="sourceLineNo">091</span>    {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>      // 23, 1<a name="line.92"></a>
-<span class="sourceLineNo">093</span>      m_bcn = bcn;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>      m_bcn__IsNotDefault = true;<a name="line.94"></a>
+<span class="sourceLineNo">092</span>      // 21, 1<a name="line.92"></a>
+<span class="sourceLineNo">093</span>      m_filter = filter;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>      m_filter__IsNotDefault = true;<a name="line.94"></a>
 <span class="sourceLineNo">095</span>    }<a name="line.95"></a>
-<span class="sourceLineNo">096</span>    public String getBcn()<a name="line.96"></a>
+<span class="sourceLineNo">096</span>    public String getFilter()<a name="line.96"></a>
 <span class="sourceLineNo">097</span>    {<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      return m_bcn;<a name="line.98"></a>
+<span class="sourceLineNo">098</span>      return m_filter;<a name="line.98"></a>
 <span class="sourceLineNo">099</span>    }<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    private String m_bcn;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    public boolean getBcn__IsNotDefault()<a name="line.101"></a>
+<span class="sourceLineNo">100</span>    private String m_filter;<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    public boolean getFilter__IsNotDefault()<a name="line.101"></a>
 <span class="sourceLineNo">102</span>    {<a name="line.102"></a>
-<span class="sourceLineNo">103</span>      return m_bcn__IsNotDefault;<a name="line.103"></a>
+<span class="sourceLineNo">103</span>      return m_filter__IsNotDefault;<a name="line.103"></a>
 <span class="sourceLineNo">104</span>    }<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    private boolean m_bcn__IsNotDefault;<a name="line.105"></a>
+<span class="sourceLineNo">105</span>    private boolean m_filter__IsNotDefault;<a name="line.105"></a>
 <span class="sourceLineNo">106</span>    // 24, 1<a name="line.106"></a>
 <span class="sourceLineNo">107</span>    public void setBcv(String bcv)<a name="line.107"></a>
 <span class="sourceLineNo">108</span>    {<a name="line.108"></a>
@@ -128,23 +128,23 @@
 <span class="sourceLineNo">120</span>      return m_bcv__IsNotDefault;<a name="line.120"></a>
 <span class="sourceLineNo">121</span>    }<a name="line.121"></a>
 <span class="sourceLineNo">122</span>    private boolean m_bcv__IsNotDefault;<a name="line.122"></a>
-<span class="sourceLineNo">123</span>    // 21, 1<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    public void setFilter(String filter)<a name="line.124"></a>
+<span class="sourceLineNo">123</span>    // 23, 1<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    public void setBcn(String bcn)<a name="line.124"></a>
 <span class="sourceLineNo">125</span>    {<a name="line.125"></a>
-<span class="sourceLineNo">126</span>      // 21, 1<a name="line.126"></a>
-<span class="sourceLineNo">127</span>      m_filter = filter;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>      m_filter__IsNotDefault = true;<a name="line.128"></a>
+<span class="sourceLineNo">126</span>      // 23, 1<a name="line.126"></a>
+<span class="sourceLineNo">127</span>      m_bcn = bcn;<a name="line.127"></a>
+<span class="sourceLineNo">128</span>      m_bcn__IsNotDefault = true;<a name="line.128"></a>
 <span class="sourceLineNo">129</span>    }<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    public String getFilter()<a name="line.130"></a>
+<span class="sourceLineNo">130</span>    public String getBcn()<a name="line.130"></a>
 <span class="sourceLineNo">131</span>    {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      return m_filter;<a name="line.132"></a>
+<span class="sourceLineNo">132</span>      return m_bcn;<a name="line.132"></a>
 <span class="sourceLineNo">133</span>    }<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    private String m_filter;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public boolean getFilter__IsNotDefault()<a name="line.135"></a>
+<span class="sourceLineNo">134</span>    private String m_bcn;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    public boolean getBcn__IsNotDefault()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_filter__IsNotDefault;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_bcn__IsNotDefault;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private boolean m_filter__IsNotDefault;<a name="line.139"></a>
+<span class="sourceLineNo">139</span>    private boolean m_bcn__IsNotDefault;<a name="line.139"></a>
 <span class="sourceLineNo">140</span>  }<a name="line.140"></a>
 <span class="sourceLineNo">141</span>  @Override<a name="line.141"></a>
 <span class="sourceLineNo">142</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.142"></a>
@@ -163,10 +163,10 @@
 <span class="sourceLineNo">155</span>    return this;<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>  protected String bcn;<a name="line.158"></a>
-<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.159"></a>
+<span class="sourceLineNo">158</span>  protected String filter;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.159"></a>
 <span class="sourceLineNo">160</span>  {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    (getImplData()).setBcn(p_bcn);<a name="line.161"></a>
+<span class="sourceLineNo">161</span>    (getImplData()).setFilter(p_filter);<a name="line.161"></a>
 <span class="sourceLineNo">162</span>    return this;<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>
@@ -177,10 +177,10 @@
 <span class="sourceLineNo">169</span>    return this;<a name="line.169"></a>
 <span class="sourceLineNo">170</span>  }<a name="line.170"></a>
 <span class="sourceLineNo">171</span>  <a name="line.171"></a>
-<span class="sourceLineNo">172</span>  protected String filter;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setFilter(String p_filter)<a name="line.173"></a>
+<span class="sourceLineNo">172</span>  protected String bcn;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>  public final org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl setBcn(String p_bcn)<a name="line.173"></a>
 <span class="sourceLineNo">174</span>  {<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    (getImplData()).setFilter(p_filter);<a name="line.175"></a>
+<span class="sourceLineNo">175</span>    (getImplData()).setBcn(p_bcn);<a name="line.175"></a>
 <span class="sourceLineNo">176</span>    return this;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>  }<a name="line.177"></a>
 <span class="sourceLineNo">178</span>  <a name="line.178"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index ca565f0..d805108 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -35,26 +35,26 @@
 <span class="sourceLineNo">027</span>{<a name="line.27"></a>
 <span class="sourceLineNo">028</span>  private final HRegionServer regionServer;<a name="line.28"></a>
 <span class="sourceLineNo">029</span>  private final String format;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>  private final String bcn;<a name="line.30"></a>
+<span class="sourceLineNo">030</span>  private final String filter;<a name="line.30"></a>
 <span class="sourceLineNo">031</span>  private final String bcv;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>  private final String filter;<a name="line.32"></a>
+<span class="sourceLineNo">032</span>  private final String bcn;<a name="line.32"></a>
 <span class="sourceLineNo">033</span>  protected static org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData __jamon_setOptionalArguments(org.apache.hadoop.hbase.tmpl.regionserver.RSStatusTmpl.ImplData p_implData)<a name="line.33"></a>
 <span class="sourceLineNo">034</span>  {<a name="line.34"></a>
 <span class="sourceLineNo">035</span>    if(! p_implData.getFormat__IsNotDefault())<a name="line.35"></a>
 <span class="sourceLineNo">036</span>    {<a name="line.36"></a>
 <span class="sourceLineNo">037</span>      p_implData.setFormat("html");<a name="line.37"></a>
 <span class="sourceLineNo">038</span>    }<a name="line.38"></a>
-<span class="sourceLineNo">039</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.39"></a>
+<span class="sourceLineNo">039</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.39"></a>
 <span class="sourceLineNo">040</span>    {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      p_implData.setBcn("");<a name="line.41"></a>
+<span class="sourceLineNo">041</span>      p_implData.setFilter("general");<a name="line.41"></a>
 <span class="sourceLineNo">042</span>    }<a name="line.42"></a>
 <span class="sourceLineNo">043</span>    if(! p_implData.getBcv__IsNotDefault())<a name="line.43"></a>
 <span class="sourceLineNo">044</span>    {<a name="line.44"></a>
 <span class="sourceLineNo">045</span>      p_implData.setBcv("");<a name="line.45"></a>
 <span class="sourceLineNo">046</span>    }<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    if(! p_implData.getFilter__IsNotDefault())<a name="line.47"></a>
+<span class="sourceLineNo">047</span>    if(! p_implData.getBcn__IsNotDefault())<a name="line.47"></a>
 <span class="sourceLineNo">048</span>    {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>      p_implData.setFilter("general");<a name="line.49"></a>
+<span class="sourceLineNo">049</span>      p_implData.setBcn("");<a name="line.49"></a>
 <span class="sourceLineNo">050</span>    }<a name="line.50"></a>
 <span class="sourceLineNo">051</span>    return p_implData;<a name="line.51"></a>
 <span class="sourceLineNo">052</span>  }<a name="line.52"></a>
@@ -63,9 +63,9 @@
 <span class="sourceLineNo">055</span>    super(p_templateManager, __jamon_setOptionalArguments(p_implData));<a name="line.55"></a>
 <span class="sourceLineNo">056</span>    regionServer = p_implData.getRegionServer();<a name="line.56"></a>
 <span class="sourceLineNo">057</span>    format = p_implData.getFormat();<a name="line.57"></a>
-<span class="sourceLineNo">058</span>    bcn = p_implData.getBcn();<a name="line.58"></a>
+<span class="sourceLineNo">058</span>    filter = p_implData.getFilter();<a name="line.58"></a>
 <span class="sourceLineNo">059</span>    bcv = p_implData.getBcv();<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    filter = p_implData.getFilter();<a name="line.60"></a>
+<span class="sourceLineNo">060</span>    bcn = p_implData.getBcn();<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  }<a name="line.61"></a>
 <span class="sourceLineNo">062</span>  <a name="line.62"></a>
 <span class="sourceLineNo">063</span>  @Override public void renderNoFlush(final java.io.Writer jamonWriter)<a name="line.63"></a>
@@ -94,8 +94,8 @@
 <span class="sourceLineNo">086</span>      // 41, 3<a name="line.86"></a>
 <span class="sourceLineNo">087</span>      {<a name="line.87"></a>
 <span class="sourceLineNo">088</span>        org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl __jamon__var_1 = new org.apache.hadoop.hbase.tmpl.common.TaskMonitorTmpl(this.getTemplateManager());<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        __jamon__var_1.setFilter(filter);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>        __jamon__var_1.setFormat("json" );<a name="line.90"></a>
+<span class="sourceLineNo">089</span>        __jamon__var_1.setFormat("json" );<a name="line.89"></a>
+<span class="sourceLineNo">090</span>        __jamon__var_1.setFilter(filter);<a name="line.90"></a>
 <span class="sourceLineNo">091</span>        __jamon__var_1.renderNoFlush(jamonWriter);<a name="line.91"></a>
 <span class="sourceLineNo">092</span>      }<a name="line.92"></a>
 <span class="sourceLineNo">093</span>      // 41, 68<a name="line.93"></a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferAllocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferAllocator.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferAllocator.html
new file mode 100644
index 0000000..e2ab978
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferAllocator.html
@@ -0,0 +1,111 @@
+<!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.util;<a name="line.18"></a>
+<span class="sourceLineNo">019</span><a name="line.19"></a>
+<span class="sourceLineNo">020</span>import java.io.IOException;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.nio.ByteBuffer;<a name="line.21"></a>
+<span class="sourceLineNo">022</span><a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>/**<a name="line.25"></a>
+<span class="sourceLineNo">026</span> * Defines the way the ByteBuffers are created<a name="line.26"></a>
+<span class="sourceLineNo">027</span> */<a name="line.27"></a>
+<span class="sourceLineNo">028</span>@InterfaceAudience.Private<a name="line.28"></a>
+<span class="sourceLineNo">029</span>public interface ByteBufferAllocator {<a name="line.29"></a>
+<span class="sourceLineNo">030</span><a name="line.30"></a>
+<span class="sourceLineNo">031</span>  /**<a name="line.31"></a>
+<span class="sourceLineNo">032</span>   * Allocates a bytebuffer<a name="line.32"></a>
+<span class="sourceLineNo">033</span>   * @param size the size of the bytebuffer<a name="line.33"></a>
+<span class="sourceLineNo">034</span>   * @param directByteBuffer indicator to create a direct bytebuffer<a name="line.34"></a>
+<span class="sourceLineNo">035</span>   * @return the bytebuffer that is created<a name="line.35"></a>
+<span class="sourceLineNo">036</span>   * @throws IOException exception thrown if there is an error while creating the ByteBuffer<a name="line.36"></a>
+<span class="sourceLineNo">037</span>   */<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>}<a name="line.39"></a>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[30/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.SingleServerRequestRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.SingleServerRequestRunnable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.SingleServerRequestRunnable.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.SingleServerRequestRunnable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.SingleServerRequestRunnable.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementatio

<TRUNCATED>

[12/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
index 158282b..5c5872e 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
@@ -34,98 +34,110 @@
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.26"></a>
 <span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.ByteBufferArray;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>/**<a name="line.31"></a>
-<span class="sourceLineNo">032</span> * IO engine that stores data in memory using an array of ByteBuffers<a name="line.32"></a>
-<span class="sourceLineNo">033</span> * {@link ByteBufferArray}<a name="line.33"></a>
-<span class="sourceLineNo">034</span> */<a name="line.34"></a>
-<span class="sourceLineNo">035</span>@InterfaceAudience.Private<a name="line.35"></a>
-<span class="sourceLineNo">036</span>public class ByteBufferIOEngine implements IOEngine {<a name="line.36"></a>
-<span class="sourceLineNo">037</span>  private ByteBufferArray bufferArray;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>  private final long capacity;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>  private final boolean direct;<a name="line.39"></a>
-<span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>  /**<a name="line.41"></a>
-<span class="sourceLineNo">042</span>   * Construct the ByteBufferIOEngine with the given capacity<a name="line.42"></a>
-<span class="sourceLineNo">043</span>   * @param capacity<a name="line.43"></a>
-<span class="sourceLineNo">044</span>   * @param direct true if allocate direct buffer<a name="line.44"></a>
-<span class="sourceLineNo">045</span>   * @throws IOException<a name="line.45"></a>
-<span class="sourceLineNo">046</span>   */<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  public ByteBufferIOEngine(long capacity, boolean direct)<a name="line.47"></a>
-<span class="sourceLineNo">048</span>      throws IOException {<a name="line.48"></a>
-<span class="sourceLineNo">049</span>    this.capacity = capacity;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>    this.direct = direct;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>    bufferArray = new ByteBufferArray(capacity, direct);<a name="line.51"></a>
-<span class="sourceLineNo">052</span>  }<a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  @Override<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  public String toString() {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    return "ioengine=" + this.getClass().getSimpleName() + ", capacity=" +<a name="line.56"></a>
-<span class="sourceLineNo">057</span>      String.format("%,d", this.capacity) + ", direct=" + this.direct;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  }<a name="line.58"></a>
-<span class="sourceLineNo">059</span><a name="line.59"></a>
-<span class="sourceLineNo">060</span>  /**<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * Memory IO engine is always unable to support persistent storage for the<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   * cache<a name="line.62"></a>
-<span class="sourceLineNo">063</span>   * @return false<a name="line.63"></a>
-<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  @Override<a name="line.65"></a>
-<span class="sourceLineNo">066</span>  public boolean isPersistent() {<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    return false;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>  }<a name="line.68"></a>
-<span class="sourceLineNo">069</span><a name="line.69"></a>
-<span class="sourceLineNo">070</span>  @Override<a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      throws IOException {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    ByteBuff dstBuffer = bufferArray.asSubByteBuff(offset, length);<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    // Here the buffer that is created directly refers to the buffer in the actual buckets.<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    // When any cell is referring to the blocks created out of these buckets then it means that<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    // those cells are referring to a shared memory area which if evicted by the BucketCache would<a name="line.76"></a>
-<span class="sourceLineNo">077</span>    // lead to corruption of results. Hence we set the type of the buffer as SHARED_MEMORY<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    // so that the readers using this block are aware of this fact and do the necessary action<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    // to prevent eviction till the results are either consumed or copied<a name="line.79"></a>
-<span class="sourceLineNo">080</span>    return deserializer.deserialize(dstBuffer, true, MemoryType.SHARED);<a name="line.80"></a>
-<span class="sourceLineNo">081</span>  }<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>  /**<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * Transfers data from the given byte buffer to the buffer array<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @param offset The offset in the ByteBufferArray of the first byte to be<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   *          written<a name="line.87"></a>
-<span class="sourceLineNo">088</span>   * @throws IOException<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 void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.91"></a>
-<span class="sourceLineNo">092</span>    assert srcBuffer.hasArray();<a name="line.92"></a>
-<span class="sourceLineNo">093</span>    bufferArray.putMultiple(offset, srcBuffer.remaining(), srcBuffer.array(),<a name="line.93"></a>
-<span class="sourceLineNo">094</span>        srcBuffer.arrayOffset());<a name="line.94"></a>
-<span class="sourceLineNo">095</span>  }<a name="line.95"></a>
-<span class="sourceLineNo">096</span><a name="line.96"></a>
-<span class="sourceLineNo">097</span>  @Override<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    // This will work for now. But from the DFS itself if we get DBB then this may not hold true.<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    assert srcBuffer.hasArray();<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    bufferArray.putMultiple(offset, srcBuffer.remaining(), srcBuffer.array(),<a name="line.102"></a>
-<span class="sourceLineNo">103</span>        srcBuffer.arrayOffset());<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>   * No operation for the sync in the memory IO engine<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 void sync() {<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    // Nothing to do.<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  }<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * No operation for the shutdown in the memory IO engine<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   */<a name="line.115"></a>
-<span class="sourceLineNo">116</span>  @Override<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  public void shutdown() {<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    // Nothing to do.<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  }<a name="line.119"></a>
-<span class="sourceLineNo">120</span>}<a name="line.120"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.util.ByteBufferAllocator;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.util.ByteBufferArray;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>/**<a name="line.32"></a>
+<span class="sourceLineNo">033</span> * IO engine that stores data in memory using an array of ByteBuffers<a name="line.33"></a>
+<span class="sourceLineNo">034</span> * {@link ByteBufferArray}<a name="line.34"></a>
+<span class="sourceLineNo">035</span> */<a name="line.35"></a>
+<span class="sourceLineNo">036</span>@InterfaceAudience.Private<a name="line.36"></a>
+<span class="sourceLineNo">037</span>public class ByteBufferIOEngine implements IOEngine {<a name="line.37"></a>
+<span class="sourceLineNo">038</span>  private ByteBufferArray bufferArray;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private final long capacity;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>  private final boolean direct;<a name="line.40"></a>
+<span class="sourceLineNo">041</span><a name="line.41"></a>
+<span class="sourceLineNo">042</span>  /**<a name="line.42"></a>
+<span class="sourceLineNo">043</span>   * Construct the ByteBufferIOEngine with the given capacity<a name="line.43"></a>
+<span class="sourceLineNo">044</span>   * @param capacity<a name="line.44"></a>
+<span class="sourceLineNo">045</span>   * @param direct true if allocate direct buffer<a name="line.45"></a>
+<span class="sourceLineNo">046</span>   * @throws IOException ideally here no exception to be thrown from the allocator<a name="line.46"></a>
+<span class="sourceLineNo">047</span>   */<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public ByteBufferIOEngine(long capacity, boolean direct)<a name="line.48"></a>
+<span class="sourceLineNo">049</span>      throws IOException {<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    this.capacity = capacity;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>    this.direct = direct;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>    ByteBufferAllocator allocator = new ByteBufferAllocator() {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>      @Override<a name="line.53"></a>
+<span class="sourceLineNo">054</span>      public ByteBuffer allocate(long size, boolean directByteBuffer)<a name="line.54"></a>
+<span class="sourceLineNo">055</span>          throws IOException {<a name="line.55"></a>
+<span class="sourceLineNo">056</span>        if (directByteBuffer) {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>          return ByteBuffer.allocateDirect((int) size);<a name="line.57"></a>
+<span class="sourceLineNo">058</span>        } else {<a name="line.58"></a>
+<span class="sourceLineNo">059</span>          return ByteBuffer.allocate((int) size);<a name="line.59"></a>
+<span class="sourceLineNo">060</span>        }<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      }<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    };<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    bufferArray = new ByteBufferArray(capacity, direct, allocator);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>  }<a name="line.64"></a>
+<span class="sourceLineNo">065</span><a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @Override<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  public String toString() {<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    return "ioengine=" + this.getClass().getSimpleName() + ", capacity=" +<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      String.format("%,d", this.capacity) + ", direct=" + this.direct;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  /**<a name="line.72"></a>
+<span class="sourceLineNo">073</span>   * Memory IO engine is always unable to support persistent storage for the<a name="line.73"></a>
+<span class="sourceLineNo">074</span>   * cache<a name="line.74"></a>
+<span class="sourceLineNo">075</span>   * @return false<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 boolean isPersistent() {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>    return false;<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>  @Override<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.83"></a>
+<span class="sourceLineNo">084</span>      throws IOException {<a name="line.84"></a>
+<span class="sourceLineNo">085</span>    ByteBuff dstBuffer = bufferArray.asSubByteBuff(offset, length);<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    // Here the buffer that is created directly refers to the buffer in the actual buckets.<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    // When any cell is referring to the blocks created out of these buckets then it means that<a name="line.87"></a>
+<span class="sourceLineNo">088</span>    // those cells are referring to a shared memory area which if evicted by the BucketCache would<a name="line.88"></a>
+<span class="sourceLineNo">089</span>    // lead to corruption of results. Hence we set the type of the buffer as SHARED_MEMORY<a name="line.89"></a>
+<span class="sourceLineNo">090</span>    // so that the readers using this block are aware of this fact and do the necessary action<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    // to prevent eviction till the results are either consumed or copied<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    return deserializer.deserialize(dstBuffer, true, MemoryType.SHARED);<a name="line.92"></a>
+<span class="sourceLineNo">093</span>  }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>  /**<a name="line.95"></a>
+<span class="sourceLineNo">096</span>   * Transfers data from the given byte buffer to the buffer array<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param offset The offset in the ByteBufferArray of the first byte to be<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   *          written<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @throws IOException throws IOException if writing to the array throws exception<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   */<a name="line.101"></a>
+<span class="sourceLineNo">102</span>  @Override<a name="line.102"></a>
+<span class="sourceLineNo">103</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    assert srcBuffer.hasArray();<a name="line.104"></a>
+<span class="sourceLineNo">105</span>    bufferArray.putMultiple(offset, srcBuffer.remaining(), srcBuffer.array(),<a name="line.105"></a>
+<span class="sourceLineNo">106</span>        srcBuffer.arrayOffset());<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    // When caching block into BucketCache there will be single buffer backing for this HFileBlock.<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    // This will work for now. But from the DFS itself if we get DBB then this may not hold true.<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    assert srcBuffer.hasArray();<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    bufferArray.putMultiple(offset, srcBuffer.remaining(), srcBuffer.array(),<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        srcBuffer.arrayOffset());<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>   * No operation for the sync in the memory IO engine<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   */<a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public void sync() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    // Nothing to do.<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span><a name="line.124"></a>
+<span class="sourceLineNo">125</span>  /**<a name="line.125"></a>
+<span class="sourceLineNo">126</span>   * No operation for the shutdown in the memory IO engine<a name="line.126"></a>
+<span class="sourceLineNo">127</span>   */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  @Override<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  public void shutdown() {<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    // Nothing to do.<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>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html
new file mode 100644
index 0000000..14d90dc
--- /dev/null
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html
@@ -0,0 +1,238 @@
+<!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> * Copyright The Apache Software Foundation<a name="line.2"></a>
+<span class="sourceLineNo">003</span> *<a name="line.3"></a>
+<span class="sourceLineNo">004</span> * Licensed to the Apache Software Foundation (ASF) under one or more<a name="line.4"></a>
+<span class="sourceLineNo">005</span> * contributor license agreements. See the NOTICE file distributed with this<a name="line.5"></a>
+<span class="sourceLineNo">006</span> * work for additional information regarding copyright ownership. The ASF<a name="line.6"></a>
+<span class="sourceLineNo">007</span> * licenses this file to you under the Apache License, Version 2.0 (the<a name="line.7"></a>
+<span class="sourceLineNo">008</span> * "License"); you may not use this file except in compliance with the License.<a name="line.8"></a>
+<span class="sourceLineNo">009</span> * You may obtain a copy of the License at<a name="line.9"></a>
+<span class="sourceLineNo">010</span> *<a name="line.10"></a>
+<span class="sourceLineNo">011</span> * http://www.apache.org/licenses/LICENSE-2.0<a name="line.11"></a>
+<span class="sourceLineNo">012</span> *<a name="line.12"></a>
+<span class="sourceLineNo">013</span> * Unless required by applicable law or agreed to in writing, software<a name="line.13"></a>
+<span class="sourceLineNo">014</span> * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT<a name="line.14"></a>
+<span class="sourceLineNo">015</span> * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the<a name="line.15"></a>
+<span class="sourceLineNo">016</span> * License for the specific language governing permissions and limitations<a name="line.16"></a>
+<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
+<span class="sourceLineNo">018</span> */<a name="line.18"></a>
+<span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.io.hfile.bucket;<a name="line.19"></a>
+<span class="sourceLineNo">020</span><a name="line.20"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.io.RandomAccessFile;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.nio.ByteBuffer;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.nio.channels.FileChannel;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.io.hfile.Cacheable;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.io.hfile.Cacheable.MemoryType;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.io.hfile.CacheableDeserializer;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.util.ByteBufferAllocator;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.util.ByteBufferArray;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.util.StringUtils;<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>/**<a name="line.38"></a>
+<span class="sourceLineNo">039</span> * IO engine that stores data to a file on the local file system using memory mapping<a name="line.39"></a>
+<span class="sourceLineNo">040</span> * mechanism<a name="line.40"></a>
+<span class="sourceLineNo">041</span> */<a name="line.41"></a>
+<span class="sourceLineNo">042</span>@InterfaceAudience.Private<a name="line.42"></a>
+<span class="sourceLineNo">043</span>public class FileMmapEngine implements IOEngine {<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  static final Log LOG = LogFactory.getLog(FileMmapEngine.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private final String path;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private long size;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private ByteBufferArray bufferArray;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private final FileChannel fileChannel;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private RandomAccessFile raf = null;<a name="line.50"></a>
+<span class="sourceLineNo">051</span><a name="line.51"></a>
+<span class="sourceLineNo">052</span>  public FileMmapEngine(String filePath, long capacity) throws IOException {<a name="line.52"></a>
+<span class="sourceLineNo">053</span>    this.path = filePath;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>    this.size = capacity;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    long fileSize = 0;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    try {<a name="line.56"></a>
+<span class="sourceLineNo">057</span>      raf = new RandomAccessFile(filePath, "rw");<a name="line.57"></a>
+<span class="sourceLineNo">058</span>      fileSize = roundUp(capacity, ByteBufferArray.DEFAULT_BUFFER_SIZE);<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      raf.setLength(fileSize);<a name="line.59"></a>
+<span class="sourceLineNo">060</span>      fileChannel = raf.getChannel();<a name="line.60"></a>
+<span class="sourceLineNo">061</span>      LOG.info("Allocating " + StringUtils.byteDesc(fileSize) + ", on the path:" + filePath);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    } catch (java.io.FileNotFoundException fex) {<a name="line.62"></a>
+<span class="sourceLineNo">063</span>      LOG.error("Can't create bucket cache file " + filePath, fex);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>      throw fex;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    } catch (IOException ioex) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>      LOG.error("Can't extend bucket cache file; insufficient space for "<a name="line.66"></a>
+<span class="sourceLineNo">067</span>          + StringUtils.byteDesc(fileSize), ioex);<a name="line.67"></a>
+<span class="sourceLineNo">068</span>      shutdown();<a name="line.68"></a>
+<span class="sourceLineNo">069</span>      throw ioex;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    }<a name="line.70"></a>
+<span class="sourceLineNo">071</span>    ByteBufferAllocator allocator = new ByteBufferAllocator() {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      int pos = 0;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      @Override<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      public ByteBuffer allocate(long size, boolean directByteBuffer) throws IOException {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        ByteBuffer buffer = null;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        if (directByteBuffer) {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>          buffer = fileChannel.map(java.nio.channels.FileChannel.MapMode.READ_WRITE, pos * size,<a name="line.77"></a>
+<span class="sourceLineNo">078</span>              size);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        } else {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>          throw new IllegalArgumentException(<a name="line.80"></a>
+<span class="sourceLineNo">081</span>              "Only Direct Bytebuffers allowed with FileMMap engine");<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        }<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        pos++;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        return buffer;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      }<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    };<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    bufferArray = new ByteBufferArray(fileSize, true, allocator);<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>  private long roundUp(long n, long to) {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>    return ((n + to - 1) / to) * to;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  }<a name="line.92"></a>
+<span class="sourceLineNo">093</span><a name="line.93"></a>
+<span class="sourceLineNo">094</span>  @Override<a name="line.94"></a>
+<span class="sourceLineNo">095</span>  public String toString() {<a name="line.95"></a>
+<span class="sourceLineNo">096</span>    return "ioengine=" + this.getClass().getSimpleName() + ", path=" + this.path +<a name="line.96"></a>
+<span class="sourceLineNo">097</span>      ", size=" + String.format("%,d", this.size);<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>   * File IO engine is always able to support persistent storage for the cache<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   * @return true<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   */<a name="line.103"></a>
+<span class="sourceLineNo">104</span>  @Override<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public boolean isPersistent() {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    return true;<a name="line.106"></a>
+<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
+<span class="sourceLineNo">108</span><a name="line.108"></a>
+<span class="sourceLineNo">109</span>  @Override<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  public Cacheable read(long offset, int length, CacheableDeserializer&lt;Cacheable&gt; deserializer)<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      throws IOException {<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    byte[] dst = new byte[length];<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    bufferArray.getMultiple(offset, length, dst);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    return deserializer.deserialize(new SingleByteBuff(ByteBuffer.wrap(dst)), true,<a name="line.114"></a>
+<span class="sourceLineNo">115</span>        MemoryType.EXCLUSIVE);<a name="line.115"></a>
+<span class="sourceLineNo">116</span>  }<a name="line.116"></a>
+<span class="sourceLineNo">117</span><a name="line.117"></a>
+<span class="sourceLineNo">118</span>  /**<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * Transfers data from the given byte buffer to file<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param srcBuffer the given byte buffer from which bytes are to be read<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param offset The offset in the file where the first byte to be written<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   * @throws IOException<a name="line.122"></a>
+<span class="sourceLineNo">123</span>   */<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  @Override<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public void write(ByteBuffer srcBuffer, long offset) throws IOException {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    assert srcBuffer.hasArray();<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    bufferArray.putMultiple(offset, srcBuffer.remaining(), srcBuffer.array(),<a name="line.127"></a>
+<span class="sourceLineNo">128</span>        srcBuffer.arrayOffset());<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  }<a name="line.129"></a>
+<span class="sourceLineNo">130</span><a name="line.130"></a>
+<span class="sourceLineNo">131</span>  @Override<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  public void write(ByteBuff srcBuffer, long offset) throws IOException {<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    // This singleByteBuff can be considered to be array backed<a name="line.133"></a>
+<span class="sourceLineNo">134</span>    assert srcBuffer.hasArray();<a name="line.134"></a>
+<span class="sourceLineNo">135</span>    bufferArray.putMultiple(offset, srcBuffer.remaining(), srcBuffer.array(),<a name="line.135"></a>
+<span class="sourceLineNo">136</span>        srcBuffer.arrayOffset());<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>  }<a name="line.138"></a>
+<span class="sourceLineNo">139</span>  /**<a name="line.139"></a>
+<span class="sourceLineNo">140</span>   * Sync the data to file after writing<a name="line.140"></a>
+<span class="sourceLineNo">141</span>   * @throws IOException<a name="line.141"></a>
+<span class="sourceLineNo">142</span>   */<a name="line.142"></a>
+<span class="sourceLineNo">143</span>  @Override<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public void sync() throws IOException {<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    if (fileChannel != null) {<a name="line.145"></a>
+<span class="sourceLineNo">146</span>      fileChannel.force(true);<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    }<a name="line.147"></a>
+<span class="sourceLineNo">148</span>  }<a name="line.148"></a>
+<span class="sourceLineNo">149</span><a name="line.149"></a>
+<span class="sourceLineNo">150</span>  /**<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * Close the file<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   */<a name="line.152"></a>
+<span class="sourceLineNo">153</span>  @Override<a name="line.153"></a>
+<span class="sourceLineNo">154</span>  public void shutdown() {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>    try {<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      fileChannel.close();<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    } catch (IOException ex) {<a name="line.157"></a>
+<span class="sourceLineNo">158</span>      LOG.error("Can't shutdown cleanly", ex);<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    try {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      raf.close();<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    } catch (IOException ex) {<a name="line.162"></a>
+<span class="sourceLineNo">163</span>      LOG.error("Can't shutdown cleanly", ex);<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>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</pre>
+</div>
+</body>
+</html>


[27/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.ServerErrorTracker createServerErrorTracker() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    return new ConnectionImplementation.ServerE

<TRUNCATED>

[19/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html b/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
index 5d603c1..95bfbf5 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
@@ -29,78 +29,80 @@
 <span class="sourceLineNo">021</span><a name="line.21"></a>
 <span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.CallQueueTooBigException;<a name="line.22"></a>
 <span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.MultiActionResultTooLarge;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.RegionTooBusyException;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.RetryImmediatelyException;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.quotas.ThrottlingException;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.29"></a>
-<span class="sourceLineNo">030</span><a name="line.30"></a>
-<span class="sourceLineNo">031</span>@InterfaceAudience.Private<a name="line.31"></a>
-<span class="sourceLineNo">032</span>@InterfaceStability.Evolving<a name="line.32"></a>
-<span class="sourceLineNo">033</span>public final class ClientExceptionsUtil {<a name="line.33"></a>
-<span class="sourceLineNo">034</span><a name="line.34"></a>
-<span class="sourceLineNo">035</span>  private ClientExceptionsUtil() {}<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>  public static boolean isMetaClearingException(Throwable cur) {<a name="line.37"></a>
-<span class="sourceLineNo">038</span>    cur = findException(cur);<a name="line.38"></a>
-<span class="sourceLineNo">039</span><a name="line.39"></a>
-<span class="sourceLineNo">040</span>    if (cur == null) {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>      return true;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>    }<a name="line.42"></a>
-<span class="sourceLineNo">043</span>    return !isSpecialException(cur) || (cur instanceof RegionMovedException);<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  }<a name="line.44"></a>
-<span class="sourceLineNo">045</span><a name="line.45"></a>
-<span class="sourceLineNo">046</span>  public static boolean isSpecialException(Throwable cur) {<a name="line.46"></a>
-<span class="sourceLineNo">047</span>    return (cur instanceof RegionMovedException || cur instanceof RegionOpeningException<a name="line.47"></a>
-<span class="sourceLineNo">048</span>        || cur instanceof RegionTooBusyException || cur instanceof ThrottlingException<a name="line.48"></a>
-<span class="sourceLineNo">049</span>        || cur instanceof MultiActionResultTooLarge || cur instanceof RetryImmediatelyException<a name="line.49"></a>
-<span class="sourceLineNo">050</span>        || cur instanceof CallQueueTooBigException);<a name="line.50"></a>
-<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
-<span class="sourceLineNo">052</span><a name="line.52"></a>
-<span class="sourceLineNo">053</span><a name="line.53"></a>
-<span class="sourceLineNo">054</span>  /**<a name="line.54"></a>
-<span class="sourceLineNo">055</span>   * Look for an exception we know in the remote exception:<a name="line.55"></a>
-<span class="sourceLineNo">056</span>   * - hadoop.ipc wrapped exceptions<a name="line.56"></a>
-<span class="sourceLineNo">057</span>   * - nested exceptions<a name="line.57"></a>
-<span class="sourceLineNo">058</span>   *<a name="line.58"></a>
-<span class="sourceLineNo">059</span>   * Looks for: RegionMovedException / RegionOpeningException / RegionTooBusyException /<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   *            ThrottlingException<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   * @return null if we didn't find the exception, the exception otherwise.<a name="line.61"></a>
-<span class="sourceLineNo">062</span>   */<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static Throwable findException(Object exception) {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    if (exception == null || !(exception instanceof Throwable)) {<a name="line.64"></a>
-<span class="sourceLineNo">065</span>      return null;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    }<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    Throwable cur = (Throwable) exception;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    while (cur != null) {<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      if (isSpecialException(cur)) {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>        return cur;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>      }<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      if (cur instanceof RemoteException) {<a name="line.72"></a>
-<span class="sourceLineNo">073</span>        RemoteException re = (RemoteException) cur;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>        cur = re.unwrapRemoteException(<a name="line.74"></a>
-<span class="sourceLineNo">075</span>            RegionOpeningException.class, RegionMovedException.class,<a name="line.75"></a>
-<span class="sourceLineNo">076</span>            RegionTooBusyException.class);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>        if (cur == null) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>          cur = re.unwrapRemoteException();<a name="line.78"></a>
-<span class="sourceLineNo">079</span>        }<a name="line.79"></a>
-<span class="sourceLineNo">080</span>        // unwrapRemoteException can return the exception given as a parameter when it cannot<a name="line.80"></a>
-<span class="sourceLineNo">081</span>        //  unwrap it. In this case, there is no need to look further<a name="line.81"></a>
-<span class="sourceLineNo">082</span>        // noinspection ObjectEquality<a name="line.82"></a>
-<span class="sourceLineNo">083</span>        if (cur == re) {<a name="line.83"></a>
-<span class="sourceLineNo">084</span>          return cur;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>        }<a name="line.85"></a>
-<span class="sourceLineNo">086</span>      } else if (cur.getCause() != null) {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>        cur = cur.getCause();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>      } else {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>        return cur;<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      }<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    }<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    return null;<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span>}<a name="line.95"></a>
+<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.NotServingRegionException;<a name="line.24"></a>
+<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.RegionTooBusyException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.RetryImmediatelyException;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.quotas.ThrottlingException;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.ipc.RemoteException;<a name="line.30"></a>
+<span class="sourceLineNo">031</span><a name="line.31"></a>
+<span class="sourceLineNo">032</span>@InterfaceAudience.Private<a name="line.32"></a>
+<span class="sourceLineNo">033</span>@InterfaceStability.Evolving<a name="line.33"></a>
+<span class="sourceLineNo">034</span>public final class ClientExceptionsUtil {<a name="line.34"></a>
+<span class="sourceLineNo">035</span><a name="line.35"></a>
+<span class="sourceLineNo">036</span>  private ClientExceptionsUtil() {}<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  public static boolean isMetaClearingException(Throwable cur) {<a name="line.38"></a>
+<span class="sourceLineNo">039</span>    cur = findException(cur);<a name="line.39"></a>
+<span class="sourceLineNo">040</span><a name="line.40"></a>
+<span class="sourceLineNo">041</span>    if (cur == null) {<a name="line.41"></a>
+<span class="sourceLineNo">042</span>      return true;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    }<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    return !isSpecialException(cur) || (cur instanceof RegionMovedException)<a name="line.44"></a>
+<span class="sourceLineNo">045</span>        || cur instanceof NotServingRegionException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  }<a name="line.46"></a>
+<span class="sourceLineNo">047</span><a name="line.47"></a>
+<span class="sourceLineNo">048</span>  public static boolean isSpecialException(Throwable cur) {<a name="line.48"></a>
+<span class="sourceLineNo">049</span>    return (cur instanceof RegionMovedException || cur instanceof RegionOpeningException<a name="line.49"></a>
+<span class="sourceLineNo">050</span>        || cur instanceof RegionTooBusyException || cur instanceof ThrottlingException<a name="line.50"></a>
+<span class="sourceLineNo">051</span>        || cur instanceof MultiActionResultTooLarge || cur instanceof RetryImmediatelyException<a name="line.51"></a>
+<span class="sourceLineNo">052</span>        || cur instanceof CallQueueTooBigException || cur instanceof NotServingRegionException);<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  }<a name="line.53"></a>
+<span class="sourceLineNo">054</span><a name="line.54"></a>
+<span class="sourceLineNo">055</span><a name="line.55"></a>
+<span class="sourceLineNo">056</span>  /**<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   * Look for an exception we know in the remote exception:<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   * - hadoop.ipc wrapped exceptions<a name="line.58"></a>
+<span class="sourceLineNo">059</span>   * - nested exceptions<a name="line.59"></a>
+<span class="sourceLineNo">060</span>   *<a name="line.60"></a>
+<span class="sourceLineNo">061</span>   * Looks for: RegionMovedException / RegionOpeningException / RegionTooBusyException /<a name="line.61"></a>
+<span class="sourceLineNo">062</span>   *            ThrottlingException<a name="line.62"></a>
+<span class="sourceLineNo">063</span>   * @return null if we didn't find the exception, the exception otherwise.<a name="line.63"></a>
+<span class="sourceLineNo">064</span>   */<a name="line.64"></a>
+<span class="sourceLineNo">065</span>  public static Throwable findException(Object exception) {<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    if (exception == null || !(exception instanceof Throwable)) {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>      return null;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    }<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    Throwable cur = (Throwable) exception;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    while (cur != null) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      if (isSpecialException(cur)) {<a name="line.71"></a>
+<span class="sourceLineNo">072</span>        return cur;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      }<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      if (cur instanceof RemoteException) {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        RemoteException re = (RemoteException) cur;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        cur = re.unwrapRemoteException(<a name="line.76"></a>
+<span class="sourceLineNo">077</span>            RegionOpeningException.class, RegionMovedException.class,<a name="line.77"></a>
+<span class="sourceLineNo">078</span>            RegionTooBusyException.class);<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        if (cur == null) {<a name="line.79"></a>
+<span class="sourceLineNo">080</span>          cur = re.unwrapRemoteException();<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        }<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        // unwrapRemoteException can return the exception given as a parameter when it cannot<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        //  unwrap it. In this case, there is no need to look further<a name="line.83"></a>
+<span class="sourceLineNo">084</span>        // noinspection ObjectEquality<a name="line.84"></a>
+<span class="sourceLineNo">085</span>        if (cur == re) {<a name="line.85"></a>
+<span class="sourceLineNo">086</span>          return cur;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>        }<a name="line.87"></a>
+<span class="sourceLineNo">088</span>      } else if (cur.getCause() != null) {<a name="line.88"></a>
+<span class="sourceLineNo">089</span>        cur = cur.getCause();<a name="line.89"></a>
+<span class="sourceLineNo">090</span>      } else {<a name="line.90"></a>
+<span class="sourceLineNo">091</span>        return cur;<a name="line.91"></a>
+<span class="sourceLineNo">092</span>      }<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    }<a name="line.93"></a>
+<span class="sourceLineNo">094</span><a name="line.94"></a>
+<span class="sourceLineNo">095</span>    return null;<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  }<a name="line.96"></a>
+<span class="sourceLineNo">097</span>}<a name="line.97"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html b/devapidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
index ce497c5..0da4ea6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
@@ -70,68 +70,66 @@
 <span class="sourceLineNo">062</span>  public boolean filterRowKey(Cell firstRowCell) {<a name="line.62"></a>
 <span class="sourceLineNo">063</span>    // if stopRowKey is &lt;= buffer, then true, filter row.<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    int cmp = CellComparator.COMPARATOR.compareRows(firstRowCell, stopRowKey, 0, stopRowKey.length);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    if (cmp &gt; 0) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      done = true;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    return done;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public boolean filterAllRemaining() {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return done;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  public static Filter createFilterFromArguments (ArrayList&lt;byte []&gt; filterArguments) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    Preconditions.checkArgument(filterArguments.size() == 1,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>                                "Expected 1 but got: %s", filterArguments.size());<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    byte [] stopRowKey = ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    return new InclusiveStopFilter(stopRowKey);<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>  /**<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @return The filter serialized using pb<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public byte [] toByteArray() {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    FilterProtos.InclusiveStopFilter.Builder builder =<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      FilterProtos.InclusiveStopFilter.newBuilder();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    if (this.stopRowKey != null) builder.setStopRowKey(ByteStringer.wrap(this.stopRowKey));<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    return builder.build().toByteArray();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param pbBytes A pb serialized {@link InclusiveStopFilter} instance<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @return An instance of {@link InclusiveStopFilter} made from &lt;code&gt;bytes&lt;/code&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @throws DeserializationException<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @see #toByteArray<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public static InclusiveStopFilter parseFrom(final byte [] pbBytes)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  throws DeserializationException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    FilterProtos.InclusiveStopFilter proto;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    try {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      proto = FilterProtos.InclusiveStopFilter.parseFrom(pbBytes);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    } catch (InvalidProtocolBufferException e) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      throw new DeserializationException(e);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return new InclusiveStopFilter(proto.hasStopRowKey()?proto.getStopRowKey().toByteArray():null);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param other<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return true if and only if the fields of the filter that are serialized<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * are equal to the corresponding fields in other.  Used for testing.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  boolean areSerializedFieldsEqual(Filter o) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    if (o == this) return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    if (!(o instanceof InclusiveStopFilter)) return false;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    InclusiveStopFilter other = (InclusiveStopFilter)o;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    return Bytes.equals(this.getStopRowKey(), other.getStopRowKey());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public String toString() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.stopRowKey);<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">065</span>    done = reversed ? cmp &lt; 0 : cmp &gt; 0;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    return done;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public boolean filterAllRemaining() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    return done;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static Filter createFilterFromArguments (ArrayList&lt;byte []&gt; filterArguments) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    Preconditions.checkArgument(filterArguments.size() == 1,<a name="line.74"></a>
+<span class="sourceLineNo">075</span>                                "Expected 1 but got: %s", filterArguments.size());<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    byte [] stopRowKey = ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    return new InclusiveStopFilter(stopRowKey);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @return The filter serialized using pb<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public byte [] toByteArray() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    FilterProtos.InclusiveStopFilter.Builder builder =<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      FilterProtos.InclusiveStopFilter.newBuilder();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (this.stopRowKey != null) builder.setStopRowKey(ByteStringer.wrap(this.stopRowKey));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    return builder.build().toByteArray();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param pbBytes A pb serialized {@link InclusiveStopFilter} instance<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return An instance of {@link InclusiveStopFilter} made from &lt;code&gt;bytes&lt;/code&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @throws DeserializationException<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @see #toByteArray<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static InclusiveStopFilter parseFrom(final byte [] pbBytes)<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  throws DeserializationException {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    FilterProtos.InclusiveStopFilter proto;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    try {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      proto = FilterProtos.InclusiveStopFilter.parseFrom(pbBytes);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    } catch (InvalidProtocolBufferException e) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      throw new DeserializationException(e);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    return new InclusiveStopFilter(proto.hasStopRowKey()?proto.getStopRowKey().toByteArray():null);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  /**<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @param other<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @return true if and only if the fields of the filter that are serialized<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * are equal to the corresponding fields in other.  Used for testing.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  boolean areSerializedFieldsEqual(Filter o) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    if (o == this) return true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    if (!(o instanceof InclusiveStopFilter)) return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    InclusiveStopFilter other = (InclusiveStopFilter)o;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    return Bytes.equals(this.getStopRowKey(), other.getStopRowKey());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public String toString() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.stopRowKey);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>}<a name="line.124"></a>
 
 
 


[43/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/checkstyle-aggregate.html
----------------------------------------------------------------------
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 3927b3c..507659b 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -280,10 +280,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>1686</td>
+<td>1688</td>
 <td>0</td>
 <td>0</td>
-<td>12747</td></tr></table></div>
+<td>12743</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -2011,12 +2011,12 @@
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.BucketCache.java">org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>32</td></tr>
+<td>28</td></tr>
 <tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.ByteBufferIOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
-<td>4</td></tr>
+<td>2</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.CachedEntryQueue.java">org/apache/hadoop/hbase/io/hfile/bucket/CachedEntryQueue.java</a></td>
 <td>0</td>
@@ -2028,3981 +2028,3986 @@
 <td>0</td>
 <td>4</td></tr>
 <tr class="a">
+<td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>2</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.IOEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap.java">org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.util.HeapMemorySizeUtil.java">org/apache/hadoop/hbase/io/util/HeapMemorySizeUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.io.util.LRUDictionary.java">org/apache/hadoop/hbase/io/util/LRUDictionary.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.io.util.StreamUtils.java">org/apache/hadoop/hbase/io/util/StreamUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.AbstractRpcClient.java">org/apache/hadoop/hbase/ipc/AbstractRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.AsyncCall.java">org/apache/hadoop/hbase/ipc/AsyncCall.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.AsyncRpcChannel.java">org/apache/hadoop/hbase/ipc/AsyncRpcChannel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.AsyncRpcClient.java">org/apache/hadoop/hbase/ipc/AsyncRpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.AsyncServerResponseHandler.java">org/apache/hadoop/hbase/ipc/AsyncServerResponseHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.BlockingRpcCallback.java">org/apache/hadoop/hbase/ipc/BlockingRpcCallback.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.BufferChain.java">org/apache/hadoop/hbase/ipc/BufferChain.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.Call.java">org/apache/hadoop/hbase/ipc/Call.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.CallRunner.java">org/apache/hadoop/hbase/ipc/CallRunner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.CallTimeoutException.java">org/apache/hadoop/hbase/ipc/CallTimeoutException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.ConnectionId.java">org/apache/hadoop/hbase/ipc/ConnectionId.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.CoprocessorRpcChannel.java">org/apache/hadoop/hbase/ipc/CoprocessorRpcChannel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.FailedServers.java">org/apache/hadoop/hbase/ipc/FailedServers.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.FifoRpcScheduler.java">org/apache/hadoop/hbase/ipc/FifoRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.IPCUtil.java">org/apache/hadoop/hbase/ipc/IPCUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>48</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.MasterCoprocessorRpcChannel.java">org/apache/hadoop/hbase/ipc/MasterCoprocessorRpcChannel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.MetricsHBaseServer.java">org/apache/hadoop/hbase/ipc/MetricsHBaseServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.MetricsHBaseServerSourceImpl.java">org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.PriorityFunction.java">org/apache/hadoop/hbase/ipc/PriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RWQueueRpcExecutor.java">org/apache/hadoop/hbase/ipc/RWQueueRpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RegionCoprocessorRpcChannel.java">org/apache/hadoop/hbase/ipc/RegionCoprocessorRpcChannel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RegionServerCoprocessorRpcChannel.java">org/apache/hadoop/hbase/ipc/RegionServerCoprocessorRpcChannel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcCallContext.java">org/apache/hadoop/hbase/ipc/RpcCallContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcClient.java">org/apache/hadoop/hbase/ipc/RpcClient.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcClientFactory.java">org/apache/hadoop/hbase/ipc/RpcClientFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcClientImpl.java">org/apache/hadoop/hbase/ipc/RpcClientImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcExecutor.java">org/apache/hadoop/hbase/ipc/RpcExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcScheduler.java">org/apache/hadoop/hbase/ipc/RpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcSchedulerContext.java">org/apache/hadoop/hbase/ipc/RpcSchedulerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServer.java">org/apache/hadoop/hbase/ipc/RpcServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>84</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.RpcServerInterface.java">org/apache/hadoop/hbase/ipc/RpcServerInterface.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.ServerRpcController.java">org/apache/hadoop/hbase/ipc/ServerRpcController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.ipc.SimpleRpcScheduler.java">org/apache/hadoop/hbase/ipc/SimpleRpcScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.ipc.TimeLimitedRpcController.java">org/apache/hadoop/hbase/ipc/TimeLimitedRpcController.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.Driver.java">org/apache/hadoop/hbase/mapred/Driver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.GroupingTableMap.java">org/apache/hadoop/hbase/mapred/GroupingTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.HRegionPartitioner.java">org/apache/hadoop/hbase/mapred/HRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.IdentityTableMap.java">org/apache/hadoop/hbase/mapred/IdentityTableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.IdentityTableReduce.java">org/apache/hadoop/hbase/mapred/IdentityTableReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.MultiTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapred/MultiTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.RowCounter.java">org/apache/hadoop/hbase/mapred/RowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableInputFormat.java">org/apache/hadoop/hbase/mapred/TableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableInputFormatBase.java">org/apache/hadoop/hbase/mapred/TableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableMap.java">org/apache/hadoop/hbase/mapred/TableMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableMapReduceUtil.java">org/apache/hadoop/hbase/mapred/TableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableOutputFormat.java">org/apache/hadoop/hbase/mapred/TableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableRecordReader.java">org/apache/hadoop/hbase/mapred/TableRecordReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableRecordReaderImpl.java">org/apache/hadoop/hbase/mapred/TableRecordReaderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableReduce.java">org/apache/hadoop/hbase/mapred/TableReduce.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapred/TableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapred.TableSplit.java">org/apache/hadoop/hbase/mapred/TableSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCounter.java">org/apache/hadoop/hbase/mapreduce/CellCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CellCreator.java">org/apache/hadoop/hbase/mapreduce/CellCreator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.CopyTable.java">org/apache/hadoop/hbase/mapreduce/CopyTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.DefaultVisibilityExpressionResolver.java">org/apache/hadoop/hbase/mapreduce/DefaultVisibilityExpressionResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Driver.java">org/apache/hadoop/hbase/mapreduce/Driver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Export.java">org/apache/hadoop/hbase/mapreduce/Export.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.GroupingTableMapper.java">org/apache/hadoop/hbase/mapreduce/GroupingTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HFileOutputFormat2.java">org/apache/hadoop/hbase/mapreduce/HFileOutputFormat2.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HRegionPartitioner.java">org/apache/hadoop/hbase/mapreduce/HRegionPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.HashTable.java">org/apache/hadoop/hbase/mapreduce/HashTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IdentityTableMapper.java">org/apache/hadoop/hbase/mapreduce/IdentityTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IdentityTableReducer.java">org/apache/hadoop/hbase/mapreduce/IdentityTableReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.Import.java">org/apache/hadoop/hbase/mapreduce/Import.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ImportTsv.java">org/apache/hadoop/hbase/mapreduce/ImportTsv.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>20</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.IndexBuilder.java">org/apache/hadoop/hbase/mapreduce/IndexBuilder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.JarFinder.java">org/apache/hadoop/hbase/mapreduce/JarFinder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.JobUtil.java">org/apache/hadoop/hbase/mapreduce/JobUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.KeyValueSortReducer.java">org/apache/hadoop/hbase/mapreduce/KeyValueSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles.java">org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/MultiTableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableOutputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/MultiTableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultiTableSnapshotInputFormatImpl.java">org/apache/hadoop/hbase/mapreduce/MultiTableSnapshotInputFormatImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.MultithreadedTableMapper.java">org/apache/hadoop/hbase/mapreduce/MultithreadedTableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.PutCombiner.java">org/apache/hadoop/hbase/mapreduce/PutCombiner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.PutSortReducer.java">org/apache/hadoop/hbase/mapreduce/PutSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.ResultSerialization.java">org/apache/hadoop/hbase/mapreduce/ResultSerialization.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.RowCounter.java">org/apache/hadoop/hbase/mapreduce/RowCounter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SampleUploader.java">org/apache/hadoop/hbase/mapreduce/SampleUploader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SimpleTotalOrderPartitioner.java">org/apache/hadoop/hbase/mapreduce/SimpleTotalOrderPartitioner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.SyncTable.java">org/apache/hadoop/hbase/mapreduce/SyncTable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableInputFormat.java">org/apache/hadoop/hbase/mapreduce/TableInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.java">org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>15</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil.java">org/apache/hadoop/hbase/mapreduce/TableMapReduceUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>54</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableMapper.java">org/apache/hadoop/hbase/mapreduce/TableMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableOutputCommitter.java">org/apache/hadoop/hbase/mapreduce/TableOutputCommitter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableOutputFormat.java">org/apache/hadoop/hbase/mapreduce/TableOutputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableRecordReader.java">org/apache/hadoop/hbase/mapreduce/TableRecordReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableRecordReaderImpl.java">org/apache/hadoop/hbase/mapreduce/TableRecordReaderImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableReducer.java">org/apache/hadoop/hbase/mapreduce/TableReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormat.java">org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSnapshotInputFormatImpl.java">org/apache/hadoop/hbase/mapreduce/TableSnapshotInputFormatImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TableSplit.java">org/apache/hadoop/hbase/mapreduce/TableSplit.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TextSortReducer.java">org/apache/hadoop/hbase/mapreduce/TextSortReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TsvImporterMapper.java">org/apache/hadoop/hbase/mapreduce/TsvImporterMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.TsvImporterTextMapper.java">org/apache/hadoop/hbase/mapreduce/TsvImporterTextMapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.VisibilityExpressionResolver.java">org/apache/hadoop/hbase/mapreduce/VisibilityExpressionResolver.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.WALInputFormat.java">org/apache/hadoop/hbase/mapreduce/WALInputFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.WALPlayer.java">org/apache/hadoop/hbase/mapreduce/WALPlayer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication.java">org/apache/hadoop/hbase/mapreduce/replication/VerifyReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ActiveMasterManager.java">org/apache/hadoop/hbase/master/ActiveMasterManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.AssignCallable.java">org/apache/hadoop/hbase/master/AssignCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentListener.java">org/apache/hadoop/hbase/master/AssignmentListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentManager.java">org/apache/hadoop/hbase/master/AssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>180</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.AssignmentVerificationReport.java">org/apache/hadoop/hbase/master/AssignmentVerificationReport.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.BulkAssigner.java">org/apache/hadoop/hbase/master/BulkAssigner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.BulkReOpen.java">org/apache/hadoop/hbase/master/BulkReOpen.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.CatalogJanitor.java">org/apache/hadoop/hbase/master/CatalogJanitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterSchemaServiceImpl.java">org/apache/hadoop/hbase/master/ClusterSchemaServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ClusterStatusPublisher.java">org/apache/hadoop/hbase/master/ClusterStatusPublisher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.DeadServer.java">org/apache/hadoop/hbase/master/DeadServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ExpiredMobFileCleanerChore.java">org/apache/hadoop/hbase/master/ExpiredMobFileCleanerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.GeneralBulkAssigner.java">org/apache/hadoop/hbase/master/GeneralBulkAssigner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.HMaster.java">org/apache/hadoop/hbase/master/HMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>56</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.HMasterCommandLine.java">org/apache/hadoop/hbase/master/HMasterCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.LoadBalancer.java">org/apache/hadoop/hbase/master/LoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterCoprocessorHost.java">org/apache/hadoop/hbase/master/MasterCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterDumpServlet.java">org/apache/hadoop/hbase/master/MasterDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterFileSystem.java">org/apache/hadoop/hbase/master/MasterFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterRpcServices.java">org/apache/hadoop/hbase/master/MasterRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MasterServices.java">org/apache/hadoop/hbase/master/MasterServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>40</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MasterStatusServlet.java">org/apache/hadoop/hbase/master/MasterStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsAssignmentManager.java">org/apache/hadoop/hbase/master/MetricsAssignmentManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsAssignmentManagerSourceImpl.java">org/apache/hadoop/hbase/master/MetricsAssignmentManagerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMaster.java">org/apache/hadoop/hbase/master/MetricsMaster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterFilesystemSourceImpl.java">org/apache/hadoop/hbase/master/MetricsMasterFilesystemSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterProcSource.java">org/apache/hadoop/hbase/master/MetricsMasterProcSource.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterSourceImpl.java">org/apache/hadoop/hbase/master/MetricsMasterSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.MetricsMasterWrapperImpl.java">org/apache/hadoop/hbase/master/MetricsMasterWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RackManager.java">org/apache/hadoop/hbase/master/RackManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionPlacementMaintainer.java">org/apache/hadoop/hbase/master/RegionPlacementMaintainer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>235</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RegionPlan.java">org/apache/hadoop/hbase/master/RegionPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionState.java">org/apache/hadoop/hbase/master/RegionState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>96</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.RegionStateStore.java">org/apache/hadoop/hbase/master/RegionStateStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.RegionStates.java">org/apache/hadoop/hbase/master/RegionStates.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>21</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.ServerListener.java">org/apache/hadoop/hbase/master/ServerListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.ServerManager.java">org/apache/hadoop/hbase/master/ServerManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>34</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.SnapshotOfRegionAssignmentFromMeta.java">org/apache/hadoop/hbase/master/SnapshotOfRegionAssignmentFromMeta.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.SnapshotSentinel.java">org/apache/hadoop/hbase/master/SnapshotSentinel.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.SplitLogManager.java">org/apache/hadoop/hbase/master/SplitLogManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TableLockManager.java">org/apache/hadoop/hbase/master/TableLockManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.TableNamespaceManager.java">org/apache/hadoop/hbase/master/TableNamespaceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.TableStateManager.java">org/apache/hadoop/hbase/master/TableStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.UnAssignCallable.java">org/apache/hadoop/hbase/master/UnAssignCallable.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.BaseLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/BaseLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>82</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ClusterLoadState.java">org/apache/hadoop/hbase/master/balancer/ClusterLoadState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredNodeAssignmentHelper.java">org/apache/hadoop/hbase/master/balancer/FavoredNodeAssignmentHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredNodeLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/FavoredNodeLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.FavoredNodesPlan.java">org/apache/hadoop/hbase/master/balancer/FavoredNodesPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.LoadBalancerFactory.java">org/apache/hadoop/hbase/master/balancer/LoadBalancerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.MetricsBalancerSourceImpl.java">org/apache/hadoop/hbase/master/balancer/MetricsBalancerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.MetricsStochasticBalancerSourceImpl.java">org/apache/hadoop/hbase/master/balancer/MetricsStochasticBalancerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionInfoComparator.java">org/apache/hadoop/hbase/master/balancer/RegionInfoComparator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.RegionLocationFinder.java">org/apache/hadoop/hbase/master/balancer/RegionLocationFinder.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.ServerAndLoad.java">org/apache/hadoop/hbase/master/balancer/ServerAndLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.SimpleLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/SimpleLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.balancer.StochasticLoadBalancer.java">org/apache/hadoop/hbase/master/balancer/StochasticLoadBalancer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>35</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseFileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseFileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.BaseLogCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/BaseLogCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.CleanerChore.java">org/apache/hadoop/hbase/master/cleaner/CleanerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.FileCleanerDelegate.java">org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.HFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.HFileLinkCleaner.java">org/apache/hadoop/hbase/master/cleaner/HFileLinkCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.LogCleaner.java">org/apache/hadoop/hbase/master/cleaner/LogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveHFileCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.cleaner.TimeToLiveLogCleaner.java">org/apache/hadoop/hbase/master/cleaner/TimeToLiveLogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.handler.CreateTableHandler.java">org/apache/hadoop/hbase/master/handler/CreateTableHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.handler.DisableTableHandler.java">org/apache/hadoop/hbase/master/handler/DisableTableHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.handler.DispatchMergingRegionHandler.java">org/apache/hadoop/hbase/master/handler/DispatchMergingRegionHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.handler.EnableTableHandler.java">org/apache/hadoop/hbase/master/handler/EnableTableHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.handler.TableEventHandler.java">org/apache/hadoop/hbase/master/handler/TableEventHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.handler.TotesHRegionInfo.java">org/apache/hadoop/hbase/master/handler/TotesHRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.MergeNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/MergeNormalizationPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.RegionNormalizerChore.java">org/apache/hadoop/hbase/master/normalizer/RegionNormalizerChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.SimpleRegionNormalizer.java">org/apache/hadoop/hbase/master/normalizer/SimpleRegionNormalizer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.normalizer.SplitNormalizationPlan.java">org/apache/hadoop/hbase/master/normalizer/SplitNormalizationPlan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.AddColumnFamilyProcedure.java">org/apache/hadoop/hbase/master/procedure/AddColumnFamilyProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CreateNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>57</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.CreateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/CreateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteColumnFamilyProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteColumnFamilyProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>74</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>58</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DeleteTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DeleteTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.DisableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>66</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.EnableTableProcedure.java">org/apache/hadoop/hbase/master/procedure/EnableTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>86</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterDDLOperationHelper.java">org/apache/hadoop/hbase/master/procedure/MasterDDLOperationHelper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.MasterProcedureScheduler.java">org/apache/hadoop/hbase/master/procedure/MasterProcedureScheduler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyColumnFamilyProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyColumnFamilyProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>63</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyNamespaceProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyNamespaceProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>36</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ModifyTableProcedure.java">org/apache/hadoop/hbase/master/procedure/ModifyTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>94</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ProcedureSyncWait.java">org/apache/hadoop/hbase/master/procedure/ProcedureSyncWait.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>26</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.ServerCrashProcedure.java">org/apache/hadoop/hbase/master/procedure/ServerCrashProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>108</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.procedure.TruncateTableProcedure.java">org/apache/hadoop/hbase/master/procedure/TruncateTableProcedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.CloneSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/CloneSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.DisabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/DisabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.EnabledTableSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/EnabledTableSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.MasterSnapshotVerifier.java">org/apache/hadoop/hbase/master/snapshot/MasterSnapshotVerifier.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.RestoreSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/RestoreSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotFileCache.java">org/apache/hadoop/hbase/master/snapshot/SnapshotFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotHFileCleaner.java">org/apache/hadoop/hbase/master/snapshot/SnapshotHFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.SnapshotManager.java">org/apache/hadoop/hbase/master/snapshot/SnapshotManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.master.snapshot.TakeSnapshotHandler.java">org/apache/hadoop/hbase/master/snapshot/TakeSnapshotHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.metrics.BaseSourceImpl.java">org/apache/hadoop/hbase/metrics/BaseSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.CachedMobFile.java">org/apache/hadoop/hbase/mob/CachedMobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreCompactor.java">org/apache/hadoop/hbase/mob/DefaultMobStoreCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.DefaultMobStoreFlusher.java">org/apache/hadoop/hbase/mob/DefaultMobStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.ExpiredMobFileCleaner.java">org/apache/hadoop/hbase/mob/ExpiredMobFileCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFile.java">org/apache/hadoop/hbase/mob/MobFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.MobFileCache.java">org/apache/hadoop/hbase/mob/MobFileCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.MobUtils.java">org/apache/hadoop/hbase/mob/MobUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.MobCompactor.java">org/apache/hadoop/hbase/mob/compactions/MobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.compactions.PartitionedMobCompactor.java">org/apache/hadoop/hbase/mob/compactions/PartitionedMobCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.MemStoreWrapper.java">org/apache/hadoop/hbase/mob/mapreduce/MemStoreWrapper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.SweepJob.java">org/apache/hadoop/hbase/mob/mapreduce/SweepJob.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.SweepReducer.java">org/apache/hadoop/hbase/mob/mapreduce/SweepReducer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.mob.mapreduce.Sweeper.java">org/apache/hadoop/hbase/mob/mapreduce/Sweeper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.LogMonitoring.java">org/apache/hadoop/hbase/monitoring/LogMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MemoryBoundedLogMessageBuffer.java">org/apache/hadoop/hbase/monitoring/MemoryBoundedLogMessageBuffer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandler.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredRPCHandlerImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredRPCHandlerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.MonitoredTaskImpl.java">org/apache/hadoop/hbase/monitoring/MonitoredTaskImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.StateDumpServlet.java">org/apache/hadoop/hbase/monitoring/StateDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.monitoring.TaskMonitor.java">org/apache/hadoop/hbase/monitoring/TaskMonitor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.monitoring.ThreadMonitoring.java">org/apache/hadoop/hbase/monitoring/ThreadMonitoring.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceStateManager.java">org/apache/hadoop/hbase/namespace/NamespaceStateManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.namespace.NamespaceTableAndRegionInfo.java">org/apache/hadoop/hbase/namespace/NamespaceTableAndRegionInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.ByteBuff.java">org/apache/hadoop/hbase/nio/ByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.nio.MultiByteBuff.java">org/apache/hadoop/hbase/nio/MultiByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.nio.SingleByteBuff.java">org/apache/hadoop/hbase/nio/SingleByteBuff.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.MasterProcedureManager.java">org/apache/hadoop/hbase/procedure/MasterProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.Procedure.java">org/apache/hadoop/hbase/procedure/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinator.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinator.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureManagerHost.java">org/apache/hadoop/hbase/procedure/ProcedureManagerHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMember.java">org/apache/hadoop/hbase/procedure/ProcedureMember.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.RegionServerProcedureManager.java">org/apache/hadoop/hbase/procedure/RegionServerProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.Subprocedure.java">org/apache/hadoop/hbase/procedure/Subprocedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureCoordinatorRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureCoordinatorRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureMemberRpcs.java">org/apache/hadoop/hbase/procedure/ZKProcedureMemberRpcs.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.ZKProcedureUtil.java">org/apache/hadoop/hbase/procedure/ZKProcedureUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.MasterFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/MasterFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure.flush.RegionServerFlushTableProcedureManager.java">org/apache/hadoop/hbase/procedure/flush/RegionServerFlushTableProcedureManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.Procedure.java">org/apache/hadoop/hbase/procedure2/Procedure.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.ProcedureExecutor.java">org/apache/hadoop/hbase/procedure2/ProcedureExecutor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RemoteProcedureException.java">org/apache/hadoop/hbase/procedure2/RemoteProcedureException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.RootProcedureState.java">org/apache/hadoop/hbase/procedure2/RootProcedureState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.ProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/ProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFile.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormat.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormat.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.ProcedureWALFormatReader.java">org/apache/hadoop/hbase/procedure2/store/wal/ProcedureWALFormatReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.store.wal.WALProcedureStore.java">org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.StringUtils.java">org/apache/hadoop/hbase/procedure2/util/StringUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.procedure2.util.TimeoutBlockingQueue.java">org/apache/hadoop/hbase/procedure2/util/TimeoutBlockingQueue.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufMagic.java">org/apache/hadoop/hbase/protobuf/ProtobufMagic.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ProtobufUtil.java">org/apache/hadoop/hbase/protobuf/ProtobufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>188</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ReplicationProtbufUtil.java">org/apache/hadoop/hbase/protobuf/ReplicationProtbufUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.protobuf.RequestConverter.java">org/apache/hadoop/hbase/protobuf/RequestConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>239</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.protobuf.ResponseConverter.java">org/apache/hadoop/hbase/protobuf/ResponseConverter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.AverageIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/AverageIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.DefaultOperationQuota.java">org/apache/hadoop/hbase/quotas/DefaultOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.FixedIntervalRateLimiter.java">org/apache/hadoop/hbase/quotas/FixedIntervalRateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.MasterQuotaManager.java">org/apache/hadoop/hbase/quotas/MasterQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopOperationQuota.java">org/apache/hadoop/hbase/quotas/NoopOperationQuota.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.NoopQuotaLimiter.java">org/apache/hadoop/hbase/quotas/NoopQuotaLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaCache.java">org/apache/hadoop/hbase/quotas/QuotaCache.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaLimiterFactory.java">org/apache/hadoop/hbase/quotas/QuotaLimiterFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaRetriever.java">org/apache/hadoop/hbase/quotas/QuotaRetriever.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettings.java">org/apache/hadoop/hbase/quotas/QuotaSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaSettingsFactory.java">org/apache/hadoop/hbase/quotas/QuotaSettingsFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaTableUtil.java">org/apache/hadoop/hbase/quotas/QuotaTableUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.QuotaUtil.java">org/apache/hadoop/hbase/quotas/QuotaUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.RateLimiter.java">org/apache/hadoop/hbase/quotas/RateLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>18</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.RegionServerQuotaManager.java">org/apache/hadoop/hbase/quotas/RegionServerQuotaManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottleSettings.java">org/apache/hadoop/hbase/quotas/ThrottleSettings.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.ThrottlingException.java">org/apache/hadoop/hbase/quotas/ThrottlingException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.quotas.TimeBasedLimiter.java">org/apache/hadoop/hbase/quotas/TimeBasedLimiter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.quotas.UserQuotaState.java">org/apache/hadoop/hbase/quotas/UserQuotaState.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.AnnotationReadingPriorityFunction.java">org/apache/hadoop/hbase/regionserver/AnnotationReadingPriorityFunction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.BaseRowProcessor.java">org/apache/hadoop/hbase/regionserver/BaseRowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ColumnTracker.java">org/apache/hadoop/hbase/regionserver/ColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactSplitThread.java">org/apache/hadoop/hbase/regionserver/CompactSplitThread.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>14</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischargeHandler.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischargeHandler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactedHFilesDischarger.java">org/apache/hadoop/hbase/regionserver/CompactedHFilesDischarger.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionRequestor.java">org/apache/hadoop/hbase/regionserver/CompactionRequestor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.CompactionTool.java">org/apache/hadoop/hbase/regionserver/CompactionTool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ConstantSizeRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/ConstantSizeRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>38</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultMemStore.java">org/apache/hadoop/hbase/regionserver/DefaultMemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFileManager.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DefaultStoreFlusher.java">org/apache/hadoop/hbase/regionserver/DefaultStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DeleteTracker.java">org/apache/hadoop/hbase/regionserver/DeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.DisabledRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/DisabledRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ExplicitColumnTracker.java">org/apache/hadoop/hbase/regionserver/ExplicitColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FavoredNodesForRegion.java">org/apache/hadoop/hbase/regionserver/FavoredNodesForRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushPolicyFactory.java">org/apache/hadoop/hbase/regionserver/FlushPolicyFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequestListener.java">org/apache/hadoop/hbase/regionserver/FlushRequestListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.FlushRequester.java">org/apache/hadoop/hbase/regionserver/FlushRequester.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HMobStore.java">org/apache/hadoop/hbase/regionserver/HMobStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegion.java">org/apache/hadoop/hbase/regionserver/HRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>210</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>44</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServer.java">org/apache/hadoop/hbase/regionserver/HRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>93</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.java">org/apache/hadoop/hbase/regionserver/HRegionServerCommandLine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HStore.java">org/apache/hadoop/hbase/regionserver/HStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>42</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemStoreLAB.java">org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryManager.java">org/apache/hadoop/hbase/regionserver/HeapMemoryManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>17</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.HeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/HeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/IncreasingToUpperBoundRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScan.java">org/apache/hadoop/hbase/regionserver/InternalScan.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.InternalScanner.java">org/apache/hadoop/hbase/regionserver/InternalScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/KeyPrefixRegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueHeap.java">org/apache/hadoop/hbase/regionserver/KeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.KeyValueScanner.java">org/apache/hadoop/hbase/regionserver/KeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LeaseException.java">org/apache/hadoop/hbase/regionserver/LeaseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Leases.java">org/apache/hadoop/hbase/regionserver/Leases.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LogRoller.java">org/apache/hadoop/hbase/regionserver/LogRoller.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.LruHashMap.java">org/apache/hadoop/hbase/regionserver/LruHashMap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>69</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStore.java">org/apache/hadoop/hbase/regionserver/MemStore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreChunkPool.java">org/apache/hadoop/hbase/regionserver/MemStoreChunkPool.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreFlusher.java">org/apache/hadoop/hbase/regionserver/MemStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>24</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MemStoreLAB.java">org/apache/hadoop/hbase/regionserver/MemStoreLAB.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegion.java">org/apache/hadoop/hbase/regionserver/MetricsRegion.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServer.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactory.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceFactoryImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerSourceImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionServerWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionServerWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MetricsRegionWrapperImpl.java">org/apache/hadoop/hbase/regionserver/MetricsRegionWrapperImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress.java">org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiRowMutationProcessor.java">org/apache/hadoop/hbase/regionserver/MultiRowMutationProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.java">org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NoOpHeapMemoryTuner.java">org/apache/hadoop/hbase/regionserver/NoOpHeapMemoryTuner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.NonReversedNonLazyKeyValueScanner.java">org/apache/hadoop/hbase/regionserver/NonReversedNonLazyKeyValueScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OnlineRegions.java">org/apache/hadoop/hbase/regionserver/OnlineRegions.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.OperationStatus.java">org/apache/hadoop/hbase/regionserver/OperationStatus.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSDumpServlet.java">org/apache/hadoop/hbase/regionserver/RSDumpServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSRpcServices.java">org/apache/hadoop/hbase/regionserver/RSRpcServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>138</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RSStatusServlet.java">org/apache/hadoop/hbase/regionserver/RSStatusServlet.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Region.java">org/apache/hadoop/hbase/regionserver/Region.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>60</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>207</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionMergeRequest.java">org/apache/hadoop/hbase/regionserver/RegionMergeRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionMergeTransaction.java">org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionMergeTransactionImpl.java">org/apache/hadoop/hbase/regionserver/RegionMergeTransactionImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>16</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionScanner.java">org/apache/hadoop/hbase/regionserver/RegionScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/RegionServerCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionServerServices.java">org/apache/hadoop/hbase/regionserver/RegionServerServices.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RegionSplitPolicy.java">org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationService.java">org/apache/hadoop/hbase/regionserver/ReplicationService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReplicationSinkService.java">org/apache/hadoop/hbase/regionserver/ReplicationSinkService.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedKeyValueHeap.java">org/apache/hadoop/hbase/regionserver/ReversedKeyValueHeap.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedRegionScannerImpl.java">org/apache/hadoop/hbase/regionserver/ReversedRegionScannerImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ReversedStoreScanner.java">org/apache/hadoop/hbase/regionserver/ReversedStoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RowProcessor.java">org/apache/hadoop/hbase/regionserver/RowProcessor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.RpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/RpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanDeleteTracker.java">org/apache/hadoop/hbase/regionserver/ScanDeleteTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanInfo.java">org/apache/hadoop/hbase/regionserver/ScanInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanQueryMatcher.java">org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScanWildcardColumnTracker.java">org/apache/hadoop/hbase/regionserver/ScanWildcardColumnTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ScannerContext.java">org/apache/hadoop/hbase/regionserver/ScannerContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>12</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ServerNonceManager.java">org/apache/hadoop/hbase/regionserver/ServerNonceManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.ShutdownHook.java">org/apache/hadoop/hbase/regionserver/ShutdownHook.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>7</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SimpleRpcSchedulerFactory.java">org/apache/hadoop/hbase/regionserver/SimpleRpcSchedulerFactory.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitLogWorker.java">org/apache/hadoop/hbase/regionserver/SplitLogWorker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitRequest.java">org/apache/hadoop/hbase/regionserver/SplitRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitTransaction.java">org/apache/hadoop/hbase/regionserver/SplitTransaction.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>9</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.SplitTransactionImpl.java">org/apache/hadoop/hbase/regionserver/SplitTransactionImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>61</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.Store.java">org/apache/hadoop/hbase/regionserver/Store.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>22</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreEngine.java">org/apache/hadoop/hbase/regionserver/StoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFile.java">org/apache/hadoop/hbase/regionserver/StoreFile.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>53</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileInfo.java">org/apache/hadoop/hbase/regionserver/StoreFileInfo.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>23</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileManager.java">org/apache/hadoop/hbase/regionserver/StoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFileScanner.java">org/apache/hadoop/hbase/regionserver/StoreFileScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlushContext.java">org/apache/hadoop/hbase/regionserver/StoreFlushContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreFlusher.java">org/apache/hadoop/hbase/regionserver/StoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreScanner.java">org/apache/hadoop/hbase/regionserver/StoreScanner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>152</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StoreUtils.java">org/apache/hadoop/hbase/regionserver/StoreUtils.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StorefileRefresherChore.java">org/apache/hadoop/hbase/regionserver/StorefileRefresherChore.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeMultiFileWriter.java">org/apache/hadoop/hbase/regionserver/StripeMultiFileWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreConfig.java">org/apache/hadoop/hbase/regionserver/StripeStoreConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreEngine.java">org/apache/hadoop/hbase/regionserver/StripeStoreEngine.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFileManager.java">org/apache/hadoop/hbase/regionserver/StripeStoreFileManager.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.StripeStoreFlusher.java">org/apache/hadoop/hbase/regionserver/StripeStoreFlusher.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.TimeRangeTracker.java">org/apache/hadoop/hbase/regionserver/TimeRangeTracker.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.UnexpectedStateException.java">org/apache/hadoop/hbase/regionserver/UnexpectedStateException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionConfiguration.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionContext.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionProgress.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionProgress.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CompactionRequest.java">org/apache/hadoop/hbase/regionserver/compactions/CompactionRequest.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.Compactor.java">org/apache/hadoop/hbase/regionserver/compactions/Compactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>27</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.CurrentHourProvider.java">org/apache/hadoop/hbase/regionserver/compactions/CurrentHourProvider.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.DefaultCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/DefaultCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.ExploringCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/ExploringCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.OffPeakHours.java">org/apache/hadoop/hbase/regionserver/compactions/OffPeakHours.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.RatioBasedCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/RatioBasedCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>25</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactionPolicy.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactionPolicy.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>13</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.compactions.StripeCompactor.java">org/apache/hadoop/hbase/regionserver/compactions/StripeCompactor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td>

<TRUNCATED>

[44/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/book.html
----------------------------------------------------------------------
diff --git a/book.html b/book.html
index 4a56991..e612b86 100644
--- a/book.html
+++ b/book.html
@@ -70,7 +70,7 @@
 <li><a href="#versions">27. Versions</a></li>
 <li><a href="#dm.sort">28. Sort Order</a></li>
 <li><a href="#dm.column.metadata">29. Column Metadata</a></li>
-<li><a href="#_joins">30. Joins</a></li>
+<li><a href="#joins">30. Joins</a></li>
 <li><a href="#_acid">31. ACID</a></li>
 </ul>
 </li>
@@ -126,7 +126,7 @@
 <li><a href="#arch.catalog">63. Catalog Tables</a></li>
 <li><a href="#architecture.client">64. Client</a></li>
 <li><a href="#client.filter">65. Client Request Filters</a></li>
-<li><a href="#_master">66. Master</a></li>
+<li><a href="#architecture.master">66. Master</a></li>
 <li><a href="#regionserver.arch">67. RegionServer</a></li>
 <li><a href="#regions.arch">68. Regions</a></li>
 <li><a href="#arch.bulk.load">69. Bulk Loading</a></li>
@@ -227,7 +227,7 @@
 <li><a href="#tools">128. HBase Tools and Utilities</a></li>
 <li><a href="#ops.regionmgt">129. Region Management</a></li>
 <li><a href="#node.management">130. Node Management</a></li>
-<li><a href="#_hbase_metrics">131. HBase Metrics</a></li>
+<li><a href="#hbase_metrics">131. HBase Metrics</a></li>
 <li><a href="#ops.monitoring">132. HBase Monitoring</a></li>
 <li><a href="#_cluster_replication">133. Cluster Replication</a></li>
 <li><a href="#_running_multiple_workloads_on_a_single_cluster">134. Running Multiple Workloads On a Single Cluster</a></li>
@@ -254,7 +254,7 @@
 <li><a href="#unit.tests">Unit Testing HBase Applications</a>
 <ul class="sectlevel1">
 <li><a href="#_junit">149. JUnit</a></li>
-<li><a href="#_mockito">150. Mockito</a></li>
+<li><a href="#mockito">150. Mockito</a></li>
 <li><a href="#_mrunit">151. MRUnit</a></li>
 <li><a href="#_integration_testing_with_an_hbase_mini_cluster">152. Integration Testing with an HBase Mini-Cluster</a></li>
 </ul>
@@ -281,7 +281,7 @@
 <li><a href="#compression">Appendix E: Compression and Data Block Encoding In HBase</a></li>
 <li><a href="#data.block.encoding.enable">158. Enable Data Block Encoding</a></li>
 <li><a href="#sql">Appendix F: SQL over HBase</a></li>
-<li><a href="#_ycsb">Appendix G: YCSB</a></li>
+<li><a href="#ycsb">Appendix G: YCSB</a></li>
 <li><a href="#_hfile_format_2">Appendix H: HFile format</a></li>
 <li><a href="#other.info">Appendix I: Other Information About HBase</a></li>
 <li><a href="#hbase.history">Appendix J: HBase History</a></li>
@@ -361,7 +361,7 @@ Yours, the HBase Community.</p>
 <div class="paragraph">
 <p>To protect existing HBase installations from new vulnerabilities, please <strong>do not</strong> use JIRA to report security-related bugs. Instead, send your report to the mailing list <a href="mailto:private@apache.org">private@apache.org</a>, which allows anyone to send messages, but restricts who can read them. Someone on that list will contact you to follow up on your report.</p>
 </div>
-<div class="paragraph">
+<div id="hbase_supported_tested_definitions" class="paragraph">
 <div class="title">Support and Testing Expectations</div>
 <p>The phrases /supported/, /not supported/, /tested/, and /not tested/ occur several
 places throughout this guide. In the interest of clarity, here is a brief explanation
@@ -1299,7 +1299,7 @@ Still, you can test what happens when the primary Master or a RegionServer disap
 This chapter expands upon the <a href="#getting_started">Getting Started</a> chapter to further explain configuration of Apache HBase.
 Please read this chapter carefully, especially the <a href="#basic.prerequisites">Basic Prerequisites</a>
 to ensure that your HBase testing and deployment goes smoothly, and prevent data loss.
-Familiarize yourself with <a href="#hbase_supported_tested_definitions">[hbase_supported_tested_definitions]</a> as well.
+Familiarize yourself with <a href="#hbase_supported_tested_definitions">Support and Testing Expectations</a> as well.
 </div>
 </div>
 <div class="sect1">
@@ -1461,7 +1461,7 @@ In HBase 0.98.5 and newer, you must set <code>JAVA_HOME</code> on each node of y
 </tr>
 </table>
 </div>
-<div class="dlist">
+<div id="os" class="dlist">
 <div class="title">Operating System Utilities</div>
 <dl>
 <dt class="hdlist1">ssh</dt>
@@ -1481,6 +1481,10 @@ See <a href="#loopback.ip">Loopback IP</a> for more details.</p>
 <dd>
 <p>The clocks on cluster nodes should be synchronized. A small amount of variation is acceptable, but larger amounts of skew can cause erratic and unexpected behavior. Time synchronization is one of the first things to check if you see unexplained problems in your cluster. It is recommended that you run a Network Time Protocol (NTP) service, or another time-synchronization mechanism, on your cluster, and that all nodes look to the same service for time synchronization. See the <a href="http://www.tldp.org/LDP/sag/html/basic-ntp-config.html">Basic NTP Configuration</a> at <em class="citetitle">The Linux Documentation Project (TLDP)</em> to set up NTP.</p>
 </dd>
+</dl>
+</div>
+<div id="ulimit" class="dlist">
+<dl>
 <dt class="hdlist1">Limits on Number of Files and Processes (ulimit)</dt>
 <dd>
 <p>Apache HBase is a database. It requires the ability to open a large number of files at once. Many Linux distributions limit the number of files a single user is allowed to open to <code>1024</code> (or <code>256</code> on older versions of OS X). You can check this limit on your servers by running the command <code>ulimit -n</code> when logged in as the user which runs HBase. See <a href="#trouble.rs.runtime.filehandles">the Troubleshooting section</a> for some of the problems you may experience if the limit is too low. You may also notice errors such as the following:</p>
@@ -1942,7 +1946,7 @@ Zookeeper binds to a well known port so clients may talk to HBase.</p>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_distributed"><a class="anchor" href="#_distributed"></a>5.2. Distributed</h3>
+<h3 id="distributed"><a class="anchor" href="#distributed"></a>5.2. Distributed</h3>
 <div class="paragraph">
 <p>Distributed mode can be subdivided into distributed but all daemons run on a single node&#8201;&#8212;&#8201;a.k.a. <em>pseudo-distributed</em>&#8201;&#8212;&#8201;and <em>fully-distributed</em> where the daemons are spread across all nodes in the cluster.
 The <em>pseudo-distributed</em> vs. <em>fully-distributed</em> nomenclature comes from Hadoop.</p>
@@ -5335,7 +5339,7 @@ See the configuration <a href="#fail.fast.expired.active.master">fail.fast.expir
 </div>
 </div>
 <div class="sect2">
-<h3 id="_recommended_configurations"><a class="anchor" href="#_recommended_configurations"></a>9.2. Recommended Configurations</h3>
+<h3 id="recommended_configurations"><a class="anchor" href="#recommended_configurations"></a>9.2. Recommended Configurations</h3>
 <div class="sect3">
 <h4 id="recommended_configurations.zk"><a class="anchor" href="#recommended_configurations.zk"></a>9.2.1. ZooKeeper Configuration</h4>
 <div class="sect4">
@@ -5777,7 +5781,7 @@ It may be possible to skip across versions&#8201;&#8212;&#8201;for example go fr
 </table>
 </div>
 <div class="paragraph">
-<p>Review <a href="#configuration">Apache HBase Configuration</a>, in particular <a href="#hadoop"><a href="http://hadoop.apache.org">Hadoop</a></a>. Familiarize yourself with <a href="#hbase_supported_tested_definitions">[hbase_supported_tested_definitions]</a>.</p>
+<p>Review <a href="#configuration">Apache HBase Configuration</a>, in particular <a href="#hadoop"><a href="http://hadoop.apache.org">Hadoop</a></a>. Familiarize yourself with <a href="#hbase_supported_tested_definitions">Support and Testing Expectations</a>.</p>
 </div>
 </div>
 </div>
@@ -7755,7 +7759,7 @@ For more information about how HBase stores data internally, see <a href="#keyva
 </div>
 </div>
 <div class="sect1">
-<h2 id="_joins"><a class="anchor" href="#_joins"></a>30. Joins</h2>
+<h2 id="joins"><a class="anchor" href="#joins"></a>30. Joins</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Whether HBase supports joins is a common question on the dist-list, and there is a simple answer:  it doesn&#8217;t, at not least in the way that RDBMS' support them (e.g., with equi-joins or outer-joins in SQL).  As has been illustrated in this chapter, the read data model operations in HBase are Get and Scan.</p>
@@ -7861,7 +7865,7 @@ of this chapter to get more details after you have gone through this list.</p>
 <p>Aim to have regions sized between 10 and 50 GB.</p>
 </li>
 <li>
-<p>Aim to have cells no larger than 10 MB, or 50 MB if you use <a href="#mob">[mob]</a>. Otherwise,
+<p>Aim to have cells no larger than 10 MB, or 50 MB if you use <a href="#hbase_mob">mob</a>. Otherwise,
 consider storing your cell data in HDFS and store a pointer to the data in HBase.</p>
 </li>
 <li>
@@ -8082,7 +8086,7 @@ Whatever patterns are selected for ColumnFamilies, attributes, and rowkeys they
 <p>Try to keep the ColumnFamily names as small as possible, preferably one character (e.g. "d" for data/default).</p>
 </div>
 <div class="paragraph">
-<p>See <a href="#keyvalue">[keyvalue]</a> for more information on HBase stores data internally to see why this is important.</p>
+<p>See <a href="#keyvalue">KeyValue</a> for more information on HBase stores data internally to see why this is important.</p>
 </div>
 </div>
 <div class="sect3">
@@ -8329,7 +8333,7 @@ Take that into consideration when making your design, as well as block size for
 <h2 id="schema.joins"><a class="anchor" href="#schema.joins"></a>38. Joins</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>If you have multiple tables, don&#8217;t forget to factor in the potential for <a href="#joins">[joins]</a> into the schema design.</p>
+<p>If you have multiple tables, don&#8217;t forget to factor in the potential for <a href="#joins">Joins</a> into the schema design.</p>
 </div>
 </div>
 </div>
@@ -8590,7 +8594,7 @@ These would be generated with MapReduce jobs into another table.</p>
 <h3 id="secondary.indexes.coproc"><a class="anchor" href="#secondary.indexes.coproc"></a>41.5. Coprocessor Secondary Index</h3>
 <div class="paragraph">
 <p>Coprocessors act like RDBMS triggers. These were added in 0.92.
-For more information, see <a href="#coprocessors">coprocessors</a></p>
+For more information, see <a href="#cp">coprocessors</a></p>
 </div>
 </div>
 </div>
@@ -10809,7 +10813,7 @@ When copying keys, configuration files, or other files containing sensitive stri
 </tr>
 </table>
 </div>
-<div class="olist arabic">
+<div id="security.data.basic.server.side" class="olist arabic">
 <div class="title">Procedure: Basic Server-Side Configuration</div>
 <ol class="arabic">
 <li>
@@ -11095,7 +11099,7 @@ Groups are created and manipulated externally to HBase, via the Hadoop group map
 <div class="olist arabic">
 <ol class="arabic">
 <li>
-<p>As a prerequisite, perform the steps in <a href="#security.data.basic.server.side">[security.data.basic.server.side]</a>.</p>
+<p>As a prerequisite, perform the steps in <a href="#security.data.basic.server.side">Procedure: Basic Server-Side Configuration</a>.</p>
 </li>
 <li>
 <p>Install and configure the AccessController coprocessor, by setting the following properties in <em>hbase-site.xml</em>.
@@ -11528,7 +11532,7 @@ hbase&gt; user_permission JAVA_REGEX</pre>
 </div>
 </div>
 <div class="sect2">
-<h3 id="_visibility_labels"><a class="anchor" href="#_visibility_labels"></a>60.3. Visibility Labels</h3>
+<h3 id="hbase.visibility.labels"><a class="anchor" href="#hbase.visibility.labels"></a>60.3. Visibility Labels</h3>
 <div class="paragraph">
 <p>Visibility labels control can be used to only permit users or principals associated with a given label to read or access cells with that label.
 For instance, you might label a cell <code>top-secret</code>, and only grant access to that label to the <code>managers</code> group.
@@ -11645,7 +11649,7 @@ Visibility labels are not currently applied for superusers.
 <div class="olist arabic">
 <ol class="arabic">
 <li>
-<p>As a prerequisite, perform the steps in <a href="#security.data.basic.server.side">[security.data.basic.server.side]</a>.</p>
+<p>As a prerequisite, perform the steps in <a href="#security.data.basic.server.side">Procedure: Basic Server-Side Configuration</a>.</p>
 </li>
 <li>
 <p>Install and configure the VisibilityController coprocessor by setting the following properties in <em>hbase-site.xml</em>.
@@ -13085,7 +13089,7 @@ See <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/Firs
 </div>
 </div>
 <div class="sect1">
-<h2 id="_master"><a class="anchor" href="#_master"></a>66. Master</h2>
+<h2 id="architecture.master"><a class="anchor" href="#architecture.master"></a>66. Master</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p><code>HMaster</code> is the implementation of the Master Server.
@@ -13664,7 +13668,7 @@ If writing to the WAL fails, the entire operation to modify the data fails.</p>
 <div class="paragraph">
 <p>HBase uses an implementation of the <a href="http://hbase.apache.org/devapidocs/org/apache/hadoop/hbase/wal/WAL.html">WAL</a> interface.
 Usually, there is only one instance of a WAL per RegionServer.
-The RegionServer records Puts and Deletes to it, before recording them to the <a href="#store.memstore">MemStore</a> for the affected <a href="#store">[store]</a>.</p>
+The RegionServer records Puts and Deletes to it, before recording them to the <a href="#store.memstore">MemStore</a> for the affected <a href="#store">Store</a>.</p>
 </div>
 <div class="admonitionblock note">
 <table>
@@ -14621,7 +14625,7 @@ The <code>force</code> parameter overrides this behaviour and is for expert use
 </div>
 </div>
 <div class="sect2">
-<h3 id="_store"><a class="anchor" href="#_store"></a>68.7. Store</h3>
+<h3 id="store"><a class="anchor" href="#store"></a>68.7. Store</h3>
 <div class="paragraph">
 <p>A Store hosts a MemStore and 0 or more StoreFiles (HFiles). A Store corresponds to a column family for a table for a given region.</p>
 </div>
@@ -14714,7 +14718,7 @@ Also see <a href="#hfilev2">HBase file format with inline blocks (version 2)</a>
 </div>
 </div>
 <div class="sect4">
-<h5 id="_hfile_tool"><a class="anchor" href="#_hfile_tool"></a>HFile Tool</h5>
+<h5 id="hfile_tool"><a class="anchor" href="#hfile_tool"></a>HFile Tool</h5>
 <div class="paragraph">
 <p>To view a textualized version of HFile content, you can use the <code>org.apache.hadoop.hbase.io.hfile.HFile</code> tool.
 Type the following to see usage:</p>
@@ -14759,7 +14763,7 @@ For more information on compression, see <a href="#compression">Compression and
 </div>
 </div>
 <div class="sect3">
-<h4 id="_keyvalue"><a class="anchor" href="#_keyvalue"></a>68.7.6. KeyValue</h4>
+<h4 id="keyvalue"><a class="anchor" href="#keyvalue"></a>68.7.6. KeyValue</h4>
 <div class="paragraph">
 <p>The KeyValue class is the heart of data storage in HBase.
 KeyValue wraps a byte array and takes offsets and lengths into the passed array which specify where to start interpreting the content as KeyValue.</p>
@@ -14926,15 +14930,15 @@ Minor and major compactions differ in the following ways.</p>
 <div class="paragraph">
 <p><em>Minor compactions</em> usually select a small number of small, adjacent StoreFiles and rewrite them as a single StoreFile.
 Minor compactions do not drop (filter out) deletes or expired versions, because of potential side effects.
-See <a href="#compaction.and.deletes">[compaction.and.deletes]</a> and <a href="#compaction.and.versions">[compaction.and.versions]</a> for information on how deletes and versions are handled in relation to compactions.
+See <a href="#compaction.and.deletes">Compaction and Deletions</a> and <a href="#compaction.and.versions">Compaction and Versions</a> for information on how deletes and versions are handled in relation to compactions.
 The end result of a minor compaction is fewer, larger StoreFiles for a given Store.</p>
 </div>
 <div class="paragraph">
 <p>The end result of a <em>major compaction</em> is a single StoreFile per Store.
 Major compactions also process delete markers and max versions.
-See <a href="#compaction.and.deletes">[compaction.and.deletes]</a> and <a href="#compaction.and.versions">[compaction.and.versions]</a> for information on how deletes and versions are handled in relation to compactions.</p>
+See <a href="#compaction.and.deletes">Compaction and Deletions</a> and <a href="#compaction.and.versions">Compaction and Versions</a> for information on how deletes and versions are handled in relation to compactions.</p>
 </div>
-<div class="paragraph">
+<div id="compaction.and.deletes" class="paragraph">
 <div class="title">Compaction and Deletions</div>
 <p>When an explicit deletion occurs in HBase, the data is not actually deleted.
 Instead, a <em>tombstone</em> marker is written.
@@ -14943,7 +14947,7 @@ During a major compaction, the data is actually deleted, and the tombstone marke
 If the deletion happens because of an expired TTL, no tombstone is created.
 Instead, the expired data is filtered out and is not written back to the compacted StoreFile.</p>
 </div>
-<div class="paragraph">
+<div id="compaction.and.versions" class="paragraph">
 <div class="title">Compaction and Versions</div>
 <p>When you create a Column Family, you can specify the maximum number of versions to keep, by specifying <code>HColumnDescriptor.setMaxVersions(int versions)</code>.
 The default value is <code>3</code>.
@@ -15252,7 +15256,7 @@ producing four StoreFiles.</p>
 you are balancing write costs with read costs. Raising the value (to something like
 1.4) will have more write costs, because you will compact larger StoreFiles.
 However, during reads, HBase will need to seek through fewer StoreFiles to
-accomplish the read. Consider this approach if you cannot take advantage of <a href="#bloom">[bloom]</a>.</p>
+accomplish the read. Consider this approach if you cannot take advantage of <a href="#blooms">Bloom Filters</a>.</p>
 </li>
 <li>
 <p>Alternatively, you can lower this value to something like 1.0 to reduce the
@@ -15560,7 +15564,7 @@ Candidate because previous file was selected and 1 is less than the min-size, bu
 </td>
 <td class="content">
 <div class="title">Impact of Key Configuration Options</div>
-This information is now included in the configuration parameter table in <a href="#compaction.configuration.parameters">[compaction.configuration.parameters]</a>.
+This information is now included in the configuration parameter table in <a href="#compaction.parameters">Parameters Used by Compaction Algorithm</a>.
 </td>
 </tr>
 </table>
@@ -15756,7 +15760,7 @@ When at least <code>hbase.store.stripe.compaction.minFilesL0</code> such files (
 </div>
 <div id="ops.stripe.config.compact" class="paragraph">
 <div class="title">Normal Compaction Configuration and Stripe Compaction</div>
-<p>All the settings that apply to normal compactions (see <a href="#compaction.configuration.parameters">[compaction.configuration.parameters]</a>) apply to stripe compactions.
+<p>All the settings that apply to normal compactions (see <a href="#compaction.parameters">Parameters Used by Compaction Algorithm</a>) apply to stripe compactions.
 The exceptions are the minimum and maximum number of files, which are set to higher values by default because the files in stripes are smaller.
 To control these for stripe compactions, use <code>hbase.store.stripe.compaction.minFiles</code> and <code>hbase.store.stripe.compaction.maxFiles</code>, rather than <code>hbase.hstore.compaction.min</code> and <code>hbase.hstore.compaction.max</code>.</p>
 </div>
@@ -15842,7 +15846,7 @@ If the target table does not already exist in HBase, this tool will create the t
 <div class="sect2">
 <h3 id="arch.bulk.load.also"><a class="anchor" href="#arch.bulk.load.also"></a>69.4. See Also</h3>
 <div class="paragraph">
-<p>For more information about the referenced utilities, see <a href="#importtsv">[importtsv]</a> and  <a href="#completebulkload">[completebulkload]</a>.</p>
+<p>For more information about the referenced utilities, see <a href="#importtsv">ImportTsv</a> and  <a href="#completebulkload">CompleteBulkLoad</a>.</p>
 </div>
 <div class="paragraph">
 <p>See <a href="http://blog.cloudera.com/blog/2013/09/how-to-use-hbase-bulk-loading-and-why/">How-to: Use HBase Bulk Loading, and Why</a> for a recent blog on current state of bulk loading.</p>
@@ -19093,7 +19097,7 @@ dependencies.</p>
 </table>
 </div>
 <div class="sect3">
-<h4 id="_using_hbase_shell"><a class="anchor" href="#_using_hbase_shell"></a>87.3.1. Using HBase Shell</h4>
+<h4 id="load_coprocessor_in_shell"><a class="anchor" href="#load_coprocessor_in_shell"></a>87.3.1. Using HBase Shell</h4>
 <div class="olist arabic">
 <ol class="arabic">
 <li>
@@ -19236,7 +19240,7 @@ verifies whether the given class is actually contained in the jar file.
 <div class="sect2">
 <h3 id="_dynamic_unloading"><a class="anchor" href="#_dynamic_unloading"></a>87.4. Dynamic Unloading</h3>
 <div class="sect3">
-<h4 id="_using_hbase_shell_2"><a class="anchor" href="#_using_hbase_shell_2"></a>87.4.1. Using HBase Shell</h4>
+<h4 id="_using_hbase_shell"><a class="anchor" href="#_using_hbase_shell"></a>87.4.1. Using HBase Shell</h4>
 <div class="olist arabic">
 <ol class="arabic">
 <li>
@@ -19689,7 +19693,7 @@ logging.</p>
 <dt class="hdlist1">Coprocessor Configuration</dt>
 <dd>
 <p>If you do not want to load coprocessors from the HBase Shell, you can add their configuration
-properties to <code>hbase-site.xml</code>. In <a href="#load_coprocessor_in_shell">[load_coprocessor_in_shell]</a>, two arguments are
+properties to <code>hbase-site.xml</code>. In <a href="#load_coprocessor_in_shell">Using HBase Shell</a>, two arguments are
 set: <code>arg1=1,arg2=2</code>. These could have been added to <code>hbase-site.xml</code> as follows:</p>
 </dd>
 </dl>
@@ -19750,7 +19754,7 @@ ResultScanner scanner = table.getScanner(scan);
 <div class="paragraph">
 <p>HBase 0.98.5 introduced the ability to monitor some statistics relating to the amount of time
 spent executing a given Coprocessor.
-You can see these statistics via the HBase Metrics framework (see <a href="#hbase_metrics">[hbase_metrics]</a> or the Web UI
+You can see these statistics via the HBase Metrics framework (see <a href="#hbase_metrics">HBase Metrics</a> or the Web UI
 for a given Region Server, via the <em>Coprocessor Metrics</em> tab.
 These statistics are valuable for debugging and benchmarking the performance impact of a given
 Coprocessor on your cluster.
@@ -19758,7 +19762,7 @@ Tracked statistics include min, max, average, and 90th, 95th, and 99th percentil
 All times are shown in milliseconds.
 The statistics are calculated over Coprocessor execution samples recorded during the reporting
 interval, which is 10 seconds by default.
-The metrics sampling rate as described in <a href="#hbase_metrics">[hbase_metrics]</a>.</p>
+The metrics sampling rate as described in <a href="#hbase_metrics">HBase Metrics</a>.</p>
 </div>
 <div class="imageblock">
 <div class="content">
@@ -19951,7 +19955,7 @@ See <a href="#block.cache">Block Cache</a></p>
 <h2 id="perf.configurations"><a class="anchor" href="#perf.configurations"></a>94. HBase Configurations</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>See <a href="#recommended_configurations">[recommended_configurations]</a>.</p>
+<p>See <a href="#recommended_configurations">Recommended Configurations</a>.</p>
 </div>
 <div class="sect2">
 <h3 id="perf.compactions.and.splits"><a class="anchor" href="#perf.compactions.and.splits"></a>94.1. Managing Compactions</h3>
@@ -20031,7 +20035,7 @@ This memory setting is often adjusted for the RegionServer process depending on
 <div class="sect2">
 <h3 id="perf.hstore.blockingstorefiles"><a class="anchor" href="#perf.hstore.blockingstorefiles"></a>94.7. <code>hbase.hstore.blockingStoreFiles</code></h3>
 <div class="paragraph">
-<p>See <a href="#hbase.hstore.blockingstorefiles">[hbase.hstore.blockingstorefiles]</a>.
+<p>See <a href="#hbase.hstore.blockingStoreFiles">[hbase.hstore.blockingStoreFiles]</a>.
 If there is blocking in the RegionServer logs, increasing this can help.</p>
 </div>
 </div>
@@ -20318,7 +20322,7 @@ Larger cell values require larger blocksizes.
 There is an inverse relationship between blocksize and the resulting StoreFile indexes (i.e., if the blocksize is doubled then the resulting indexes should be roughly halved).</p>
 </div>
 <div class="paragraph">
-<p>See <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> and <a href="#store">[store]</a>for more information.</p>
+<p>See <a href="http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/HColumnDescriptor.html">HColumnDescriptor</a> and <a href="#store">Store</a>for more information.</p>
 </div>
 </div>
 <div class="sect2">
@@ -20346,7 +20350,7 @@ When it&#8217;s in-memory (e.g., in the MemStore) or on the wire (e.g., transfer
 So while using ColumnFamily compression is a best practice, but it&#8217;s not going to completely eliminate the impact of over-sized Keys, over-sized ColumnFamily names, or over-sized Column names.</p>
 </div>
 <div class="paragraph">
-<p>See <a href="#keysize">Try to minimize row and column sizes</a> on for schema design tips, and <a href="#keyvalue">[keyvalue]</a> for more information on HBase stores data internally.</p>
+<p>See <a href="#keysize">Try to minimize row and column sizes</a> on for schema design tips, and <a href="#keyvalue">KeyValue</a> for more information on HBase stores data internally.</p>
 </div>
 </div>
 </div>
@@ -20738,7 +20742,7 @@ If this is set to 0 (the default), hedged reads are disabled.</p>
 </div>
 <div class="paragraph">
 <p>Use the following metrics to tune the settings for hedged reads on your cluster.
-See <a href="#hbase_metrics">[hbase_metrics]</a>  for more information.</p>
+See <a href="#hbase_metrics">HBase Metrics</a>  for more information.</p>
 </div>
 <div class="ulist">
 <div class="title">Metrics for Hedged Reads</div>
@@ -20900,7 +20904,7 @@ For example, short latency-sensitive disk reads will have to wait in line behind
 MR jobs that write to HBase will also generate flushes and compactions, which will in turn invalidate blocks in the <a href="#block.cache">Block Cache</a>.</p>
 </div>
 <div class="paragraph">
-<p>If you need to process the data from your live HBase cluster in MR, you can ship the deltas with <a href="#copy.table">[copy.table]</a> or use replication to get the new data in real time on the OLAP cluster.
+<p>If you need to process the data from your live HBase cluster in MR, you can ship the deltas with <a href="#copy.table">CopyTable</a> or use replication to get the new data in real time on the OLAP cluster.
 In the worst case, if you really need to collocate both, set MR to use less Map and Reduce slots than you&#8217;d normally configure, possibly just one.</p>
 </div>
 <div class="paragraph">
@@ -21196,7 +21200,7 @@ A quality question that includes all context and exhibits evidence the author ha
 <p>The RegionServer web UI lists online regions and their start/end keys, as well as point-in-time RegionServer metrics (requests, regions, storeFileIndexSize, compactionQueueSize, etc.).</p>
 </div>
 <div class="paragraph">
-<p>See <a href="#hbase_metrics">[hbase_metrics]</a> for more information in metric definitions.</p>
+<p>See <a href="#hbase_metrics">HBase Metrics</a> for more information in metric definitions.</p>
 </div>
 </div>
 <div class="sect3">
@@ -21536,7 +21540,7 @@ You can also tail all the logs at the same time, edit files, etc.</p>
 <h2 id="trouble.client"><a class="anchor" href="#trouble.client"></a>109. Client</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>For more information on the HBase client, see <a href="#client">client</a>.</p>
+<p>For more information on the HBase client, see <a href="#architecture.client">client</a>.</p>
 </div>
 <div class="sect2">
 <h3 id="_missed_scan_results_due_to_mismatch_of_code_hbase_client_scanner_max_result_size_code_between_client_and_server"><a class="anchor" href="#_missed_scan_results_due_to_mismatch_of_code_hbase_client_scanner_max_result_size_code_between_client_and_server"></a>109.1. Missed Scan Results Due To Mismatch Of <code>hbase.client.scanner.max.result.size</code> Between Client and Server</h3>
@@ -22207,7 +22211,7 @@ to use. Was=myhost-1234, Now=ip-10-55-88-99.ec2.internal</pre>
 <h2 id="trouble.master"><a class="anchor" href="#trouble.master"></a>114. Master</h2>
 <div class="sectionbody">
 <div class="paragraph">
-<p>For more information on the Master, see <a href="#master">master</a>.</p>
+<p>For more information on the Master, see <a href="#architecture.master">master</a>.</p>
 </div>
 <div class="sect2">
 <h3 id="trouble.master.startup"><a class="anchor" href="#trouble.master.startup"></a>114.1. Startup Errors</h3>
@@ -23309,7 +23313,7 @@ If inconsistencies, run <code>hbck</code> a few times because the inconsistency
 <div class="sect2">
 <h3 id="hfile_tool2"><a class="anchor" href="#hfile_tool2"></a>128.5. HFile Tool</h3>
 <div class="paragraph">
-<p>See <a href="#hfile_tool">[hfile_tool]</a>.</p>
+<p>See <a href="#hfile_tool">HFile Tool</a>.</p>
 </div>
 </div>
 <div class="sect2">
@@ -23382,7 +23386,7 @@ In those versions, you can print the contents of a WAL using the same configurat
 </div>
 </div>
 <div class="sect2">
-<h3 id="_copytable"><a class="anchor" href="#_copytable"></a>128.8. CopyTable</h3>
+<h3 id="copy.table"><a class="anchor" href="#copy.table"></a>128.8. CopyTable</h3>
 <div class="paragraph">
 <p>CopyTable is a utility that can copy part or of all of a table, either to the same cluster or another cluster.
 The target table must first exist.
@@ -23464,7 +23468,7 @@ For performance consider the following general options:
 </div>
 </div>
 <div class="sect2">
-<h3 id="_export"><a class="anchor" href="#_export"></a>128.9. Export</h3>
+<h3 id="export"><a class="anchor" href="#export"></a>128.9. Export</h3>
 <div class="paragraph">
 <p>Export is a utility that will dump the contents of table to HDFS in a sequence file.
 Invoke via:</p>
@@ -23495,7 +23499,7 @@ specifying column families and applying filters during the export.
 </div>
 </div>
 <div class="sect2">
-<h3 id="_import"><a class="anchor" href="#_import"></a>128.10. Import</h3>
+<h3 id="import"><a class="anchor" href="#import"></a>128.10. Import</h3>
 <div class="paragraph">
 <p>Import is a utility that will load data that has been exported back into HBase.
 Invoke via:</p>
@@ -23527,7 +23531,7 @@ To see usage instructions, run the command with no options.
 </div>
 </div>
 <div class="sect2">
-<h3 id="_importtsv"><a class="anchor" href="#_importtsv"></a>128.11. ImportTsv</h3>
+<h3 id="importtsv"><a class="anchor" href="#importtsv"></a>128.11. ImportTsv</h3>
 <div class="paragraph">
 <p>ImportTsv is a utility that will load data in TSV format into HBase.
 It has two distinct usages: loading data from TSV format in HDFS into HBase via Puts, and preparing StoreFiles to be loaded via the <code>completebulkload</code>.</p>
@@ -23632,7 +23636,7 @@ The second and third columns in the file will be imported as "d:c1" and "d:c2",
 </div>
 </div>
 <div class="sect2">
-<h3 id="_completebulkload"><a class="anchor" href="#_completebulkload"></a>128.12. CompleteBulkLoad</h3>
+<h3 id="completebulkload"><a class="anchor" href="#completebulkload"></a>128.12. CompleteBulkLoad</h3>
 <div class="paragraph">
 <p>The <code>completebulkload</code> utility will move generated StoreFiles into an HBase table.
 This utility is often used in conjunction with output from <a href="#importtsv">importtsv</a>.</p>
@@ -23976,7 +23980,7 @@ It will verify the region deployed in the new location before it will moves the
 At this point, the <em>graceful_stop.sh</em> tells the RegionServer <code>stop</code>.
 The master will at this point notice the RegionServer gone but all regions will have already been redeployed and because the RegionServer went down cleanly, there will be no WAL logs to split.</p>
 </div>
-<div class="admonitionblock note">
+<div id="lb" class="admonitionblock note">
 <table>
 <tr>
 <td class="icon">
@@ -24222,7 +24226,7 @@ In this case, or if you are in a OLAP environment and require having locality, t
 </div>
 </div>
 <div class="sect1">
-<h2 id="_hbase_metrics"><a class="anchor" href="#_hbase_metrics"></a>131. HBase Metrics</h2>
+<h2 id="hbase_metrics"><a class="anchor" href="#hbase_metrics"></a>131. HBase Metrics</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>HBase emits metrics which adhere to the <a href="http://hadoop.apache.org/core/docs/current/api/org/apache/hadoop/metrics/package-summary.html">Hadoop metrics</a> API.
@@ -24964,7 +24968,7 @@ The following configuration settings are recommended for maintaining an even dis
 </li>
 </ul>
 </div>
-<div class="paragraph">
+<div id="cluster.replication.preserving.tags" class="paragraph">
 <div class="title">Preserving Tags During Replication</div>
 <p>By default, the codec used for replication between clusters strips tags, such as cell-level ACLs, from cells.
 To prevent the tags from being stripped, you can use a different codec which does not strip them.
@@ -25270,7 +25274,7 @@ The new layout will be:</p>
 <p>HBase provides the following mechanisms for managing the performance of a cluster
 handling multiple workloads:
 . <a href="#quota">Quotas</a>
-. <a href="#request-queues">[request-queues]</a>
+. <a href="#request_queues">Request Queues</a>
 . <a href="#multiple-typed-queues">Multiple-Typed Queues</a></p>
 </div>
 <div class="sect2">
@@ -25285,7 +25289,7 @@ the following limits:</p>
 <p><a href="#request-quotas">The number or size of requests(read, write, or read+write) in a given timeframe</a></p>
 </li>
 <li>
-<p><a href="#namespace-quotas">The number of tables allowed in a namespace</a></p>
+<p><a href="#namespace_quotas">The number of tables allowed in a namespace</a></p>
 </li>
 </ol>
 </div>
@@ -25547,7 +25551,7 @@ See the HBase page on <a href="http://hbase.apache.org/book.html#replication">re
 <div class="sect2">
 <h3 id="ops.backup.live.copytable"><a class="anchor" href="#ops.backup.live.copytable"></a>135.3. Live Cluster Backup - CopyTable</h3>
 <div class="paragraph">
-<p>The <a href="#copytable">copytable</a> utility could either be used to copy data from one table to another on the same cluster, or to copy data to another table on another cluster.</p>
+<p>The <a href="#copy.table">copytable</a> utility could either be used to copy data from one table to another on the same cluster, or to copy data to another table on another cluster.</p>
 </div>
 <div class="paragraph">
 <p>Since the cluster is up, there is a risk that edits could be missed in the copy process.</p>
@@ -25948,7 +25952,7 @@ See <a href="#compaction">compaction</a> for some details.</p>
 <div class="paragraph">
 <p>When provisioning for large data sizes, however, it&#8217;s good to keep in mind that compactions can affect write throughput.
 Thus, for write-intensive workloads, you may opt for less frequent compactions and more store files per regions.
-Minimum number of files for compactions (<code>hbase.hstore.compaction.min</code>) can be set to higher value; <a href="#hbase.hstore.blockingstorefiles">hbase.hstore.blockingStoreFiles</a> should also be increased, as more files might accumulate in such case.
+Minimum number of files for compactions (<code>hbase.hstore.compaction.min</code>) can be set to higher value; <a href="#hbase.hstore.blockingStoreFiles">hbase.hstore.blockingStoreFiles</a> should also be increased, as more files might accumulate in such case.
 You may also consider manually managing compactions: <a href="#managed.compactions">managed.compactions</a></p>
 </div>
 </div>
@@ -26112,7 +26116,7 @@ See <a href="http://hbase.apache.org/source-repository.html">Source Code
 <h2 id="_ides"><a class="anchor" href="#_ides"></a>141. IDEs</h2>
 <div class="sectionbody">
 <div class="sect2">
-<h3 id="_eclipse"><a class="anchor" href="#_eclipse"></a>141.1. Eclipse</h3>
+<h3 id="eclipse"><a class="anchor" href="#eclipse"></a>141.1. Eclipse</h3>
 <div class="sect3">
 <h4 id="eclipse.code.formatting"><a class="anchor" href="#eclipse.code.formatting"></a>141.1.1. Code Formatting</h4>
 <div class="paragraph">
@@ -28313,7 +28317,7 @@ However, at times it is easier to refer to different version of a patch if you a
 </li>
 </ul>
 </div>
-<div class="dlist">
+<div id="patching.methods" class="dlist">
 <div class="title">Methods to Create Patches</div>
 <dl>
 <dt class="hdlist1">Eclipse</dt>
@@ -28366,7 +28370,7 @@ See <a href="#hbase.tests">hbase.tests</a> for more on how the annotations work.
 </div>
 </div>
 <div class="sect3">
-<h4 id="_reviewboard"><a class="anchor" href="#_reviewboard"></a>148.8.4. ReviewBoard</h4>
+<h4 id="reviewboard"><a class="anchor" href="#reviewboard"></a>148.8.4. ReviewBoard</h4>
 <div class="paragraph">
 <p>Patches larger than one screen, or patches that will be tricky to review, should go through <a href="http://reviews.apache.org">ReviewBoard</a>.</p>
 </div>
@@ -28783,7 +28787,7 @@ For an introduction to JUnit, see <a href="https://github.com/junit-team/junit/w
 </div>
 </div>
 <div class="sect1">
-<h2 id="_mockito"><a class="anchor" href="#_mockito"></a>150. Mockito</h2>
+<h2 id="mockito"><a class="anchor" href="#mockito"></a>150. Mockito</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p>Mockito is a mocking framework.
@@ -29161,7 +29165,7 @@ In the example below we have ZooKeeper persist to <em>/user/local/zookeeper</em>
 <div class="paragraph">
 <p>The newer version, the better.
 For example, some folks have been bitten by <a href="https://issues.apache.org/jira/browse/ZOOKEEPER-1277">ZOOKEEPER-1277</a>.
-If running zookeeper 3.5+, you can ask hbase to make use of the new multi operation by enabling <a href="#hbase.zookeeper.usemulti">hbase.zookeeper.useMulti</a>" in your <em>hbase-site.xml</em>.</p>
+If running zookeeper 3.5+, you can ask hbase to make use of the new multi operation by enabling <a href="#hbase.zookeeper.useMulti">hbase.zookeeper.useMulti</a>" in your <em>hbase-site.xml</em>.</p>
 </div>
 </td>
 </tr>
@@ -29739,7 +29743,7 @@ the issue there. When you have developed a potential fix, submit it for review.
 If it addresses the issue and is seen as an improvement, one of the HBase committers
 will commit it to one or more branches, as appropriate.</p>
 </div>
-<div class="paragraph">
+<div id="submit_doc_patch_procedure" class="paragraph">
 <div class="title">Procedure: Suggested Work flow for Submitting Patches</div>
 <p>This procedure goes into more detail than Git pros will need, but is included
 in this appendix so that people unfamiliar with Git can feel confident contributing
@@ -30514,7 +30518,7 @@ Reference Guide are <code>java</code>, <code>xml</code>, <code>sql</code>, and <
 </dd>
 <dt class="hdlist1">What APIs does HBase support?</dt>
 <dd>
-<p>See <a href="#datamodel">Data Model</a>, <a href="#architecture.client">Client</a>, and <a href="#nonjava.jvm">[nonjava.jvm]</a>.</p>
+<p>See <a href="#datamodel">Data Model</a>, <a href="#architecture.client">Client</a>, and <a href="#external_apis">Apache HBase External APIs</a>.</p>
 </dd>
 </dl>
 </div>
@@ -31499,7 +31503,7 @@ For more details about Prefix Tree encoding, see <a href="https://issues.apache.
 </dl>
 </div>
 <div class="sect2">
-<h3 id="_which_compressor_or_data_block_encoder_to_use"><a class="anchor" href="#_which_compressor_or_data_block_encoder_to_use"></a>E.1. Which Compressor or Data Block Encoder To Use</h3>
+<h3 id="data.block.encoding.types"><a class="anchor" href="#data.block.encoding.types"></a>E.1. Which Compressor or Data Block Encoder To Use</h3>
 <div class="paragraph">
 <p>The compression or codec type to use depends on the characteristics of your data. Choosing the wrong type could cause your data to take more space rather than less, and can have performance implications.</p>
 </div>
@@ -31702,7 +31706,7 @@ See <a href="#hbase.regionserver.codecs">hbase.regionserver.codecs</a>.</p>
 <div class="title">Configure LZ4 Support</div>
 <p>LZ4 support is bundled with Hadoop.
 Make sure the hadoop shared library (libhadoop.so) is accessible when you start HBase.
-After configuring your platform (see <a href="#hbase.native.platform">hbase.native.platform</a>), you can make a symbolic link from HBase to the native Hadoop libraries.
+After configuring your platform (see <a href="#hadoop.native.lib">hadoop.native.lib</a>), you can make a symbolic link from HBase to the native Hadoop libraries.
 This assumes the two software installs are colocated.
 For example, if my 'platform' is Linux-amd64-64:</p>
 </div>
@@ -31969,7 +31973,7 @@ DESCRIPTION                                          ENABLED
 </div>
 </div>
 <div class="sect1">
-<h2 id="_ycsb"><a class="anchor" href="#_ycsb"></a>Appendix G: YCSB</h2>
+<h2 id="ycsb"><a class="anchor" href="#ycsb"></a>Appendix G: YCSB</h2>
 <div class="sectionbody">
 <div class="paragraph">
 <p><a href="https://github.com/brianfrankcooper/YCSB/">YCSB: The
@@ -33185,7 +33189,7 @@ The server will return cellblocks compressed using this same compressor as long
 <div id="footer">
 <div id="footer-text">
 Version 2.0.0-SNAPSHOT<br>
-Last updated 2016-02-22 15:06:54 UTC
+Last updated 2016-02-23 14:53:43 UTC
 </div>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/bulk-loads.html
----------------------------------------------------------------------
diff --git a/bulk-loads.html b/bulk-loads.html
index b0b4013..04b9614 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Bulk Loads in Apache HBase (TM)
@@ -305,7 +305,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 


[11/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
index 6c2b2de..68b00ca 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
@@ -35,648 +35,641 @@
 <span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
 <span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>import javax.naming.NamingException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HConstants;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.TableName;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.HTable;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Result;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Table;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.RegionSizeCalculator;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.mapreduce.InputFormat;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.mapreduce.JobContext;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.mapreduce.RecordReader;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.net.DNS;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.util.StringUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>/**<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * A base for {@link TableInputFormat}s. Receives a {@link Connection}, a {@link TableName},<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * an {@link Scan} instance that defines the input columns etc. Subclasses may use<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * other TableRecordReader implementations.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * Subclasses MUST ensure initializeTable(Connection, TableName) is called for an instance to<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * function properly. Each of the entry points to this class used by the MapReduce framework,<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * {@link #createRecordReader(InputSplit, TaskAttemptContext)} and {@link #getSplits(JobContext)},<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * will call {@link #initialize(JobContext)} as a convenient centralized location to handle<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * retrieving the necessary configuration information. If your subclass overrides either of these<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * methods, either call the parent version or call initialize yourself.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * An example of a subclass:<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * &lt;pre&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *   class ExampleTIF extends TableInputFormatBase {<a name="line.76"></a>
-<span class="sourceLineNo">077</span> *<a name="line.77"></a>
-<span class="sourceLineNo">078</span> *     {@literal @}Override<a name="line.78"></a>
-<span class="sourceLineNo">079</span> *     protected void initialize(JobContext context) throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> *       // We are responsible for the lifecycle of this connection until we hand it over in<a name="line.80"></a>
-<span class="sourceLineNo">081</span> *       // initializeTable.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> *       Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create(<a name="line.82"></a>
-<span class="sourceLineNo">083</span> *              job.getConfiguration()));<a name="line.83"></a>
-<span class="sourceLineNo">084</span> *       TableName tableName = TableName.valueOf("exampleTable");<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *       // mandatory. once passed here, TableInputFormatBase will handle closing the connection.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> *       initializeTable(connection, tableName);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> *       byte[][] inputColumns = new byte [][] { Bytes.toBytes("columnA"),<a name="line.87"></a>
-<span class="sourceLineNo">088</span> *         Bytes.toBytes("columnB") };<a name="line.88"></a>
-<span class="sourceLineNo">089</span> *       // optional, by default we'll get everything for the table.<a name="line.89"></a>
-<span class="sourceLineNo">090</span> *       Scan scan = new Scan();<a name="line.90"></a>
-<span class="sourceLineNo">091</span> *       for (byte[] family : inputColumns) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span> *         scan.addFamily(family);<a name="line.92"></a>
-<span class="sourceLineNo">093</span> *       }<a name="line.93"></a>
-<span class="sourceLineNo">094</span> *       Filter exampleFilter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator("aa.*"));<a name="line.94"></a>
-<span class="sourceLineNo">095</span> *       scan.setFilter(exampleFilter);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> *       setScan(scan);<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> * &lt;/pre&gt;<a name="line.99"></a>
-<span class="sourceLineNo">100</span> */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>@InterfaceAudience.Public<a name="line.101"></a>
-<span class="sourceLineNo">102</span>@InterfaceStability.Stable<a name="line.102"></a>
-<span class="sourceLineNo">103</span>public abstract class TableInputFormatBase<a name="line.103"></a>
-<span class="sourceLineNo">104</span>extends InputFormat&lt;ImmutableBytesWritable, Result&gt; {<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  /** Specify if we enable auto-balance for input in M/R jobs.*/<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  public static final String MAPREDUCE_INPUT_AUTOBALANCE = "hbase.mapreduce.input.autobalance";<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /** Specify if ratio for data skew in M/R jobs, it goes well with the enabling hbase.mapreduce<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * .input.autobalance property.*/<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public static final String INPUT_AUTOBALANCE_MAXSKEWRATIO = "hbase.mapreduce.input.autobalance" +<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          ".maxskewratio";<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /** Specify if the row key in table is text (ASCII between 32~126),<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * default is true. False means the table is using binary row key*/<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public static final String TABLE_ROW_TEXTKEY = "hbase.table.row.textkey";<a name="line.114"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HConstants;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.TableName;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.HTable;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.Result;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Table;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.RegionSizeCalculator;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.mapreduce.InputFormat;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.mapreduce.JobContext;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.mapreduce.RecordReader;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.net.DNS;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.util.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * A base for {@link TableInputFormat}s. Receives a {@link Connection}, a {@link TableName},<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * an {@link Scan} instance that defines the input columns etc. Subclasses may use<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * other TableRecordReader implementations.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * Subclasses MUST ensure initializeTable(Connection, TableName) is called for an instance to<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * function properly. Each of the entry points to this class used by the MapReduce framework,<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * {@link #createRecordReader(InputSplit, TaskAttemptContext)} and {@link #getSplits(JobContext)},<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * will call {@link #initialize(JobContext)} as a convenient centralized location to handle<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * retrieving the necessary configuration information. If your subclass overrides either of these<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * methods, either call the parent version or call initialize yourself.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> *<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;p&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * An example of a subclass:<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;pre&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> *   class ExampleTIF extends TableInputFormatBase {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *<a name="line.75"></a>
+<span class="sourceLineNo">076</span> *     {@literal @}Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span> *     protected void initialize(JobContext context) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *       // We are responsible for the lifecycle of this connection until we hand it over in<a name="line.78"></a>
+<span class="sourceLineNo">079</span> *       // initializeTable.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *       Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create(<a name="line.80"></a>
+<span class="sourceLineNo">081</span> *              job.getConfiguration()));<a name="line.81"></a>
+<span class="sourceLineNo">082</span> *       TableName tableName = TableName.valueOf("exampleTable");<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *       // mandatory. once passed here, TableInputFormatBase will handle closing the connection.<a name="line.83"></a>
+<span class="sourceLineNo">084</span> *       initializeTable(connection, tableName);<a name="line.84"></a>
+<span class="sourceLineNo">085</span> *       byte[][] inputColumns = new byte [][] { Bytes.toBytes("columnA"),<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *         Bytes.toBytes("columnB") };<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *       // optional, by default we'll get everything for the table.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> *       Scan scan = new Scan();<a name="line.88"></a>
+<span class="sourceLineNo">089</span> *       for (byte[] family : inputColumns) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> *         scan.addFamily(family);<a name="line.90"></a>
+<span class="sourceLineNo">091</span> *       }<a name="line.91"></a>
+<span class="sourceLineNo">092</span> *       Filter exampleFilter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator("aa.*"));<a name="line.92"></a>
+<span class="sourceLineNo">093</span> *       scan.setFilter(exampleFilter);<a name="line.93"></a>
+<span class="sourceLineNo">094</span> *       setScan(scan);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *     }<a name="line.95"></a>
+<span class="sourceLineNo">096</span> *   }<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * &lt;/pre&gt;<a name="line.97"></a>
+<span class="sourceLineNo">098</span> */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>@InterfaceAudience.Public<a name="line.99"></a>
+<span class="sourceLineNo">100</span>@InterfaceStability.Stable<a name="line.100"></a>
+<span class="sourceLineNo">101</span>public abstract class TableInputFormatBase<a name="line.101"></a>
+<span class="sourceLineNo">102</span>extends InputFormat&lt;ImmutableBytesWritable, Result&gt; {<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /** Specify if we enable auto-balance for input in M/R jobs.*/<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public static final String MAPREDUCE_INPUT_AUTOBALANCE = "hbase.mapreduce.input.autobalance";<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /** Specify if ratio for data skew in M/R jobs, it goes well with the enabling hbase.mapreduce<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * .input.autobalance property.*/<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static final String INPUT_AUTOBALANCE_MAXSKEWRATIO = "hbase.mapreduce.input.autobalance" +<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          ".maxskewratio";<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /** Specify if the row key in table is text (ASCII between 32~126),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * default is true. False means the table is using binary row key*/<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static final String TABLE_ROW_TEXTKEY = "hbase.table.row.textkey";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static final Log LOG = LogFactory.getLog(TableInputFormatBase.class);<a name="line.114"></a>
 <span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static final Log LOG = LogFactory.getLog(TableInputFormatBase.class);<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  private static final String NOT_INITIALIZED = "The input format instance has not been properly " +<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      "initialized. Ensure you call initializeTable either in your constructor or initialize " +<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      "method";<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private static final String INITIALIZATION_ERROR = "Cannot create a record reader because of a" +<a name="line.121"></a>
-<span class="sourceLineNo">122</span>            " previous error. Please look at the previous logs lines from" +<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            " the task's full log for more details.";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  /** Holds the details for the internal scanner.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @see Scan */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private Scan scan = null;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  /** The {@link Admin}. */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private Admin admin;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /** The {@link Table} to scan. */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private Table table;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /** The {@link RegionLocator} of the table. */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private RegionLocator regionLocator;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  /** The reader scanning the table, can be a custom one. */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private TableRecordReader tableRecordReader = null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /** The underlying {@link Connection} of the table. */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private Connection connection;<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>  /** The reverse DNS lookup cache mapping: IPAddress =&gt; HostName */<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private HashMap&lt;InetAddress, String&gt; reverseDNSCacheMap =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    new HashMap&lt;InetAddress, String&gt;();<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Builds a {@link TableRecordReader}. If no {@link TableRecordReader} was provided, uses<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * the default.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   *<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param split  The split to work with.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param context  The current context.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @return The newly created record reader.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @throws IOException When creating the reader fails.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @see org.apache.hadoop.mapreduce.InputFormat#createRecordReader(<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   *   org.apache.hadoop.mapreduce.InputSplit,<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   *   org.apache.hadoop.mapreduce.TaskAttemptContext)<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public RecordReader&lt;ImmutableBytesWritable, Result&gt; createRecordReader(<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      InputSplit split, TaskAttemptContext context)<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  throws IOException {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    if (table == null) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      initialize(context);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // null check in case our child overrides getTable to not throw.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    try {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      if (getTable() == null) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        // initialize() must not have been implemented in the subclass.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    } catch (IllegalStateException exception) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    TableSplit tSplit = (TableSplit) split;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    LOG.info("Input split length: " + StringUtils.humanReadableInt(tSplit.getLength()) + " bytes.");<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    final TableRecordReader trr =<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        this.tableRecordReader != null ? this.tableRecordReader : new TableRecordReader();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    Scan sc = new Scan(this.scan);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    sc.setStartRow(tSplit.getStartRow());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    sc.setStopRow(tSplit.getEndRow());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    trr.setScan(sc);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    trr.setTable(getTable());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    return new RecordReader&lt;ImmutableBytesWritable, Result&gt;() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>      @Override<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      public void close() throws IOException {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        trr.close();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        closeTable();<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>      @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      public ImmutableBytesWritable getCurrentKey() throws IOException, InterruptedException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        return trr.getCurrentKey();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        return trr.getCurrentValue();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>      @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      public float getProgress() throws IOException, InterruptedException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        return trr.getProgress();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      public void initialize(InputSplit inputsplit, TaskAttemptContext context) throws IOException,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          InterruptedException {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        trr.initialize(inputsplit, context);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>      @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        return trr.nextKeyValue();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    };<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  protected Pair&lt;byte[][],byte[][]&gt; getStartEndKeys() throws IOException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    return getRegionLocator().getStartEndKeys();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * Calculates the splits that will serve as input for the map tasks. The<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * number of splits matches the number of regions in a table.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param context  The current job context.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return The list of input splits.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException When creating the list of splits fails.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public List&lt;InputSplit&gt; getSplits(JobContext context) throws IOException {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    boolean closeOnFinish = false;<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (table == null) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      initialize(context);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      closeOnFinish = true;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // null check in case our child overrides getTable to not throw.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    try {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (getTable() == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // initialize() must not have been implemented in the subclass.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    } catch (IllegalStateException exception) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    try {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      RegionSizeCalculator sizeCalculator =<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          new RegionSizeCalculator(getRegionLocator(), getAdmin());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      <a name="line.256"></a>
-<span class="sourceLineNo">257</span>      TableName tableName = getTable().getName();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  <a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Pair&lt;byte[][], byte[][]&gt; keys = getStartEndKeys();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (keys == null || keys.getFirst() == null ||<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          keys.getFirst().length == 0) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        HRegionLocation regLoc =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>            getRegionLocator().getRegionLocation(HConstants.EMPTY_BYTE_ARRAY, false);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        if (null == regLoc) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          throw new IOException("Expecting at least one region.");<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(1);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        long regionSize = sizeCalculator.getRegionSize(regLoc.getRegionInfo().getRegionName());<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        TableSplit split = new TableSplit(tableName, scan,<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY, regLoc<a name="line.270"></a>
-<span class="sourceLineNo">271</span>                .getHostnamePort().split(Addressing.HOSTNAME_PORT_SEPARATOR)[0], regionSize);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        splits.add(split);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return splits;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(keys.getFirst().length);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      for (int i = 0; i &lt; keys.getFirst().length; i++) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          continue;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        HRegionLocation location = getRegionLocator().getRegionLocation(keys.getFirst()[i], false);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // The below InetSocketAddress creation does a name resolution.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        InetSocketAddress isa = new InetSocketAddress(location.getHostname(), location.getPort());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        if (isa.isUnresolved()) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>          LOG.warn("Failed resolve " + isa);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        InetAddress regionAddress = isa.getAddress();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        String regionLocation;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          regionLocation = reverseDNS(regionAddress);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        } catch (NamingException e) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          LOG.warn("Cannot resolve the host name for " + regionAddress + " because of " + e);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          regionLocation = location.getHostname();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  <a name="line.294"></a>
-<span class="sourceLineNo">295</span>        byte[] startRow = scan.getStartRow();<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        byte[] stopRow = scan.getStopRow();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        // determine if the given start an stop key fall into the region<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||<a name="line.298"></a>
-<span class="sourceLineNo">299</span>            Bytes.compareTo(startRow, keys.getSecond()[i]) &lt; 0) &amp;&amp;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            (stopRow.length == 0 ||<a name="line.300"></a>
-<span class="sourceLineNo">301</span>             Bytes.compareTo(stopRow, keys.getFirst()[i]) &gt; 0)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          byte[] splitStart = startRow.length == 0 ||<a name="line.302"></a>
-<span class="sourceLineNo">303</span>            Bytes.compareTo(keys.getFirst()[i], startRow) &gt;= 0 ?<a name="line.303"></a>
-<span class="sourceLineNo">304</span>              keys.getFirst()[i] : startRow;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          byte[] splitStop = (stopRow.length == 0 ||<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            Bytes.compareTo(keys.getSecond()[i], stopRow) &lt;= 0) &amp;&amp;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            keys.getSecond()[i].length &gt; 0 ?<a name="line.307"></a>
-<span class="sourceLineNo">308</span>              keys.getSecond()[i] : stopRow;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>          byte[] regionName = location.getRegionInfo().getRegionName();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          long regionSize = sizeCalculator.getRegionSize(regionName);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          TableSplit split = new TableSplit(tableName, scan,<a name="line.312"></a>
-<span class="sourceLineNo">313</span>            splitStart, splitStop, regionLocation, regionSize);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          splits.add(split);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          if (LOG.isDebugEnabled()) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            LOG.debug("getSplits: split -&gt; " + i + " -&gt; " + split);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      //The default value of "hbase.mapreduce.input.autobalance" is false, which means not enabled.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      boolean enableAutoBalance = context.getConfiguration()<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        .getBoolean(MAPREDUCE_INPUT_AUTOBALANCE, false);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      if (enableAutoBalance) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long totalRegionSize=0;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        for (int i = 0; i &lt; splits.size(); i++){<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          TableSplit ts = (TableSplit)splits.get(i);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>          totalRegionSize += ts.getLength();<a name="line.327"></a>
+<span class="sourceLineNo">116</span>  private static final String NOT_INITIALIZED = "The input format instance has not been properly " +<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      "initialized. Ensure you call initializeTable either in your constructor or initialize " +<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      "method";<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final String INITIALIZATION_ERROR = "Cannot create a record reader because of a" +<a name="line.119"></a>
+<span class="sourceLineNo">120</span>            " previous error. Please look at the previous logs lines from" +<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            " the task's full log for more details.";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /** Holds the details for the internal scanner.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   *<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @see Scan */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private Scan scan = null;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  /** The {@link Admin}. */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private Admin admin;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  /** The {@link Table} to scan. */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private Table table;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /** The {@link RegionLocator} of the table. */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private RegionLocator regionLocator;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /** The reader scanning the table, can be a custom one. */<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private TableRecordReader tableRecordReader = null;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /** The underlying {@link Connection} of the table. */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private Connection connection;<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>  /** The reverse DNS lookup cache mapping: IPAddress =&gt; HostName */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private HashMap&lt;InetAddress, String&gt; reverseDNSCacheMap =<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    new HashMap&lt;InetAddress, String&gt;();<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Builds a {@link TableRecordReader}. If no {@link TableRecordReader} was provided, uses<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the default.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param split  The split to work with.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param context  The current context.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @return The newly created record reader.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @throws IOException When creating the reader fails.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @see org.apache.hadoop.mapreduce.InputFormat#createRecordReader(<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   *   org.apache.hadoop.mapreduce.InputSplit,<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   *   org.apache.hadoop.mapreduce.TaskAttemptContext)<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public RecordReader&lt;ImmutableBytesWritable, Result&gt; createRecordReader(<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      InputSplit split, TaskAttemptContext context)<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  throws IOException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (table == null) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      initialize(context);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // null check in case our child overrides getTable to not throw.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if (getTable() == null) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        // initialize() must not have been implemented in the subclass.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    } catch (IllegalStateException exception) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    TableSplit tSplit = (TableSplit) split;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    LOG.info("Input split length: " + StringUtils.humanReadableInt(tSplit.getLength()) + " bytes.");<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    final TableRecordReader trr =<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        this.tableRecordReader != null ? this.tableRecordReader : new TableRecordReader();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    Scan sc = new Scan(this.scan);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    sc.setStartRow(tSplit.getStartRow());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    sc.setStopRow(tSplit.getEndRow());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    trr.setScan(sc);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    trr.setTable(getTable());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return new RecordReader&lt;ImmutableBytesWritable, Result&gt;() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>      @Override<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public void close() throws IOException {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        trr.close();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        closeTable();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>      @Override<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      public ImmutableBytesWritable getCurrentKey() throws IOException, InterruptedException {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        return trr.getCurrentKey();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>      @Override<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        return trr.getCurrentValue();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>      @Override<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      public float getProgress() throws IOException, InterruptedException {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        return trr.getProgress();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>      @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      public void initialize(InputSplit inputsplit, TaskAttemptContext context) throws IOException,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          InterruptedException {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        trr.initialize(inputsplit, context);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        return trr.nextKeyValue();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    };<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  protected Pair&lt;byte[][],byte[][]&gt; getStartEndKeys() throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    return getRegionLocator().getStartEndKeys();<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>   * Calculates the splits that will serve as input for the map tasks. The<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * number of splits matches the number of regions in a table.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   *<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param context  The current job context.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @return The list of input splits.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @throws IOException When creating the list of splits fails.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  public List&lt;InputSplit&gt; getSplits(JobContext context) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    boolean closeOnFinish = false;<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    if (table == null) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      initialize(context);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      closeOnFinish = true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>    // null check in case our child overrides getTable to not throw.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    try {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (getTable() == null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        // initialize() must not have been implemented in the subclass.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } catch (IllegalStateException exception) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      RegionSizeCalculator sizeCalculator =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          new RegionSizeCalculator(getRegionLocator(), getAdmin());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      <a name="line.254"></a>
+<span class="sourceLineNo">255</span>      TableName tableName = getTable().getName();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  <a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Pair&lt;byte[][], byte[][]&gt; keys = getStartEndKeys();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      if (keys == null || keys.getFirst() == null ||<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          keys.getFirst().length == 0) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        HRegionLocation regLoc =<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            getRegionLocator().getRegionLocation(HConstants.EMPTY_BYTE_ARRAY, false);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (null == regLoc) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          throw new IOException("Expecting at least one region.");<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(1);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        long regionSize = sizeCalculator.getRegionSize(regLoc.getRegionInfo().getRegionName());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        TableSplit split = new TableSplit(tableName, scan,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY, regLoc<a name="line.268"></a>
+<span class="sourceLineNo">269</span>                .getHostnamePort().split(Addressing.HOSTNAME_PORT_SEPARATOR)[0], regionSize);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        splits.add(split);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        return splits;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(keys.getFirst().length);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      for (int i = 0; i &lt; keys.getFirst().length; i++) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          continue;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        HRegionLocation location = getRegionLocator().getRegionLocation(keys.getFirst()[i], false);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        // The below InetSocketAddress creation does a name resolution.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        InetSocketAddress isa = new InetSocketAddress(location.getHostname(), location.getPort());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        if (isa.isUnresolved()) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          LOG.warn("Failed resolve " + isa);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        InetAddress regionAddress = isa.getAddress();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        String regionLocation;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        regionLocation = reverseDNS(regionAddress);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  <a name="line.287"></a>
+<span class="sourceLineNo">288</span>        byte[] startRow = scan.getStartRow();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        byte[] stopRow = scan.getStopRow();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        // determine if the given start an stop key fall into the region<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            Bytes.compareTo(startRow, keys.getSecond()[i]) &lt; 0) &amp;&amp;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            (stopRow.length == 0 ||<a name="line.293"></a>
+<span class="sourceLineNo">294</span>             Bytes.compareTo(stopRow, keys.getFirst()[i]) &gt; 0)) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          byte[] splitStart = startRow.length == 0 ||<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            Bytes.compareTo(keys.getFirst()[i], startRow) &gt;= 0 ?<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              keys.getFirst()[i] : startRow;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          byte[] splitStop = (stopRow.length == 0 ||<a name="line.298"></a>
+<span class="sourceLineNo">299</span>            Bytes.compareTo(keys.getSecond()[i], stopRow) &lt;= 0) &amp;&amp;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>            keys.getSecond()[i].length &gt; 0 ?<a name="line.300"></a>
+<span class="sourceLineNo">301</span>              keys.getSecond()[i] : stopRow;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  <a name="line.302"></a>
+<span class="sourceLineNo">303</span>          byte[] regionName = location.getRegionInfo().getRegionName();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          long regionSize = sizeCalculator.getRegionSize(regionName);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          TableSplit split = new TableSplit(tableName, scan,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            splitStart, splitStop, regionLocation, regionSize);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          splits.add(split);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          if (LOG.isDebugEnabled()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>            LOG.debug("getSplits: split -&gt; " + i + " -&gt; " + split);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      //The default value of "hbase.mapreduce.input.autobalance" is false, which means not enabled.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      boolean enableAutoBalance = context.getConfiguration()<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        .getBoolean(MAPREDUCE_INPUT_AUTOBALANCE, false);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      if (enableAutoBalance) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        long totalRegionSize=0;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        for (int i = 0; i &lt; splits.size(); i++){<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          TableSplit ts = (TableSplit)splits.get(i);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          totalRegionSize += ts.getLength();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        long averageRegionSize = totalRegionSize / splits.size();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        // the averageRegionSize must be positive.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        if (averageRegionSize &lt;= 0) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>            LOG.warn("The averageRegionSize is not positive: "+ averageRegionSize + ", " +<a name="line.325"></a>
+<span class="sourceLineNo">326</span>                    "set it to 1.");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>            averageRegionSize = 1;<a name="line.327"></a>
 <span class="sourceLineNo">328</span>        }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        long averageRegionSize = totalRegionSize / splits.size();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // the averageRegionSize must be positive.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        if (averageRegionSize &lt;= 0) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            LOG.warn("The averageRegionSize is not positive: "+ averageRegionSize + ", " +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>                    "set it to 1.");<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            averageRegionSize = 1;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        return calculateRebalancedSplits(splits, context, averageRegionSize);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      } else {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        return splits;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (closeOnFinish) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        closeTable();<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><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  String reverseDNS(InetAddress ipAddress) throws NamingException, UnknownHostException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    String hostName = this.reverseDNSCacheMap.get(ipAddress);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (hostName == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      String ipAddressString = null;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      try {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        ipAddressString = DNS.reverseDns(ipAddress, null);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      } catch (Exception e) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // We can use InetAddress in case the jndi failed to pull up the reverse DNS entry from the<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        // name service. Also, in case of ipv6, we need to use the InetAddress since resolving<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        // reverse DNS using jndi doesn't work well with ipv6 addresses.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        ipAddressString = InetAddress.getByName(ipAddress.getHostAddress()).getHostName();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (ipAddressString == null) throw new UnknownHostException("No host found for " + ipAddress);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      hostName = Strings.domainNamePointerToHostName(ipAddressString);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      this.reverseDNSCacheMap.put(ipAddress, hostName);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    return hostName;<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>  /**<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * Calculates the number of MapReduce input splits for the map tasks. The number of<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * MapReduce input splits depends on the average region size and the "data skew ratio" user set in<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * configuration.<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   *<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @param list  The list of input splits before balance.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * @param context  The current job context.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @param average  The average size of all regions .<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @return The list of input splits.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @throws IOException When creating the list of splits fails.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private List&lt;InputSplit&gt; calculateRebalancedSplits(List&lt;InputSplit&gt; list, JobContext context,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                                               long average) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    List&lt;InputSplit&gt; resultList = new ArrayList&lt;InputSplit&gt;();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    Configuration conf = context.getConfiguration();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    //The default data skew ratio is 3<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    long dataSkewRatio = conf.getLong(INPUT_AUTOBALANCE_MAXSKEWRATIO, 3);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    //It determines which mode to use: text key mode or binary key mode. The default is text mode.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    boolean isTextKey = context.getConfiguration().getBoolean(TABLE_ROW_TEXTKEY, true);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    long dataSkewThreshold = dataSkewRatio * average;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    int count = 0;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    while (count &lt; list.size()) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      TableSplit ts = (TableSplit)list.get(count);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      TableName tableName = ts.getTable();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      String regionLocation = ts.getRegionLocation();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      long regionSize = ts.getLength();<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      if (regionSize &gt;= dataSkewThreshold) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        // if the current region size is large than the data skew threshold,<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        // split the region into two MapReduce input splits.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        byte[] splitKey = getSplitKey(ts.getStartRow(), ts.getEndRow(), isTextKey);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>         //Set the size of child TableSplit as 1/2 of the region size. The exact size of the<a name="line.398"></a>
-<span class="sourceLineNo">399</span>         // MapReduce input splits is not far off.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        TableSplit t1 = new TableSplit(tableName, scan, ts.getStartRow(), splitKey, regionLocation,<a name="line.400"></a>
-<span class="sourceLineNo">401</span>                regionSize / 2);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        TableSplit t2 = new TableSplit(tableName, scan, splitKey, ts.getEndRow(), regionLocation,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>                regionSize - regionSize / 2);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        resultList.add(t1);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        resultList.add(t2);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        count++;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      } else if (regionSize &gt;= average) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        // if the region size between average size and data skew threshold size,<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        // make this region as one MapReduce input split.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        resultList.add(ts);<a name="line.410"></a>
+<span class="sourceLineNo">329</span>        return calculateRebalancedSplits(splits, context, averageRegionSize);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      } else {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        return splits;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    } finally {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      if (closeOnFinish) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        closeTable();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  String reverseDNS(InetAddress ipAddress) throws UnknownHostException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    String hostName = this.reverseDNSCacheMap.get(ipAddress);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (hostName == null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      String ipAddressString = null;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      try {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        ipAddressString = DNS.reverseDns(ipAddress, null);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      } catch (Exception e) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        // We can use InetAddress in case the jndi failed to pull up the reverse DNS entry from the<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        // name service. Also, in case of ipv6, we need to use the InetAddress since resolving<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // reverse DNS using jndi doesn't work well with ipv6 addresses.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        ipAddressString = InetAddress.getByName(ipAddress.getHostAddress()).getHostName();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (ipAddressString == null) throw new UnknownHostException("No host found for " + ipAddress);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      hostName = Strings.domainNamePointerToHostName(ipAddressString);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      this.reverseDNSCacheMap.put(ipAddress, hostName);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return hostName;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * Calculates the number of MapReduce input splits for the map tasks. The number of<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * MapReduce input splits depends on the average region size and the "data skew ratio" user set in<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * configuration.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   *<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * @param list  The list of input splits before balance.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * @param context  The current job context.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * @param average  The average size of all regions .<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * @return The list of input splits.<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @throws IOException When creating the list of splits fails.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private List&lt;InputSplit&gt; calculateRebalancedSplits(List&lt;InputSplit&gt; list, JobContext context,<a name="line.372"></a>
+<span class="sourceLineNo">373</span>                                               long average) throws IOException {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    List&lt;InputSplit&gt; resultList = new ArrayList&lt;InputSplit&gt;();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    Configuration conf = context.getConfiguration();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    //The default data skew ratio is 3<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    long dataSkewRatio = conf.getLong(INPUT_AUTOBALANCE_MAXSKEWRATIO, 3);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    //It determines which mode to use: text key mode or binary key mode. The default is text mode.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    boolean isTextKey = context.getConfiguration().getBoolean(TABLE_ROW_TEXTKEY, true);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    long dataSkewThreshold = dataSkewRatio * average;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    int count = 0;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    while (count &lt; list.size()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      TableSplit ts = (TableSplit)list.get(count);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      TableName tableName = ts.getTable();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String regionLocation = ts.getRegionLocation();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      long regionSize = ts.getLength();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      if (regionSize &gt;= dataSkewThreshold) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        // if the current region size is large than the data skew threshold,<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        // split the region into two MapReduce input splits.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        byte[] splitKey = getSplitKey(ts.getStartRow(), ts.getEndRow(), isTextKey);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>         //Set the size of child TableSplit as 1/2 of the region size. The exact size of the<a name="line.391"></a>
+<span class="sourceLineNo">392</span>         // MapReduce input splits is not far off.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        TableSplit t1 = new TableSplit(tableName, scan, ts.getStartRow(), splitKey, regionLocation,<a name="line.393"></a>
+<span class="sourceLineNo">394</span>                regionSize / 2);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        TableSplit t2 = new TableSplit(tableName, scan, splitKey, ts.getEndRow(), regionLocation,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>                regionSize - regionSize / 2);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        resultList.add(t1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        resultList.add(t2);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        count++;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      } else if (regionSize &gt;= average) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // if the region size between average size and data skew threshold size,<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // make this region as one MapReduce input split.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        resultList.add(ts);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        count++;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        // if the total size of several small continuous regions less than the average region size,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        // combine them into one MapReduce input split.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        long totalSize = regionSize;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        byte[] splitStartKey = ts.getStartRow();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        byte[] splitEndKey = ts.getEndRow();<a name="line.410"></a>
 <span class="sourceLineNo">411</span>        count++;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } else {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        // if the total size of several small continuous regions less than the average region size,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        // combine them into one MapReduce input split.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        long totalSize = regionSize;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        byte[] splitStartKey = ts.getStartRow();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        byte[] splitEndKey = ts.getEndRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        count++;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        for (; count &lt; list.size(); count++) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          TableSplit nextRegion = (TableSplit)list.get(count);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          long nextRegionSize = nextRegion.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          if (totalSize + nextRegionSize &lt;= dataSkewThreshold) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>            totalSize = totalSize + nextRegionSize;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>            splitEndKey = nextRegion.getEndRow();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          } else {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            break;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        TableSplit t = new TableSplit(tableName, scan, splitStartKey, splitEndKey,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>                regionLocation, totalSize);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        resultList.add(t);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    return resultList;<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>  /**<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * select a split point in the region. The selection of the split point is based on an uniform<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * distribution assumption for the keys in a region.<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Here are some examples:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * startKey: aaabcdefg  endKey: aaafff    split point: aaad<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * startKey: 111000  endKey: 1125790    split point: 111b<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * startKey: 1110  endKey: 1120    split point: 111_<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * startKey: binary key { 13, -19, 126, 127 }, endKey: binary key { 13, -19, 127, 0 },<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * split point: binary key { 13, -19, 127, -64 }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * Set this function as "public static", make it easier for test.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @param start Start key of the region<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param end End key of the region<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param isText It determines to use text key mode or binary key mode<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return The split point in the region.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  @InterfaceAudience.Private<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  public static byte[] getSplitKey(byte[] start, byte[] end, boolean isText) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    byte upperLimitByte;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    byte lowerLimitByte;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    //Use text mode or binary mode.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    if (isText) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      //The range of text char set in ASCII is [32,126], the lower limit is space and the upper<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // limit is '~'.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      upperLimitByte = '~';<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      lowerLimitByte = ' ';<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    } else {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      upperLimitByte = Byte.MAX_VALUE;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      lowerLimitByte = Byte.MIN_VALUE;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // For special case<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    // Example 1 : startkey=null, endkey="hhhqqqwww", splitKey="h"<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    // Example 2 (text key mode): startKey="ffffaaa", endKey=null, splitkey="f~~~~~~"<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    if (start.length == 0 &amp;&amp; end.length == 0){<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return new byte[]{(byte) ((lowerLimitByte + upperLimitByte) / 2)};<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (start.length == 0 &amp;&amp; end.length != 0){<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      return new byte[]{ end[0] };<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    if (start.length != 0 &amp;&amp; end.length == 0){<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      byte[] result =new byte[start.length];<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      result[0]=start[0];<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      for (int k = 1; k &lt; start.length; k++){<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          result[k] = upperLimitByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return result;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // A list to store bytes in split key<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    List resultBytesList = new ArrayList();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    int maxLength = start.length &gt; end.length ? start.length : end.length;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    for (int i = 0; i &lt; maxLength; i++) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      //calculate the midpoint byte between the first difference<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      //for example: "11ae" and "11chw", the midpoint is "11b"<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      //another example: "11ae" and "11bhw", the first different byte is 'a' and 'b',<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // there is no midpoint between 'a' and 'b', so we need to check the next byte.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (start[i] == end[i]) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        resultBytesList.add(start[i]);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        //For special case like: startKey="aaa", endKey="aaaz", splitKey="aaaM"<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        if (i + 1 == start.length) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          resultBytesList.add((byte) ((lowerLimitByte + end[i 

<TRUNCATED>

[20/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
index 1b54cf8..195ffb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[38/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html b/devapidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
index b77a637..54b4527 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
@@ -385,7 +385,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>filterAllRemaining</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.71">filterAllRemaining</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.69">filterAllRemaining</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html#filterAllRemaining()">FilterBase</a></code></strong></div>
 <div class="block">Filters that never filter all remaining can inherit this implementation that
  never stops the filter early.
@@ -406,7 +406,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>createFilterFromArguments</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.75">createFilterFromArguments</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;byte[]&gt;&nbsp;filterArguments)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.73">createFilterFromArguments</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;byte[]&gt;&nbsp;filterArguments)</pre>
 </li>
 </ul>
 <a name="toByteArray()">
@@ -415,7 +415,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.85">toByteArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.83">toByteArray</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html#toByteArray()">FilterBase</a></code></strong></div>
 <div class="block">Return length 0 byte array for Filters that don't require special serialization</div>
 <dl>
@@ -430,7 +430,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>parseFrom</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter">InclusiveStopFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.98">parseFrom</a>(byte[]&nbsp;pbBytes)
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter">InclusiveStopFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.96">parseFrom</a>(byte[]&nbsp;pbBytes)
                                      throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/DeserializationException.html" title="class in org.apache.hadoop.hbase.exceptions">DeserializationException</a></pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>pbBytes</code> - A pb serialized <a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>InclusiveStopFilter</code></a> instance</dd>
 <dt><span class="strong">Returns:</span></dt><dd>An instance of <a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>InclusiveStopFilter</code></a> made from <code>bytes</code></dd>
@@ -444,7 +444,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html"
 <ul class="blockList">
 <li class="blockList">
 <h4>areSerializedFieldsEqual</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.114">areSerializedFieldsEqual</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;o)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.112">areSerializedFieldsEqual</a>(<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;o)</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html#areSerializedFieldsEqual(org.apache.hadoop.hbase.filter.Filter)">FilterBase</a></code></strong></div>
 <div class="block">Default implementation so that writers of custom filters aren't forced to implement.</div>
 <dl>
@@ -461,7 +461,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html"
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/filter/InclusiveStopFilter.html#line.123">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/filter/InclusiveStopFilter.html#line.121">toString</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/filter/FilterBase.html#toString()">FilterBase</a></code></strong></div>
 <div class="block">Return filter's info for debugging and logging purpose.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 52c2442..24cdb21 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -161,14 +161,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">Filter.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">RegexStringComparator.EngineType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterWrapper.FilterRowRetCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/CompareFilter.CompareOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">CompareFilter.CompareOp</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.SatisfiesCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FuzzyRowFilter.Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterList.Operator</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="strong">BitComparator.BitwiseOp</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
index d986325..8f7fcf6 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1127">BucketCache.BucketEntry</a>
+<pre>static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1130">BucketCache.BucketEntry</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a></pre>
 <div class="block">Item in cache. We expect this to be where most memory goes. Java uses 8
@@ -274,7 +274,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>serialVersionUID</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1128">serialVersionUID</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1131">serialVersionUID</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.bucket.BucketCache.BucketEntry.serialVersionUID">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -284,7 +284,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>COMPARATOR</h4>
-<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1131">COMPARATOR</a></pre>
+<pre>static final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1134">COMPARATOR</a></pre>
 </li>
 </ul>
 <a name="offsetBase">
@@ -293,7 +293,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>offsetBase</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1141">offsetBase</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1144">offsetBase</a></pre>
 </li>
 </ul>
 <a name="length">
@@ -302,7 +302,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>length</h4>
-<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1142">length</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1145">length</a></pre>
 </li>
 </ul>
 <a name="offset1">
@@ -311,7 +311,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>offset1</h4>
-<pre>private&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1143">offset1</a></pre>
+<pre>private&nbsp;byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1146">offset1</a></pre>
 </li>
 </ul>
 <a name="deserialiserIndex">
@@ -320,7 +320,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>deserialiserIndex</h4>
-<pre>byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1144">deserialiserIndex</a></pre>
+<pre>byte <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1147">deserialiserIndex</a></pre>
 </li>
 </ul>
 <a name="accessCounter">
@@ -329,7 +329,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>accessCounter</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1145">accessCounter</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1148">accessCounter</a></pre>
 </li>
 </ul>
 <a name="priority">
@@ -338,7 +338,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>priority</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockPriority</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1146">priority</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockPriority</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1149">priority</a></pre>
 </li>
 </ul>
 <a name="markedForEvict">
@@ -347,7 +347,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>markedForEvict</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1148">markedForEvict</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1151">markedForEvict</a></pre>
 </li>
 </ul>
 <a name="refCount">
@@ -356,7 +356,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>refCount</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.BucketEntry.html#line.1149">refCount</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.BucketEntry.html#line.1152">refCount</a></pre>
 </li>
 </ul>
 <a name="cachedTime">
@@ -365,7 +365,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>cachedTime</h4>
-<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1154">cachedTime</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1157">cachedTime</a></pre>
 <div class="block">Time this block was cached.  Presumes we are created just before we are added to the cache.</div>
 </li>
 </ul>
@@ -383,7 +383,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BucketCache.BucketEntry</h4>
-<pre><a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1156">BucketCache.BucketEntry</a>(long&nbsp;offset,
+<pre><a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1159">BucketCache.BucketEntry</a>(long&nbsp;offset,
                        int&nbsp;length,
                        long&nbsp;accessCounter,
                        boolean&nbsp;inMemory)</pre>
@@ -403,7 +403,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>offset</h4>
-<pre>long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1167">offset</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1170">offset</a>()</pre>
 </li>
 </ul>
 <a name="setOffset(long)">
@@ -412,7 +412,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setOffset</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1173">setOffset</a>(long&nbsp;value)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1176">setOffset</a>(long&nbsp;value)</pre>
 </li>
 </ul>
 <a name="getLength()">
@@ -421,7 +421,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getLength</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1180">getLength</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1183">getLength</a>()</pre>
 </li>
 </ul>
 <a name="deserializerReference(org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap)">
@@ -430,7 +430,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>deserializerReference</h4>
-<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1184">deserializerReference</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;deserialiserMap)</pre>
+<pre>protected&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1187">deserializerReference</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;deserialiserMap)</pre>
 </li>
 </ul>
 <a name="setDeserialiserReference(org.apache.hadoop.hbase.io.hfile.CacheableDeserializer, org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap)">
@@ -439,7 +439,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>setDeserialiserReference</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1190">setDeserialiserReference</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1193">setDeserialiserReference</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer,
                             <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;deserialiserMap)</pre>
 </li>
 </ul>
@@ -449,7 +449,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>access</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1200">access</a>(long&nbsp;accessCounter)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1203">access</a>(long&nbsp;accessCounter)</pre>
 <div class="block">Block has been accessed. Update its local access counter.</div>
 </li>
 </ul>
@@ -459,7 +459,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockList">
 <li class="blockList">
 <h4>getPriority</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockPriority</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1207">getPriority</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile">BlockPriority</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1210">getPriority</a>()</pre>
 </li>
 </ul>
 <a name="getCachedTime()">
@@ -468,7 +468,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/io/Serializabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getCachedTime</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1211">getCachedTime</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#line.1214">getCachedTime</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
index 92a412b..397f535 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1222">BucketCache.BucketEntryGroup</a>
+<pre>private class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1225">BucketCache.BucketEntryGroup</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntryGroup</a>&gt;</pre>
 <div class="block">Used to group bucket entries into priority buckets. There will be a
@@ -226,7 +226,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>queue</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/CachedEntryQueue.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">CachedEntryQueue</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1224">queue</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/CachedEntryQueue.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">CachedEntryQueue</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1227">queue</a></pre>
 </li>
 </ul>
 <a name="totalSize">
@@ -235,7 +235,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>totalSize</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1225">totalSize</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1228">totalSize</a></pre>
 </li>
 </ul>
 <a name="bucketSize">
@@ -244,7 +244,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>bucketSize</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1226">bucketSize</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1229">bucketSize</a></pre>
 </li>
 </ul>
 </li>
@@ -261,7 +261,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BucketCache.BucketEntryGroup</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1228">BucketCache.BucketEntryGroup</a>(long&nbsp;bytesToFree,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1231">BucketCache.BucketEntryGroup</a>(long&nbsp;bytesToFree,
                             long&nbsp;blockSize,
                             long&nbsp;bucketSize)</pre>
 </li>
@@ -280,7 +280,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1234">add</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>,<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&gt;&nbsp;block)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1237">add</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.Entry.html?is-external=true" title="class or interface in java.util">Map.Entry</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>,<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&gt;&nbsp;block)</pre>
 </li>
 </ul>
 <a name="free(long)">
@@ -289,7 +289,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>free</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1239">free</a>(long&nbsp;toFree)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1242">free</a>(long&nbsp;toFree)</pre>
 </li>
 </ul>
 <a name="overflow()">
@@ -298,7 +298,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>overflow</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1255">overflow</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1258">overflow</a>()</pre>
 </li>
 </ul>
 <a name="totalSize()">
@@ -307,7 +307,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>totalSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1259">totalSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1262">totalSize</a>()</pre>
 </li>
 </ul>
 <a name="compareTo(org.apache.hadoop.hbase.io.hfile.bucket.BucketCache.BucketEntryGroup)">
@@ -316,7 +316,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockList">
 <li class="blockList">
 <h4>compareTo</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1264">compareTo</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntryGroup</a>&nbsp;that)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1267">compareTo</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntryGroup</a>&nbsp;that)</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true#compareTo(T)" title="class or interface in java.lang">compareTo</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntryGroup</a>&gt;</code></dd>
@@ -329,7 +329,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Comparabl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1271">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;that)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html#line.1274">equals</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;that)</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
index 35f6988..713c40c 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1281">BucketCache.RAMQueueEntry</a>
+<pre>static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1284">BucketCache.RAMQueueEntry</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Block Entry stored in the memory with key,data and so on</div>
 </li>
@@ -218,7 +218,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>key</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1282">key</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1285">key</a></pre>
 </li>
 </ul>
 <a name="data">
@@ -227,7 +227,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>data</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1283">data</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1286">data</a></pre>
 </li>
 </ul>
 <a name="accessCounter">
@@ -236,7 +236,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>accessCounter</h4>
-<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1284">accessCounter</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1287">accessCounter</a></pre>
 </li>
 </ul>
 <a name="inMemory">
@@ -245,7 +245,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>inMemory</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1285">inMemory</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1288">inMemory</a></pre>
 </li>
 </ul>
 </li>
@@ -262,7 +262,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BucketCache.RAMQueueEntry</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1287">BucketCache.RAMQueueEntry</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;bck,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1290">BucketCache.RAMQueueEntry</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;bck,
                          <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;data,
                          long&nbsp;accessCounter,
                          boolean&nbsp;inMemory)</pre>
@@ -282,7 +282,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getData</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1295">getData</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1298">getData</a>()</pre>
 </li>
 </ul>
 <a name="getKey()">
@@ -291,7 +291,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getKey</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1299">getKey</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1302">getKey</a>()</pre>
 </li>
 </ul>
 <a name="access(long)">
@@ -300,7 +300,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>access</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1303">access</a>(long&nbsp;accessCounter)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1306">access</a>(long&nbsp;accessCounter)</pre>
 </li>
 </ul>
 <a name="writeToCache(org.apache.hadoop.hbase.io.hfile.bucket.IOEngine, org.apache.hadoop.hbase.io.hfile.bucket.BucketAllocator, org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap, java.util.concurrent.atomic.AtomicLong)">
@@ -309,7 +309,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writeToCache</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1307">writeToCache</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a>&nbsp;ioEngine,
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html#line.1310">writeToCache</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a>&nbsp;ioEngine,
                                    <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator</a>&nbsp;bucketAllocator,
                                    <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;deserialiserMap,
                                    <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a>&nbsp;realCacheSize)

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
index f6fc56e..de7fff4 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.556">BucketCache.StatisticsThread</a>
+<pre>private static class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.559">BucketCache.StatisticsThread</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 </li>
 </ul>
@@ -225,7 +225,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>bucketCache</h4>
-<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html#line.557">bucketCache</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html#line.560">bucketCache</a></pre>
 </li>
 </ul>
 </li>
@@ -242,7 +242,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BucketCache.StatisticsThread</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html#line.559">BucketCache.StatisticsThread</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a>&nbsp;bucketCache)</pre>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html#line.562">BucketCache.StatisticsThread</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a>&nbsp;bucketCache)</pre>
 </li>
 </ul>
 </li>
@@ -259,7 +259,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html#line.566">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html#line.569">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
index df292f4..ef92f5e 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre> class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.768">BucketCache.WriterThread</a>
+<pre> class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.771">BucketCache.WriterThread</a>
 extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></pre>
 </li>
 </ul>
@@ -217,7 +217,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>inputQueue</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.769">inputQueue</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt; <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.772">inputQueue</a></pre>
 </li>
 </ul>
 <a name="writerEnabled">
@@ -226,7 +226,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>writerEnabled</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.770">writerEnabled</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.773">writerEnabled</a></pre>
 </li>
 </ul>
 </li>
@@ -243,7 +243,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BucketCache.WriterThread</h4>
-<pre><a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.772">BucketCache.WriterThread</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;queue)</pre>
+<pre><a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.775">BucketCache.WriterThread</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;queue)</pre>
 </li>
 </ul>
 </li>
@@ -260,7 +260,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>disableWriter</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.778">disableWriter</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.781">disableWriter</a>()</pre>
 </li>
 </ul>
 <a name="run()">
@@ -269,7 +269,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.htm
 <ul class="blockList">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.782">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.785">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
@@ -284,7 +284,7 @@ extends <a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.htm
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doDrain</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.813">doDrain</a>(<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;entries)
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html#line.816">doDrain</a>(<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;entries)
        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Flush the entries in ramCache to IOEngine and add bucket entry to backingMap.
  Process all that are passed in even if failure being sure to remove from ramCache else we'll


[18/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
index 3a9a7f7..d857fe6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html
@@ -311,1174 +311,1177 @@
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  private IOEngine getIOEngineFromName(String ioEngineName, long capacity)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:"))<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:")) {<a name="line.306"></a>
 <span class="sourceLineNo">307</span>      return new FileIOEngine(ioEngineName.substring(5), capacity);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    else if (ioEngineName.startsWith("offheap"))<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    } else if (ioEngineName.startsWith("offheap")) {<a name="line.308"></a>
 <span class="sourceLineNo">309</span>      return new ByteBufferIOEngine(capacity, true);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    else if (ioEngineName.startsWith("heap"))<a name="line.310"></a>
+<span class="sourceLineNo">310</span>    } else if (ioEngineName.startsWith("heap")) {<a name="line.310"></a>
 <span class="sourceLineNo">311</span>      return new ByteBufferIOEngine(capacity, false);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    else<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw new IllegalArgumentException(<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * Cache the block with the specified name and buffer.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param cacheKey block's cache key<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param buf block buffer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    cacheBlock(cacheKey, buf, false, false);<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>   * Cache the block with the specified name and buffer.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @param cacheKey block's cache key<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param cachedItem block buffer<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @param inMemory if block is in-memory<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param cacheDataInL1<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final boolean cacheDataInL1) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Cache the block to ramCache<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param cacheKey block's cache key<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param cachedItem block buffer<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param inMemory if block is in-memory<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param wait if true, blocking wait when queue is full<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      boolean wait) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (!cacheEnabled) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>    /*<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    RAMQueueEntry re =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    boolean successfulAddition = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (wait) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } catch (InterruptedException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Thread.currentThread().interrupt();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      successfulAddition = bq.offer(re);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (!successfulAddition) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ramCache.remove(cacheKey);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      cacheStats.failInsert();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    } else {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.blockNumber.incrementAndGet();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Get the buffer of the block with the specified key.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param key block's cache key<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @return buffer of specified cache key, or null if not in cache<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 Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      boolean updateCacheMetrics) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (!cacheEnabled) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (re != null) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (updateCacheMetrics) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      re.access(accessCount.incrementAndGet());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return re.getData();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (bucketEntry != null) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      long start = System.nanoTime();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        lock.readLock().lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        // existence here.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          // TODO : change this area - should be removed after server cells and<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // 12295 are available<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int len = bucketEntry.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          long timeTaken = System.nanoTime() - start;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (updateCacheMetrics) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            cacheStats.ioHit(timeTaken);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            bucketEntry.refCount.incrementAndGet();<a name="line.430"></a>
+<span class="sourceLineNo">312</span>    } else if (ioEngineName.startsWith("mmap:")) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FileMmapEngine(ioEngineName.substring(5), capacity);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Cache the block with the specified name and buffer.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param cacheKey block's cache key<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param buf block buffer<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    cacheBlock(cacheKey, buf, false, false);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * Cache the block with the specified name and buffer.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param cacheKey block's cache key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param cachedItem block buffer<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param inMemory if block is in-memory<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param cacheDataInL1<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final boolean cacheDataInL1) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<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>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Cache the block to ramCache<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cacheKey block's cache key<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param cachedItem block buffer<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param inMemory if block is in-memory<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param wait if true, blocking wait when queue is full<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      boolean wait) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    if (!cacheEnabled) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    /*<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    RAMQueueEntry re =<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    boolean successfulAddition = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (wait) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      } catch (InterruptedException e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        Thread.currentThread().interrupt();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      successfulAddition = bq.offer(re);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    if (!successfulAddition) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ramCache.remove(cacheKey);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      cacheStats.failInsert();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } else {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.blockNumber.incrementAndGet();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Get the buffer of the block with the specified key.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param key block's cache key<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return buffer of specified cache key, or null if not in cache<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      boolean updateCacheMetrics) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (!cacheEnabled) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (re != null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (updateCacheMetrics) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      re.access(accessCount.incrementAndGet());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return re.getData();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (bucketEntry != null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      long start = System.nanoTime();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        lock.readLock().lock();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // existence here.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          // TODO : change this area - should be removed after server cells and<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          // 12295 are available<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          int len = bucketEntry.getLength();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          long timeTaken = System.nanoTime() - start;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          if (updateCacheMetrics) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            cacheStats.ioHit(timeTaken);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>          }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            ioErrorStartTime = -1;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          return cachedBlock;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } catch (IOException ioex) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        checkIOErrorIsTolerated();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      } finally {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        lock.readLock().unlock();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.446"></a>
+<span class="sourceLineNo">432</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>            bucketEntry.refCount.incrementAndGet();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            ioErrorStartTime = -1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          return cachedBlock;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      } catch (IOException ioex) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        checkIOErrorIsTolerated();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      } finally {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        lock.readLock().unlock();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return null;<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>  @VisibleForTesting<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (decrementBlockNumber) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      this.blockNumber.decrementAndGet();<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return evictBlock(cacheKey, true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // bucket map<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!cacheEnabled) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return false;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (bucketEntry == null) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (removedBlock != null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        return true;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      } else {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        return false;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      lock.writeLock().lock();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      lock.writeLock().unlock();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return true;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (removedBlock != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.blockNumber.decrementAndGet();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return removedBlock;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (!cacheEnabled) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return false;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    if (bucketEntry == null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (removedBlock != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        return false;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      lock.writeLock().lock();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      int refCount = bucketEntry.refCount.get();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if(refCount == 0) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        } else {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      } else {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        if(!deletedBlock) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          if (LOG.isDebugEnabled()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.533"></a>
-<span class="sourceLineNo">534</span>                + " readers. Can not be freed now");<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          if (LOG.isDebugEnabled()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.539"></a>
-<span class="sourceLineNo">540</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.540"></a>
-<span class="sourceLineNo">541</span>                + " for evicting at a later point");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          bucketEntry.markedForEvict = true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } finally {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      lock.writeLock().unlock();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /*<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  private static class StatisticsThread extends Thread {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    private final BucketCache bucketCache;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      super("BucketCacheStatsThread");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      setDaemon(true);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      this.bucketCache = bucketCache;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    @Override<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public void run() {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bucketCache.logStats();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void logStats() {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    long freeSize = totalSize - usedSize;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    long cacheSize = getRealCacheSize();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    cacheStats.reset();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public long getRealCacheSize() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return this.realCacheSize.get();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private long acceptableSize() {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>  private long singleSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private long multiSize() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        * DEFAULT_MIN_FACTOR);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private long memorySize() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        * DEFAULT_MIN_FACTOR);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * ensure there must be some blocks evicted<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param why Why we are being called<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  private void freeSpace(final String why) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // Ensure only one freeSpace progress at a time<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    try {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      freeInProgress = true;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      long bytesToFreeWithoutExtra = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      // Calculate free byte for each bucketSizeinfo<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        bytesToFreeForBucket[i] = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          if (msgBuffer != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.644"></a>
-<span class="sourceLineNo">645</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (msgBuffer != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.650"></a>
+<span class="sourceLineNo">448</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return null;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @VisibleForTesting<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (decrementBlockNumber) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      this.blockNumber.decrementAndGet();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return evictBlock(cacheKey, true);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  // bucket map<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (!cacheEnabled) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    if (bucketEntry == null) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (removedBlock != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        return true;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        return false;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      lock.writeLock().lock();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      } else {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      lock.writeLock().unlock();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    return true;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (removedBlock != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      this.blockNumber.decrementAndGet();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return removedBlock;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (!cacheEnabled) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (bucketEntry == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      if (removedBlock != null) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        return true;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        return false;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      lock.writeLock().lock();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      int refCount = bucketEntry.refCount.get();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      if(refCount == 0) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        } else {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>          return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        }<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      } else {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if(!deletedBlock) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          if (LOG.isDebugEnabled()) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                + " readers. Can not be freed now");<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          }<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          return false;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.542"></a>
+<span class="sourceLineNo">543</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.543"></a>
+<span class="sourceLineNo">544</span>                + " for evicting at a later point");<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          bucketEntry.markedForEvict = true;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      lock.writeLock().unlock();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    return true;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /*<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private static class StatisticsThread extends Thread {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    private final BucketCache bucketCache;<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      super("BucketCacheStatsThread");<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      setDaemon(true);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      this.bucketCache = bucketCache;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    public void run() {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      bucketCache.logStats();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  public void logStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    long freeSize = totalSize - usedSize;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    long cacheSize = getRealCacheSize();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.581"></a>
+<span class="sourceLineNo">582</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.590"></a>
+<span class="sourceLineNo">591</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    cacheStats.reset();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  public long getRealCacheSize() {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return this.realCacheSize.get();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  private long acceptableSize() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>  private long singleSize() {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private long multiSize() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        * DEFAULT_MIN_FACTOR);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>  private long memorySize() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        * DEFAULT_MIN_FACTOR);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * ensure there must be some blocks evicted<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * @param why Why we are being called<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   */<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  private void freeSpace(final String why) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // Ensure only one freeSpace progress at a time<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      freeInProgress = true;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      long bytesToFreeWithoutExtra = 0;<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Calculate free byte for each bucketSizeinfo<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        bytesToFreeForBucket[i] = 0;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (msgBuffer != null) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.647"></a>
+<span class="sourceLineNo">648</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
 <span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        return;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.665"></a>
+<span class="sourceLineNo">652</span>      if (msgBuffer != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span><a name="line.655"></a>
+<span class="sourceLineNo">656</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      }<a name="line.665"></a>
 <span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // Instantiate priority buckets<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          blockSize, singleSize());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          blockSize, multiSize());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          blockSize, memorySize());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      // group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          case SINGLE: {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            break;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          case MULTI: {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            break;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          case MEMORY: {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            break;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>      bucketQueue.add(bucketSingle);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      bucketQueue.add(bucketMulti);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      bucketQueue.add(bucketMemory);<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>      int remainingBuckets = 3;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      long bytesFreed = 0;<a name="line.701"></a>
+<span class="sourceLineNo">667</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>      // Instantiate priority buckets<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          blockSize, singleSize());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          blockSize, multiSize());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.675"></a>
+<span class="sourceLineNo">676</span>          blockSize, memorySize());<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // group<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          case SINGLE: {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            break;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          case MULTI: {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>            break;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>          case MEMORY: {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>            break;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>      bucketQueue.add(bucketSingle);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      bucketQueue.add(bucketMulti);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      bucketQueue.add(bucketMemory);<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>      BucketEntryGroup bucketGroup;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        long overflow = bucketGroup.overflow();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        if (overflow &gt; 0) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.707"></a>
-<span class="sourceLineNo">708</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        remainingBuckets--;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.715"></a>
-<span class="sourceLineNo">716</span>       * free space<a name="line.716"></a>
-<span class="sourceLineNo">717</span>       */<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      boolean needFreeForExtra = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          needFreeForExtra = true;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (needFreeForExtra) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        bucketQueue.clear();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        remainingBuckets = 2;<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>        bucketQueue.add(bucketSingle);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        bucketQueue.add(bucketMulti);<a name="line.734"></a>
+<span class="sourceLineNo">703</span>      int remainingBuckets = 3;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      long bytesFreed = 0;<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>      BucketEntryGroup bucketGroup;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        long overflow = bucketGroup.overflow();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        if (overflow &gt; 0) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        remainingBuckets--;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>      /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.718"></a>
+<span class="sourceLineNo">719</span>       * free space<a name="line.719"></a>
+<span class="sourceLineNo">720</span>       */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      boolean needFreeForExtra = false;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          needFreeForExtra = true;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          break;<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (needFreeForExtra) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        bucketQueue.clear();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        remainingBuckets = 2;<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>        while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          long bucketBytesToFree = (bytesToFreeWithExtra - bytesFreed) / remainingBuckets;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          remainingBuckets--;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span>      if (LOG.isDebugEnabled()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        long single = bucketSingle.totalSize();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        long multi = bucketMulti.totalSize();<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        long memory = bucketMemory.totalSize();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isDebugEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.debug("Bucket cache free space completed; " + "freed="<a name="line.748"></a>
-<span class="sourceLineNo">749</span>            + StringUtils.byteDesc(bytesFreed) + ", " + "total="<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            + StringUtils.byteDesc(totalSize) + ", " + "single="<a name="line.750"></a>
-<span class="sourceLineNo">751</span>            + StringUtils.byteDesc(single) + ", " + "multi="<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            + StringUtils.byteDesc(multi) + ", " + "memory="<a name="line.752"></a>
-<span class="sourceLineNo">753</span>            + StringUtils.byteDesc(memory));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>    } catch (Throwable t) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      LOG.warn("Failed freeing space", t);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      cacheStats.evict();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      freeInProgress = false;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      freeSpaceLock.unlock();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  // This handles flushing the RAM cache to IOEngine.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  @VisibleForTesting<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  class WriterThread extends HasThread {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    private final BlockingQueue&lt;RAMQueueEntry&gt; inputQueue;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private volatile boolean writerEnabled = true;<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    WriterThread(BlockingQueue&lt;RAMQueueEntry&gt; queue) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      this.inputQueue = queue;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Used for test<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    @VisibleForTesting<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    void disableWriter() {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      this.writerEnabled = false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>    public void run() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      List&lt;RAMQueueEntry&gt; entries = new ArrayList&lt;RAMQueueEntry&gt;();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      try {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        while (cacheEnabled &amp;&amp; writerEnabled) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          try {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>            try {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>              // Blocks<a name="line.788"></a>
-<span class="sourceLineNo">789</span>              entries = getRAMQueueEntries(inputQueue, entries);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            } catch (InterruptedException ie) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>              if (!cacheEnabled) break;<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            doDrain(entries);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          } catch (Exception ioe) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            LOG.error("WriterThread encountered error", ioe);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a name="line.797"></a>
-<sp

<TRUNCATED>

[33/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/overview-tree.html b/devapidocs/overview-tree.html
index cf1db1f..be4ca28 100644
--- a/devapidocs/overview-tree.html
+++ b/devapidocs/overview-tree.html
@@ -1208,6 +1208,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/WALLink.html" title="class in org.apache.hadoop.hbase.io"><span class="strong">WALLink</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">FileMmapEngine</span></a> (implements org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a>)</li>
 <li type="circle">org.apache.hadoop.mapred.FileOutputFormat&lt;K,V&gt; (implements org.apache.hadoop.mapred.OutputFormat&lt;K,V&gt;)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.mapred.<a href="org/apache/hadoop/hbase/mapred/TableOutputFormat.html" title="class in org.apache.hadoop.hbase.mapred"><span class="strong">TableOutputFormat</span></a></li>
@@ -3720,6 +3721,7 @@
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/BufferedMutator.ExceptionListener.html" title="interface in org.apache.hadoop.hbase.client"><span class="strong">BufferedMutator.ExceptionListener</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">ByteBufferAllocator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">ByteBufferArray.Visitor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/ByteBufferSupportOutputStream.html" title="interface in org.apache.hadoop.hbase.io"><span class="strong">ByteBufferSupportOutputStream</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Bytes.Comparer</span></a>&lt;T&gt;</li>


[31/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.ReplicaCallIssuingRunnable.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.ReplicaCallIssuingRunnable.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.ReplicaCallIssuingRunnable.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.ReplicaCallIssuingRunnable.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.ReplicaCallIssuingRunnable.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.Ser

<TRUNCATED>

[45/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
index 6c2b2de..68b00ca 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
@@ -35,648 +35,641 @@
 <span class="sourceLineNo">027</span>import java.util.HashMap;<a name="line.27"></a>
 <span class="sourceLineNo">028</span>import java.util.List;<a name="line.28"></a>
 <span class="sourceLineNo">029</span><a name="line.29"></a>
-<span class="sourceLineNo">030</span>import javax.naming.NamingException;<a name="line.30"></a>
-<span class="sourceLineNo">031</span><a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.apache.commons.logging.Log;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.apache.commons.logging.LogFactory;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.apache.hadoop.conf.Configuration;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.HConstants;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.TableName;<a name="line.39"></a>
-<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.HTable;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Result;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.client.Table;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import org.apache.hadoop.hbase.util.RegionSizeCalculator;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.mapreduce.InputFormat;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.mapreduce.JobContext;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.mapreduce.RecordReader;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.net.DNS;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.util.StringUtils;<a name="line.59"></a>
-<span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>/**<a name="line.61"></a>
-<span class="sourceLineNo">062</span> * A base for {@link TableInputFormat}s. Receives a {@link Connection}, a {@link TableName},<a name="line.62"></a>
-<span class="sourceLineNo">063</span> * an {@link Scan} instance that defines the input columns etc. Subclasses may use<a name="line.63"></a>
-<span class="sourceLineNo">064</span> * other TableRecordReader implementations.<a name="line.64"></a>
-<span class="sourceLineNo">065</span> *<a name="line.65"></a>
-<span class="sourceLineNo">066</span> * Subclasses MUST ensure initializeTable(Connection, TableName) is called for an instance to<a name="line.66"></a>
-<span class="sourceLineNo">067</span> * function properly. Each of the entry points to this class used by the MapReduce framework,<a name="line.67"></a>
-<span class="sourceLineNo">068</span> * {@link #createRecordReader(InputSplit, TaskAttemptContext)} and {@link #getSplits(JobContext)},<a name="line.68"></a>
-<span class="sourceLineNo">069</span> * will call {@link #initialize(JobContext)} as a convenient centralized location to handle<a name="line.69"></a>
-<span class="sourceLineNo">070</span> * retrieving the necessary configuration information. If your subclass overrides either of these<a name="line.70"></a>
-<span class="sourceLineNo">071</span> * methods, either call the parent version or call initialize yourself.<a name="line.71"></a>
-<span class="sourceLineNo">072</span> *<a name="line.72"></a>
-<span class="sourceLineNo">073</span> * &lt;p&gt;<a name="line.73"></a>
-<span class="sourceLineNo">074</span> * An example of a subclass:<a name="line.74"></a>
-<span class="sourceLineNo">075</span> * &lt;pre&gt;<a name="line.75"></a>
-<span class="sourceLineNo">076</span> *   class ExampleTIF extends TableInputFormatBase {<a name="line.76"></a>
-<span class="sourceLineNo">077</span> *<a name="line.77"></a>
-<span class="sourceLineNo">078</span> *     {@literal @}Override<a name="line.78"></a>
-<span class="sourceLineNo">079</span> *     protected void initialize(JobContext context) throws IOException {<a name="line.79"></a>
-<span class="sourceLineNo">080</span> *       // We are responsible for the lifecycle of this connection until we hand it over in<a name="line.80"></a>
-<span class="sourceLineNo">081</span> *       // initializeTable.<a name="line.81"></a>
-<span class="sourceLineNo">082</span> *       Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create(<a name="line.82"></a>
-<span class="sourceLineNo">083</span> *              job.getConfiguration()));<a name="line.83"></a>
-<span class="sourceLineNo">084</span> *       TableName tableName = TableName.valueOf("exampleTable");<a name="line.84"></a>
-<span class="sourceLineNo">085</span> *       // mandatory. once passed here, TableInputFormatBase will handle closing the connection.<a name="line.85"></a>
-<span class="sourceLineNo">086</span> *       initializeTable(connection, tableName);<a name="line.86"></a>
-<span class="sourceLineNo">087</span> *       byte[][] inputColumns = new byte [][] { Bytes.toBytes("columnA"),<a name="line.87"></a>
-<span class="sourceLineNo">088</span> *         Bytes.toBytes("columnB") };<a name="line.88"></a>
-<span class="sourceLineNo">089</span> *       // optional, by default we'll get everything for the table.<a name="line.89"></a>
-<span class="sourceLineNo">090</span> *       Scan scan = new Scan();<a name="line.90"></a>
-<span class="sourceLineNo">091</span> *       for (byte[] family : inputColumns) {<a name="line.91"></a>
-<span class="sourceLineNo">092</span> *         scan.addFamily(family);<a name="line.92"></a>
-<span class="sourceLineNo">093</span> *       }<a name="line.93"></a>
-<span class="sourceLineNo">094</span> *       Filter exampleFilter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator("aa.*"));<a name="line.94"></a>
-<span class="sourceLineNo">095</span> *       scan.setFilter(exampleFilter);<a name="line.95"></a>
-<span class="sourceLineNo">096</span> *       setScan(scan);<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> * &lt;/pre&gt;<a name="line.99"></a>
-<span class="sourceLineNo">100</span> */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>@InterfaceAudience.Public<a name="line.101"></a>
-<span class="sourceLineNo">102</span>@InterfaceStability.Stable<a name="line.102"></a>
-<span class="sourceLineNo">103</span>public abstract class TableInputFormatBase<a name="line.103"></a>
-<span class="sourceLineNo">104</span>extends InputFormat&lt;ImmutableBytesWritable, Result&gt; {<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>  /** Specify if we enable auto-balance for input in M/R jobs.*/<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  public static final String MAPREDUCE_INPUT_AUTOBALANCE = "hbase.mapreduce.input.autobalance";<a name="line.107"></a>
-<span class="sourceLineNo">108</span>  /** Specify if ratio for data skew in M/R jobs, it goes well with the enabling hbase.mapreduce<a name="line.108"></a>
-<span class="sourceLineNo">109</span>   * .input.autobalance property.*/<a name="line.109"></a>
-<span class="sourceLineNo">110</span>  public static final String INPUT_AUTOBALANCE_MAXSKEWRATIO = "hbase.mapreduce.input.autobalance" +<a name="line.110"></a>
-<span class="sourceLineNo">111</span>          ".maxskewratio";<a name="line.111"></a>
-<span class="sourceLineNo">112</span>  /** Specify if the row key in table is text (ASCII between 32~126),<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   * default is true. False means the table is using binary row key*/<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  public static final String TABLE_ROW_TEXTKEY = "hbase.table.row.textkey";<a name="line.114"></a>
+<span class="sourceLineNo">030</span>import org.apache.commons.logging.Log;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.commons.logging.LogFactory;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.conf.Configuration;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.33"></a>
+<span class="sourceLineNo">034</span>import org.apache.hadoop.hbase.classification.InterfaceStability;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.apache.hadoop.hbase.HConstants;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.36"></a>
+<span class="sourceLineNo">037</span>import org.apache.hadoop.hbase.TableName;<a name="line.37"></a>
+<span class="sourceLineNo">038</span>import org.apache.hadoop.hbase.client.Admin;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>import org.apache.hadoop.hbase.client.Connection;<a name="line.39"></a>
+<span class="sourceLineNo">040</span>import org.apache.hadoop.hbase.client.HTable;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import org.apache.hadoop.hbase.client.RegionLocator;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import org.apache.hadoop.hbase.client.Result;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import org.apache.hadoop.hbase.client.Scan;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import org.apache.hadoop.hbase.client.Table;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import org.apache.hadoop.hbase.io.ImmutableBytesWritable;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import org.apache.hadoop.hbase.util.Addressing;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import org.apache.hadoop.hbase.util.RegionSizeCalculator;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import org.apache.hadoop.hbase.util.Strings;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import org.apache.hadoop.mapreduce.InputFormat;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import org.apache.hadoop.mapreduce.InputSplit;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.hadoop.mapreduce.JobContext;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.mapreduce.RecordReader;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.mapreduce.TaskAttemptContext;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.net.DNS;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.util.StringUtils;<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>/**<a name="line.59"></a>
+<span class="sourceLineNo">060</span> * A base for {@link TableInputFormat}s. Receives a {@link Connection}, a {@link TableName},<a name="line.60"></a>
+<span class="sourceLineNo">061</span> * an {@link Scan} instance that defines the input columns etc. Subclasses may use<a name="line.61"></a>
+<span class="sourceLineNo">062</span> * other TableRecordReader implementations.<a name="line.62"></a>
+<span class="sourceLineNo">063</span> *<a name="line.63"></a>
+<span class="sourceLineNo">064</span> * Subclasses MUST ensure initializeTable(Connection, TableName) is called for an instance to<a name="line.64"></a>
+<span class="sourceLineNo">065</span> * function properly. Each of the entry points to this class used by the MapReduce framework,<a name="line.65"></a>
+<span class="sourceLineNo">066</span> * {@link #createRecordReader(InputSplit, TaskAttemptContext)} and {@link #getSplits(JobContext)},<a name="line.66"></a>
+<span class="sourceLineNo">067</span> * will call {@link #initialize(JobContext)} as a convenient centralized location to handle<a name="line.67"></a>
+<span class="sourceLineNo">068</span> * retrieving the necessary configuration information. If your subclass overrides either of these<a name="line.68"></a>
+<span class="sourceLineNo">069</span> * methods, either call the parent version or call initialize yourself.<a name="line.69"></a>
+<span class="sourceLineNo">070</span> *<a name="line.70"></a>
+<span class="sourceLineNo">071</span> * &lt;p&gt;<a name="line.71"></a>
+<span class="sourceLineNo">072</span> * An example of a subclass:<a name="line.72"></a>
+<span class="sourceLineNo">073</span> * &lt;pre&gt;<a name="line.73"></a>
+<span class="sourceLineNo">074</span> *   class ExampleTIF extends TableInputFormatBase {<a name="line.74"></a>
+<span class="sourceLineNo">075</span> *<a name="line.75"></a>
+<span class="sourceLineNo">076</span> *     {@literal @}Override<a name="line.76"></a>
+<span class="sourceLineNo">077</span> *     protected void initialize(JobContext context) throws IOException {<a name="line.77"></a>
+<span class="sourceLineNo">078</span> *       // We are responsible for the lifecycle of this connection until we hand it over in<a name="line.78"></a>
+<span class="sourceLineNo">079</span> *       // initializeTable.<a name="line.79"></a>
+<span class="sourceLineNo">080</span> *       Connection connection = ConnectionFactory.createConnection(HBaseConfiguration.create(<a name="line.80"></a>
+<span class="sourceLineNo">081</span> *              job.getConfiguration()));<a name="line.81"></a>
+<span class="sourceLineNo">082</span> *       TableName tableName = TableName.valueOf("exampleTable");<a name="line.82"></a>
+<span class="sourceLineNo">083</span> *       // mandatory. once passed here, TableInputFormatBase will handle closing the connection.<a name="line.83"></a>
+<span class="sourceLineNo">084</span> *       initializeTable(connection, tableName);<a name="line.84"></a>
+<span class="sourceLineNo">085</span> *       byte[][] inputColumns = new byte [][] { Bytes.toBytes("columnA"),<a name="line.85"></a>
+<span class="sourceLineNo">086</span> *         Bytes.toBytes("columnB") };<a name="line.86"></a>
+<span class="sourceLineNo">087</span> *       // optional, by default we'll get everything for the table.<a name="line.87"></a>
+<span class="sourceLineNo">088</span> *       Scan scan = new Scan();<a name="line.88"></a>
+<span class="sourceLineNo">089</span> *       for (byte[] family : inputColumns) {<a name="line.89"></a>
+<span class="sourceLineNo">090</span> *         scan.addFamily(family);<a name="line.90"></a>
+<span class="sourceLineNo">091</span> *       }<a name="line.91"></a>
+<span class="sourceLineNo">092</span> *       Filter exampleFilter = new RowFilter(CompareOp.EQUAL, new RegexStringComparator("aa.*"));<a name="line.92"></a>
+<span class="sourceLineNo">093</span> *       scan.setFilter(exampleFilter);<a name="line.93"></a>
+<span class="sourceLineNo">094</span> *       setScan(scan);<a name="line.94"></a>
+<span class="sourceLineNo">095</span> *     }<a name="line.95"></a>
+<span class="sourceLineNo">096</span> *   }<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * &lt;/pre&gt;<a name="line.97"></a>
+<span class="sourceLineNo">098</span> */<a name="line.98"></a>
+<span class="sourceLineNo">099</span>@InterfaceAudience.Public<a name="line.99"></a>
+<span class="sourceLineNo">100</span>@InterfaceStability.Stable<a name="line.100"></a>
+<span class="sourceLineNo">101</span>public abstract class TableInputFormatBase<a name="line.101"></a>
+<span class="sourceLineNo">102</span>extends InputFormat&lt;ImmutableBytesWritable, Result&gt; {<a name="line.102"></a>
+<span class="sourceLineNo">103</span><a name="line.103"></a>
+<span class="sourceLineNo">104</span>  /** Specify if we enable auto-balance for input in M/R jobs.*/<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public static final String MAPREDUCE_INPUT_AUTOBALANCE = "hbase.mapreduce.input.autobalance";<a name="line.105"></a>
+<span class="sourceLineNo">106</span>  /** Specify if ratio for data skew in M/R jobs, it goes well with the enabling hbase.mapreduce<a name="line.106"></a>
+<span class="sourceLineNo">107</span>   * .input.autobalance property.*/<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  public static final String INPUT_AUTOBALANCE_MAXSKEWRATIO = "hbase.mapreduce.input.autobalance" +<a name="line.108"></a>
+<span class="sourceLineNo">109</span>          ".maxskewratio";<a name="line.109"></a>
+<span class="sourceLineNo">110</span>  /** Specify if the row key in table is text (ASCII between 32~126),<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   * default is true. False means the table is using binary row key*/<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  public static final String TABLE_ROW_TEXTKEY = "hbase.table.row.textkey";<a name="line.112"></a>
+<span class="sourceLineNo">113</span><a name="line.113"></a>
+<span class="sourceLineNo">114</span>  private static final Log LOG = LogFactory.getLog(TableInputFormatBase.class);<a name="line.114"></a>
 <span class="sourceLineNo">115</span><a name="line.115"></a>
-<span class="sourceLineNo">116</span>  private static final Log LOG = LogFactory.getLog(TableInputFormatBase.class);<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>  private static final String NOT_INITIALIZED = "The input format instance has not been properly " +<a name="line.118"></a>
-<span class="sourceLineNo">119</span>      "initialized. Ensure you call initializeTable either in your constructor or initialize " +<a name="line.119"></a>
-<span class="sourceLineNo">120</span>      "method";<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  private static final String INITIALIZATION_ERROR = "Cannot create a record reader because of a" +<a name="line.121"></a>
-<span class="sourceLineNo">122</span>            " previous error. Please look at the previous logs lines from" +<a name="line.122"></a>
-<span class="sourceLineNo">123</span>            " the task's full log for more details.";<a name="line.123"></a>
-<span class="sourceLineNo">124</span><a name="line.124"></a>
-<span class="sourceLineNo">125</span>  /** Holds the details for the internal scanner.<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   *<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @see Scan */<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  private Scan scan = null;<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  /** The {@link Admin}. */<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  private Admin admin;<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  /** The {@link Table} to scan. */<a name="line.131"></a>
-<span class="sourceLineNo">132</span>  private Table table;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  /** The {@link RegionLocator} of the table. */<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  private RegionLocator regionLocator;<a name="line.134"></a>
-<span class="sourceLineNo">135</span>  /** The reader scanning the table, can be a custom one. */<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  private TableRecordReader tableRecordReader = null;<a name="line.136"></a>
-<span class="sourceLineNo">137</span>  /** The underlying {@link Connection} of the table. */<a name="line.137"></a>
-<span class="sourceLineNo">138</span>  private Connection connection;<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>  /** The reverse DNS lookup cache mapping: IPAddress =&gt; HostName */<a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private HashMap&lt;InetAddress, String&gt; reverseDNSCacheMap =<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    new HashMap&lt;InetAddress, String&gt;();<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  /**<a name="line.145"></a>
-<span class="sourceLineNo">146</span>   * Builds a {@link TableRecordReader}. If no {@link TableRecordReader} was provided, uses<a name="line.146"></a>
-<span class="sourceLineNo">147</span>   * the default.<a name="line.147"></a>
-<span class="sourceLineNo">148</span>   *<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * @param split  The split to work with.<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   * @param context  The current context.<a name="line.150"></a>
-<span class="sourceLineNo">151</span>   * @return The newly created record reader.<a name="line.151"></a>
-<span class="sourceLineNo">152</span>   * @throws IOException When creating the reader fails.<a name="line.152"></a>
-<span class="sourceLineNo">153</span>   * @see org.apache.hadoop.mapreduce.InputFormat#createRecordReader(<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   *   org.apache.hadoop.mapreduce.InputSplit,<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   *   org.apache.hadoop.mapreduce.TaskAttemptContext)<a name="line.155"></a>
-<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
-<span class="sourceLineNo">157</span>  @Override<a name="line.157"></a>
-<span class="sourceLineNo">158</span>  public RecordReader&lt;ImmutableBytesWritable, Result&gt; createRecordReader(<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      InputSplit split, TaskAttemptContext context)<a name="line.159"></a>
-<span class="sourceLineNo">160</span>  throws IOException {<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    if (table == null) {<a name="line.162"></a>
-<span class="sourceLineNo">163</span>      initialize(context);<a name="line.163"></a>
-<span class="sourceLineNo">164</span>    }<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    // null check in case our child overrides getTable to not throw.<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    try {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      if (getTable() == null) {<a name="line.167"></a>
-<span class="sourceLineNo">168</span>        // initialize() must not have been implemented in the subclass.<a name="line.168"></a>
-<span class="sourceLineNo">169</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>      }<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    } catch (IllegalStateException exception) {<a name="line.171"></a>
-<span class="sourceLineNo">172</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    }<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    TableSplit tSplit = (TableSplit) split;<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    LOG.info("Input split length: " + StringUtils.humanReadableInt(tSplit.getLength()) + " bytes.");<a name="line.175"></a>
-<span class="sourceLineNo">176</span>    final TableRecordReader trr =<a name="line.176"></a>
-<span class="sourceLineNo">177</span>        this.tableRecordReader != null ? this.tableRecordReader : new TableRecordReader();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    Scan sc = new Scan(this.scan);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    sc.setStartRow(tSplit.getStartRow());<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    sc.setStopRow(tSplit.getEndRow());<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    trr.setScan(sc);<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    trr.setTable(getTable());<a name="line.182"></a>
-<span class="sourceLineNo">183</span>    return new RecordReader&lt;ImmutableBytesWritable, Result&gt;() {<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>      @Override<a name="line.185"></a>
-<span class="sourceLineNo">186</span>      public void close() throws IOException {<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        trr.close();<a name="line.187"></a>
-<span class="sourceLineNo">188</span>        closeTable();<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>      @Override<a name="line.191"></a>
-<span class="sourceLineNo">192</span>      public ImmutableBytesWritable getCurrentKey() throws IOException, InterruptedException {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>        return trr.getCurrentKey();<a name="line.193"></a>
-<span class="sourceLineNo">194</span>      }<a name="line.194"></a>
-<span class="sourceLineNo">195</span><a name="line.195"></a>
-<span class="sourceLineNo">196</span>      @Override<a name="line.196"></a>
-<span class="sourceLineNo">197</span>      public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        return trr.getCurrentValue();<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      }<a name="line.199"></a>
-<span class="sourceLineNo">200</span><a name="line.200"></a>
-<span class="sourceLineNo">201</span>      @Override<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      public float getProgress() throws IOException, InterruptedException {<a name="line.202"></a>
-<span class="sourceLineNo">203</span>        return trr.getProgress();<a name="line.203"></a>
-<span class="sourceLineNo">204</span>      }<a name="line.204"></a>
-<span class="sourceLineNo">205</span><a name="line.205"></a>
-<span class="sourceLineNo">206</span>      @Override<a name="line.206"></a>
-<span class="sourceLineNo">207</span>      public void initialize(InputSplit inputsplit, TaskAttemptContext context) throws IOException,<a name="line.207"></a>
-<span class="sourceLineNo">208</span>          InterruptedException {<a name="line.208"></a>
-<span class="sourceLineNo">209</span>        trr.initialize(inputsplit, context);<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      }<a name="line.210"></a>
-<span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>      @Override<a name="line.212"></a>
-<span class="sourceLineNo">213</span>      public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.213"></a>
-<span class="sourceLineNo">214</span>        return trr.nextKeyValue();<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      }<a name="line.215"></a>
-<span class="sourceLineNo">216</span>    };<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  }<a name="line.217"></a>
-<span class="sourceLineNo">218</span><a name="line.218"></a>
-<span class="sourceLineNo">219</span>  protected Pair&lt;byte[][],byte[][]&gt; getStartEndKeys() throws IOException {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    return getRegionLocator().getStartEndKeys();<a name="line.220"></a>
-<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
-<span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
-<span class="sourceLineNo">224</span>   * Calculates the splits that will serve as input for the map tasks. The<a name="line.224"></a>
-<span class="sourceLineNo">225</span>   * number of splits matches the number of regions in a table.<a name="line.225"></a>
-<span class="sourceLineNo">226</span>   *<a name="line.226"></a>
-<span class="sourceLineNo">227</span>   * @param context  The current job context.<a name="line.227"></a>
-<span class="sourceLineNo">228</span>   * @return The list of input splits.<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * @throws IOException When creating the list of splits fails.<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   */<a name="line.232"></a>
-<span class="sourceLineNo">233</span>  @Override<a name="line.233"></a>
-<span class="sourceLineNo">234</span>  public List&lt;InputSplit&gt; getSplits(JobContext context) throws IOException {<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    boolean closeOnFinish = false;<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    if (table == null) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      initialize(context);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      closeOnFinish = true;<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    }<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>    // null check in case our child overrides getTable to not throw.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>    try {<a name="line.244"></a>
-<span class="sourceLineNo">245</span>      if (getTable() == null) {<a name="line.245"></a>
-<span class="sourceLineNo">246</span>        // initialize() must not have been implemented in the subclass.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>      }<a name="line.248"></a>
-<span class="sourceLineNo">249</span>    } catch (IllegalStateException exception) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.250"></a>
-<span class="sourceLineNo">251</span>    }<a name="line.251"></a>
-<span class="sourceLineNo">252</span><a name="line.252"></a>
-<span class="sourceLineNo">253</span>    try {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>      RegionSizeCalculator sizeCalculator =<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          new RegionSizeCalculator(getRegionLocator(), getAdmin());<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      <a name="line.256"></a>
-<span class="sourceLineNo">257</span>      TableName tableName = getTable().getName();<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  <a name="line.258"></a>
-<span class="sourceLineNo">259</span>      Pair&lt;byte[][], byte[][]&gt; keys = getStartEndKeys();<a name="line.259"></a>
-<span class="sourceLineNo">260</span>      if (keys == null || keys.getFirst() == null ||<a name="line.260"></a>
-<span class="sourceLineNo">261</span>          keys.getFirst().length == 0) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        HRegionLocation regLoc =<a name="line.262"></a>
-<span class="sourceLineNo">263</span>            getRegionLocator().getRegionLocation(HConstants.EMPTY_BYTE_ARRAY, false);<a name="line.263"></a>
-<span class="sourceLineNo">264</span>        if (null == regLoc) {<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          throw new IOException("Expecting at least one region.");<a name="line.265"></a>
-<span class="sourceLineNo">266</span>        }<a name="line.266"></a>
-<span class="sourceLineNo">267</span>        List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(1);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>        long regionSize = sizeCalculator.getRegionSize(regLoc.getRegionInfo().getRegionName());<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        TableSplit split = new TableSplit(tableName, scan,<a name="line.269"></a>
-<span class="sourceLineNo">270</span>            HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY, regLoc<a name="line.270"></a>
-<span class="sourceLineNo">271</span>                .getHostnamePort().split(Addressing.HOSTNAME_PORT_SEPARATOR)[0], regionSize);<a name="line.271"></a>
-<span class="sourceLineNo">272</span>        splits.add(split);<a name="line.272"></a>
-<span class="sourceLineNo">273</span>        return splits;<a name="line.273"></a>
-<span class="sourceLineNo">274</span>      }<a name="line.274"></a>
-<span class="sourceLineNo">275</span>      List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(keys.getFirst().length);<a name="line.275"></a>
-<span class="sourceLineNo">276</span>      for (int i = 0; i &lt; keys.getFirst().length; i++) {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>        if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {<a name="line.277"></a>
-<span class="sourceLineNo">278</span>          continue;<a name="line.278"></a>
-<span class="sourceLineNo">279</span>        }<a name="line.279"></a>
-<span class="sourceLineNo">280</span>        HRegionLocation location = getRegionLocator().getRegionLocation(keys.getFirst()[i], false);<a name="line.280"></a>
-<span class="sourceLineNo">281</span>        // The below InetSocketAddress creation does a name resolution.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>        InetSocketAddress isa = new InetSocketAddress(location.getHostname(), location.getPort());<a name="line.282"></a>
-<span class="sourceLineNo">283</span>        if (isa.isUnresolved()) {<a name="line.283"></a>
-<span class="sourceLineNo">284</span>          LOG.warn("Failed resolve " + isa);<a name="line.284"></a>
-<span class="sourceLineNo">285</span>        }<a name="line.285"></a>
-<span class="sourceLineNo">286</span>        InetAddress regionAddress = isa.getAddress();<a name="line.286"></a>
-<span class="sourceLineNo">287</span>        String regionLocation;<a name="line.287"></a>
-<span class="sourceLineNo">288</span>        try {<a name="line.288"></a>
-<span class="sourceLineNo">289</span>          regionLocation = reverseDNS(regionAddress);<a name="line.289"></a>
-<span class="sourceLineNo">290</span>        } catch (NamingException e) {<a name="line.290"></a>
-<span class="sourceLineNo">291</span>          LOG.warn("Cannot resolve the host name for " + regionAddress + " because of " + e);<a name="line.291"></a>
-<span class="sourceLineNo">292</span>          regionLocation = location.getHostname();<a name="line.292"></a>
-<span class="sourceLineNo">293</span>        }<a name="line.293"></a>
-<span class="sourceLineNo">294</span>  <a name="line.294"></a>
-<span class="sourceLineNo">295</span>        byte[] startRow = scan.getStartRow();<a name="line.295"></a>
-<span class="sourceLineNo">296</span>        byte[] stopRow = scan.getStopRow();<a name="line.296"></a>
-<span class="sourceLineNo">297</span>        // determine if the given start an stop key fall into the region<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||<a name="line.298"></a>
-<span class="sourceLineNo">299</span>            Bytes.compareTo(startRow, keys.getSecond()[i]) &lt; 0) &amp;&amp;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>            (stopRow.length == 0 ||<a name="line.300"></a>
-<span class="sourceLineNo">301</span>             Bytes.compareTo(stopRow, keys.getFirst()[i]) &gt; 0)) {<a name="line.301"></a>
-<span class="sourceLineNo">302</span>          byte[] splitStart = startRow.length == 0 ||<a name="line.302"></a>
-<span class="sourceLineNo">303</span>            Bytes.compareTo(keys.getFirst()[i], startRow) &gt;= 0 ?<a name="line.303"></a>
-<span class="sourceLineNo">304</span>              keys.getFirst()[i] : startRow;<a name="line.304"></a>
-<span class="sourceLineNo">305</span>          byte[] splitStop = (stopRow.length == 0 ||<a name="line.305"></a>
-<span class="sourceLineNo">306</span>            Bytes.compareTo(keys.getSecond()[i], stopRow) &lt;= 0) &amp;&amp;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>            keys.getSecond()[i].length &gt; 0 ?<a name="line.307"></a>
-<span class="sourceLineNo">308</span>              keys.getSecond()[i] : stopRow;<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  <a name="line.309"></a>
-<span class="sourceLineNo">310</span>          byte[] regionName = location.getRegionInfo().getRegionName();<a name="line.310"></a>
-<span class="sourceLineNo">311</span>          long regionSize = sizeCalculator.getRegionSize(regionName);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>          TableSplit split = new TableSplit(tableName, scan,<a name="line.312"></a>
-<span class="sourceLineNo">313</span>            splitStart, splitStop, regionLocation, regionSize);<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          splits.add(split);<a name="line.314"></a>
-<span class="sourceLineNo">315</span>          if (LOG.isDebugEnabled()) {<a name="line.315"></a>
-<span class="sourceLineNo">316</span>            LOG.debug("getSplits: split -&gt; " + i + " -&gt; " + split);<a name="line.316"></a>
-<span class="sourceLineNo">317</span>          }<a name="line.317"></a>
-<span class="sourceLineNo">318</span>        }<a name="line.318"></a>
-<span class="sourceLineNo">319</span>      }<a name="line.319"></a>
-<span class="sourceLineNo">320</span>      //The default value of "hbase.mapreduce.input.autobalance" is false, which means not enabled.<a name="line.320"></a>
-<span class="sourceLineNo">321</span>      boolean enableAutoBalance = context.getConfiguration()<a name="line.321"></a>
-<span class="sourceLineNo">322</span>        .getBoolean(MAPREDUCE_INPUT_AUTOBALANCE, false);<a name="line.322"></a>
-<span class="sourceLineNo">323</span>      if (enableAutoBalance) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long totalRegionSize=0;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        for (int i = 0; i &lt; splits.size(); i++){<a name="line.325"></a>
-<span class="sourceLineNo">326</span>          TableSplit ts = (TableSplit)splits.get(i);<a name="line.326"></a>
-<span class="sourceLineNo">327</span>          totalRegionSize += ts.getLength();<a name="line.327"></a>
+<span class="sourceLineNo">116</span>  private static final String NOT_INITIALIZED = "The input format instance has not been properly " +<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      "initialized. Ensure you call initializeTable either in your constructor or initialize " +<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      "method";<a name="line.118"></a>
+<span class="sourceLineNo">119</span>  private static final String INITIALIZATION_ERROR = "Cannot create a record reader because of a" +<a name="line.119"></a>
+<span class="sourceLineNo">120</span>            " previous error. Please look at the previous logs lines from" +<a name="line.120"></a>
+<span class="sourceLineNo">121</span>            " the task's full log for more details.";<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  /** Holds the details for the internal scanner.<a name="line.123"></a>
+<span class="sourceLineNo">124</span>   *<a name="line.124"></a>
+<span class="sourceLineNo">125</span>   * @see Scan */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private Scan scan = null;<a name="line.126"></a>
+<span class="sourceLineNo">127</span>  /** The {@link Admin}. */<a name="line.127"></a>
+<span class="sourceLineNo">128</span>  private Admin admin;<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  /** The {@link Table} to scan. */<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  private Table table;<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  /** The {@link RegionLocator} of the table. */<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  private RegionLocator regionLocator;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>  /** The reader scanning the table, can be a custom one. */<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  private TableRecordReader tableRecordReader = null;<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  /** The underlying {@link Connection} of the table. */<a name="line.135"></a>
+<span class="sourceLineNo">136</span>  private Connection connection;<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>  /** The reverse DNS lookup cache mapping: IPAddress =&gt; HostName */<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  private HashMap&lt;InetAddress, String&gt; reverseDNSCacheMap =<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    new HashMap&lt;InetAddress, String&gt;();<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>  /**<a name="line.143"></a>
+<span class="sourceLineNo">144</span>   * Builds a {@link TableRecordReader}. If no {@link TableRecordReader} was provided, uses<a name="line.144"></a>
+<span class="sourceLineNo">145</span>   * the default.<a name="line.145"></a>
+<span class="sourceLineNo">146</span>   *<a name="line.146"></a>
+<span class="sourceLineNo">147</span>   * @param split  The split to work with.<a name="line.147"></a>
+<span class="sourceLineNo">148</span>   * @param context  The current context.<a name="line.148"></a>
+<span class="sourceLineNo">149</span>   * @return The newly created record reader.<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * @throws IOException When creating the reader fails.<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   * @see org.apache.hadoop.mapreduce.InputFormat#createRecordReader(<a name="line.151"></a>
+<span class="sourceLineNo">152</span>   *   org.apache.hadoop.mapreduce.InputSplit,<a name="line.152"></a>
+<span class="sourceLineNo">153</span>   *   org.apache.hadoop.mapreduce.TaskAttemptContext)<a name="line.153"></a>
+<span class="sourceLineNo">154</span>   */<a name="line.154"></a>
+<span class="sourceLineNo">155</span>  @Override<a name="line.155"></a>
+<span class="sourceLineNo">156</span>  public RecordReader&lt;ImmutableBytesWritable, Result&gt; createRecordReader(<a name="line.156"></a>
+<span class="sourceLineNo">157</span>      InputSplit split, TaskAttemptContext context)<a name="line.157"></a>
+<span class="sourceLineNo">158</span>  throws IOException {<a name="line.158"></a>
+<span class="sourceLineNo">159</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    if (table == null) {<a name="line.160"></a>
+<span class="sourceLineNo">161</span>      initialize(context);<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    }<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // null check in case our child overrides getTable to not throw.<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    try {<a name="line.164"></a>
+<span class="sourceLineNo">165</span>      if (getTable() == null) {<a name="line.165"></a>
+<span class="sourceLineNo">166</span>        // initialize() must not have been implemented in the subclass.<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.167"></a>
+<span class="sourceLineNo">168</span>      }<a name="line.168"></a>
+<span class="sourceLineNo">169</span>    } catch (IllegalStateException exception) {<a name="line.169"></a>
+<span class="sourceLineNo">170</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    }<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    TableSplit tSplit = (TableSplit) split;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    LOG.info("Input split length: " + StringUtils.humanReadableInt(tSplit.getLength()) + " bytes.");<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    final TableRecordReader trr =<a name="line.174"></a>
+<span class="sourceLineNo">175</span>        this.tableRecordReader != null ? this.tableRecordReader : new TableRecordReader();<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    Scan sc = new Scan(this.scan);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    sc.setStartRow(tSplit.getStartRow());<a name="line.177"></a>
+<span class="sourceLineNo">178</span>    sc.setStopRow(tSplit.getEndRow());<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    trr.setScan(sc);<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    trr.setTable(getTable());<a name="line.180"></a>
+<span class="sourceLineNo">181</span>    return new RecordReader&lt;ImmutableBytesWritable, Result&gt;() {<a name="line.181"></a>
+<span class="sourceLineNo">182</span><a name="line.182"></a>
+<span class="sourceLineNo">183</span>      @Override<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      public void close() throws IOException {<a name="line.184"></a>
+<span class="sourceLineNo">185</span>        trr.close();<a name="line.185"></a>
+<span class="sourceLineNo">186</span>        closeTable();<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      }<a name="line.187"></a>
+<span class="sourceLineNo">188</span><a name="line.188"></a>
+<span class="sourceLineNo">189</span>      @Override<a name="line.189"></a>
+<span class="sourceLineNo">190</span>      public ImmutableBytesWritable getCurrentKey() throws IOException, InterruptedException {<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        return trr.getCurrentKey();<a name="line.191"></a>
+<span class="sourceLineNo">192</span>      }<a name="line.192"></a>
+<span class="sourceLineNo">193</span><a name="line.193"></a>
+<span class="sourceLineNo">194</span>      @Override<a name="line.194"></a>
+<span class="sourceLineNo">195</span>      public Result getCurrentValue() throws IOException, InterruptedException {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>        return trr.getCurrentValue();<a name="line.196"></a>
+<span class="sourceLineNo">197</span>      }<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>      @Override<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      public float getProgress() throws IOException, InterruptedException {<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        return trr.getProgress();<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
+<span class="sourceLineNo">203</span><a name="line.203"></a>
+<span class="sourceLineNo">204</span>      @Override<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      public void initialize(InputSplit inputsplit, TaskAttemptContext context) throws IOException,<a name="line.205"></a>
+<span class="sourceLineNo">206</span>          InterruptedException {<a name="line.206"></a>
+<span class="sourceLineNo">207</span>        trr.initialize(inputsplit, context);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      }<a name="line.208"></a>
+<span class="sourceLineNo">209</span><a name="line.209"></a>
+<span class="sourceLineNo">210</span>      @Override<a name="line.210"></a>
+<span class="sourceLineNo">211</span>      public boolean nextKeyValue() throws IOException, InterruptedException {<a name="line.211"></a>
+<span class="sourceLineNo">212</span>        return trr.nextKeyValue();<a name="line.212"></a>
+<span class="sourceLineNo">213</span>      }<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    };<a name="line.214"></a>
+<span class="sourceLineNo">215</span>  }<a name="line.215"></a>
+<span class="sourceLineNo">216</span><a name="line.216"></a>
+<span class="sourceLineNo">217</span>  protected Pair&lt;byte[][],byte[][]&gt; getStartEndKeys() throws IOException {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>    return getRegionLocator().getStartEndKeys();<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>   * Calculates the splits that will serve as input for the map tasks. The<a name="line.222"></a>
+<span class="sourceLineNo">223</span>   * number of splits matches the number of regions in a table.<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   *<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * @param context  The current job context.<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * @return The list of input splits.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   * @throws IOException When creating the list of splits fails.<a name="line.227"></a>
+<span class="sourceLineNo">228</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.228"></a>
+<span class="sourceLineNo">229</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.229"></a>
+<span class="sourceLineNo">230</span>   */<a name="line.230"></a>
+<span class="sourceLineNo">231</span>  @Override<a name="line.231"></a>
+<span class="sourceLineNo">232</span>  public List&lt;InputSplit&gt; getSplits(JobContext context) throws IOException {<a name="line.232"></a>
+<span class="sourceLineNo">233</span>    boolean closeOnFinish = false;<a name="line.233"></a>
+<span class="sourceLineNo">234</span><a name="line.234"></a>
+<span class="sourceLineNo">235</span>    // Just in case a subclass is relying on JobConfigurable magic.<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    if (table == null) {<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      initialize(context);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      closeOnFinish = true;<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>    // null check in case our child overrides getTable to not throw.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    try {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      if (getTable() == null) {<a name="line.243"></a>
+<span class="sourceLineNo">244</span>        // initialize() must not have been implemented in the subclass.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>        throw new IOException(INITIALIZATION_ERROR);<a name="line.245"></a>
+<span class="sourceLineNo">246</span>      }<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    } catch (IllegalStateException exception) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>      throw new IOException(INITIALIZATION_ERROR, exception);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    }<a name="line.249"></a>
+<span class="sourceLineNo">250</span><a name="line.250"></a>
+<span class="sourceLineNo">251</span>    try {<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      RegionSizeCalculator sizeCalculator =<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          new RegionSizeCalculator(getRegionLocator(), getAdmin());<a name="line.253"></a>
+<span class="sourceLineNo">254</span>      <a name="line.254"></a>
+<span class="sourceLineNo">255</span>      TableName tableName = getTable().getName();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>  <a name="line.256"></a>
+<span class="sourceLineNo">257</span>      Pair&lt;byte[][], byte[][]&gt; keys = getStartEndKeys();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>      if (keys == null || keys.getFirst() == null ||<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          keys.getFirst().length == 0) {<a name="line.259"></a>
+<span class="sourceLineNo">260</span>        HRegionLocation regLoc =<a name="line.260"></a>
+<span class="sourceLineNo">261</span>            getRegionLocator().getRegionLocation(HConstants.EMPTY_BYTE_ARRAY, false);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>        if (null == regLoc) {<a name="line.262"></a>
+<span class="sourceLineNo">263</span>          throw new IOException("Expecting at least one region.");<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        }<a name="line.264"></a>
+<span class="sourceLineNo">265</span>        List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(1);<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        long regionSize = sizeCalculator.getRegionSize(regLoc.getRegionInfo().getRegionName());<a name="line.266"></a>
+<span class="sourceLineNo">267</span>        TableSplit split = new TableSplit(tableName, scan,<a name="line.267"></a>
+<span class="sourceLineNo">268</span>            HConstants.EMPTY_BYTE_ARRAY, HConstants.EMPTY_BYTE_ARRAY, regLoc<a name="line.268"></a>
+<span class="sourceLineNo">269</span>                .getHostnamePort().split(Addressing.HOSTNAME_PORT_SEPARATOR)[0], regionSize);<a name="line.269"></a>
+<span class="sourceLineNo">270</span>        splits.add(split);<a name="line.270"></a>
+<span class="sourceLineNo">271</span>        return splits;<a name="line.271"></a>
+<span class="sourceLineNo">272</span>      }<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      List&lt;InputSplit&gt; splits = new ArrayList&lt;InputSplit&gt;(keys.getFirst().length);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>      for (int i = 0; i &lt; keys.getFirst().length; i++) {<a name="line.274"></a>
+<span class="sourceLineNo">275</span>        if (!includeRegionInSplit(keys.getFirst()[i], keys.getSecond()[i])) {<a name="line.275"></a>
+<span class="sourceLineNo">276</span>          continue;<a name="line.276"></a>
+<span class="sourceLineNo">277</span>        }<a name="line.277"></a>
+<span class="sourceLineNo">278</span>        HRegionLocation location = getRegionLocator().getRegionLocation(keys.getFirst()[i], false);<a name="line.278"></a>
+<span class="sourceLineNo">279</span>        // The below InetSocketAddress creation does a name resolution.<a name="line.279"></a>
+<span class="sourceLineNo">280</span>        InetSocketAddress isa = new InetSocketAddress(location.getHostname(), location.getPort());<a name="line.280"></a>
+<span class="sourceLineNo">281</span>        if (isa.isUnresolved()) {<a name="line.281"></a>
+<span class="sourceLineNo">282</span>          LOG.warn("Failed resolve " + isa);<a name="line.282"></a>
+<span class="sourceLineNo">283</span>        }<a name="line.283"></a>
+<span class="sourceLineNo">284</span>        InetAddress regionAddress = isa.getAddress();<a name="line.284"></a>
+<span class="sourceLineNo">285</span>        String regionLocation;<a name="line.285"></a>
+<span class="sourceLineNo">286</span>        regionLocation = reverseDNS(regionAddress);<a name="line.286"></a>
+<span class="sourceLineNo">287</span>  <a name="line.287"></a>
+<span class="sourceLineNo">288</span>        byte[] startRow = scan.getStartRow();<a name="line.288"></a>
+<span class="sourceLineNo">289</span>        byte[] stopRow = scan.getStopRow();<a name="line.289"></a>
+<span class="sourceLineNo">290</span>        // determine if the given start an stop key fall into the region<a name="line.290"></a>
+<span class="sourceLineNo">291</span>        if ((startRow.length == 0 || keys.getSecond()[i].length == 0 ||<a name="line.291"></a>
+<span class="sourceLineNo">292</span>            Bytes.compareTo(startRow, keys.getSecond()[i]) &lt; 0) &amp;&amp;<a name="line.292"></a>
+<span class="sourceLineNo">293</span>            (stopRow.length == 0 ||<a name="line.293"></a>
+<span class="sourceLineNo">294</span>             Bytes.compareTo(stopRow, keys.getFirst()[i]) &gt; 0)) {<a name="line.294"></a>
+<span class="sourceLineNo">295</span>          byte[] splitStart = startRow.length == 0 ||<a name="line.295"></a>
+<span class="sourceLineNo">296</span>            Bytes.compareTo(keys.getFirst()[i], startRow) &gt;= 0 ?<a name="line.296"></a>
+<span class="sourceLineNo">297</span>              keys.getFirst()[i] : startRow;<a name="line.297"></a>
+<span class="sourceLineNo">298</span>          byte[] splitStop = (stopRow.length == 0 ||<a name="line.298"></a>
+<span class="sourceLineNo">299</span>            Bytes.compareTo(keys.getSecond()[i], stopRow) &lt;= 0) &amp;&amp;<a name="line.299"></a>
+<span class="sourceLineNo">300</span>            keys.getSecond()[i].length &gt; 0 ?<a name="line.300"></a>
+<span class="sourceLineNo">301</span>              keys.getSecond()[i] : stopRow;<a name="line.301"></a>
+<span class="sourceLineNo">302</span>  <a name="line.302"></a>
+<span class="sourceLineNo">303</span>          byte[] regionName = location.getRegionInfo().getRegionName();<a name="line.303"></a>
+<span class="sourceLineNo">304</span>          long regionSize = sizeCalculator.getRegionSize(regionName);<a name="line.304"></a>
+<span class="sourceLineNo">305</span>          TableSplit split = new TableSplit(tableName, scan,<a name="line.305"></a>
+<span class="sourceLineNo">306</span>            splitStart, splitStop, regionLocation, regionSize);<a name="line.306"></a>
+<span class="sourceLineNo">307</span>          splits.add(split);<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          if (LOG.isDebugEnabled()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>            LOG.debug("getSplits: split -&gt; " + i + " -&gt; " + split);<a name="line.309"></a>
+<span class="sourceLineNo">310</span>          }<a name="line.310"></a>
+<span class="sourceLineNo">311</span>        }<a name="line.311"></a>
+<span class="sourceLineNo">312</span>      }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      //The default value of "hbase.mapreduce.input.autobalance" is false, which means not enabled.<a name="line.313"></a>
+<span class="sourceLineNo">314</span>      boolean enableAutoBalance = context.getConfiguration()<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        .getBoolean(MAPREDUCE_INPUT_AUTOBALANCE, false);<a name="line.315"></a>
+<span class="sourceLineNo">316</span>      if (enableAutoBalance) {<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        long totalRegionSize=0;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>        for (int i = 0; i &lt; splits.size(); i++){<a name="line.318"></a>
+<span class="sourceLineNo">319</span>          TableSplit ts = (TableSplit)splits.get(i);<a name="line.319"></a>
+<span class="sourceLineNo">320</span>          totalRegionSize += ts.getLength();<a name="line.320"></a>
+<span class="sourceLineNo">321</span>        }<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        long averageRegionSize = totalRegionSize / splits.size();<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        // the averageRegionSize must be positive.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>        if (averageRegionSize &lt;= 0) {<a name="line.324"></a>
+<span class="sourceLineNo">325</span>            LOG.warn("The averageRegionSize is not positive: "+ averageRegionSize + ", " +<a name="line.325"></a>
+<span class="sourceLineNo">326</span>                    "set it to 1.");<a name="line.326"></a>
+<span class="sourceLineNo">327</span>            averageRegionSize = 1;<a name="line.327"></a>
 <span class="sourceLineNo">328</span>        }<a name="line.328"></a>
-<span class="sourceLineNo">329</span>        long averageRegionSize = totalRegionSize / splits.size();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        // the averageRegionSize must be positive.<a name="line.330"></a>
-<span class="sourceLineNo">331</span>        if (averageRegionSize &lt;= 0) {<a name="line.331"></a>
-<span class="sourceLineNo">332</span>            LOG.warn("The averageRegionSize is not positive: "+ averageRegionSize + ", " +<a name="line.332"></a>
-<span class="sourceLineNo">333</span>                    "set it to 1.");<a name="line.333"></a>
-<span class="sourceLineNo">334</span>            averageRegionSize = 1;<a name="line.334"></a>
-<span class="sourceLineNo">335</span>        }<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        return calculateRebalancedSplits(splits, context, averageRegionSize);<a name="line.336"></a>
-<span class="sourceLineNo">337</span>      } else {<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        return splits;<a name="line.338"></a>
-<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
-<span class="sourceLineNo">340</span>    } finally {<a name="line.340"></a>
-<span class="sourceLineNo">341</span>      if (closeOnFinish) {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        closeTable();<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><a name="line.346"></a>
-<span class="sourceLineNo">347</span>  String reverseDNS(InetAddress ipAddress) throws NamingException, UnknownHostException {<a name="line.347"></a>
-<span class="sourceLineNo">348</span>    String hostName = this.reverseDNSCacheMap.get(ipAddress);<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (hostName == null) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      String ipAddressString = null;<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      try {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>        ipAddressString = DNS.reverseDns(ipAddress, null);<a name="line.352"></a>
-<span class="sourceLineNo">353</span>      } catch (Exception e) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>        // We can use InetAddress in case the jndi failed to pull up the reverse DNS entry from the<a name="line.354"></a>
-<span class="sourceLineNo">355</span>        // name service. Also, in case of ipv6, we need to use the InetAddress since resolving<a name="line.355"></a>
-<span class="sourceLineNo">356</span>        // reverse DNS using jndi doesn't work well with ipv6 addresses.<a name="line.356"></a>
-<span class="sourceLineNo">357</span>        ipAddressString = InetAddress.getByName(ipAddress.getHostAddress()).getHostName();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>      }<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      if (ipAddressString == null) throw new UnknownHostException("No host found for " + ipAddress);<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      hostName = Strings.domainNamePointerToHostName(ipAddressString);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>      this.reverseDNSCacheMap.put(ipAddress, hostName);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
-<span class="sourceLineNo">363</span>    return hostName;<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>  /**<a name="line.366"></a>
-<span class="sourceLineNo">367</span>   * Calculates the number of MapReduce input splits for the map tasks. The number of<a name="line.367"></a>
-<span class="sourceLineNo">368</span>   * MapReduce input splits depends on the average region size and the "data skew ratio" user set in<a name="line.368"></a>
-<span class="sourceLineNo">369</span>   * configuration.<a name="line.369"></a>
-<span class="sourceLineNo">370</span>   *<a name="line.370"></a>
-<span class="sourceLineNo">371</span>   * @param list  The list of input splits before balance.<a name="line.371"></a>
-<span class="sourceLineNo">372</span>   * @param context  The current job context.<a name="line.372"></a>
-<span class="sourceLineNo">373</span>   * @param average  The average size of all regions .<a name="line.373"></a>
-<span class="sourceLineNo">374</span>   * @return The list of input splits.<a name="line.374"></a>
-<span class="sourceLineNo">375</span>   * @throws IOException When creating the list of splits fails.<a name="line.375"></a>
-<span class="sourceLineNo">376</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.376"></a>
-<span class="sourceLineNo">377</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.377"></a>
-<span class="sourceLineNo">378</span>   */<a name="line.378"></a>
-<span class="sourceLineNo">379</span>  private List&lt;InputSplit&gt; calculateRebalancedSplits(List&lt;InputSplit&gt; list, JobContext context,<a name="line.379"></a>
-<span class="sourceLineNo">380</span>                                               long average) throws IOException {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    List&lt;InputSplit&gt; resultList = new ArrayList&lt;InputSplit&gt;();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    Configuration conf = context.getConfiguration();<a name="line.382"></a>
-<span class="sourceLineNo">383</span>    //The default data skew ratio is 3<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    long dataSkewRatio = conf.getLong(INPUT_AUTOBALANCE_MAXSKEWRATIO, 3);<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    //It determines which mode to use: text key mode or binary key mode. The default is text mode.<a name="line.385"></a>
-<span class="sourceLineNo">386</span>    boolean isTextKey = context.getConfiguration().getBoolean(TABLE_ROW_TEXTKEY, true);<a name="line.386"></a>
-<span class="sourceLineNo">387</span>    long dataSkewThreshold = dataSkewRatio * average;<a name="line.387"></a>
-<span class="sourceLineNo">388</span>    int count = 0;<a name="line.388"></a>
-<span class="sourceLineNo">389</span>    while (count &lt; list.size()) {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      TableSplit ts = (TableSplit)list.get(count);<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      TableName tableName = ts.getTable();<a name="line.391"></a>
-<span class="sourceLineNo">392</span>      String regionLocation = ts.getRegionLocation();<a name="line.392"></a>
-<span class="sourceLineNo">393</span>      long regionSize = ts.getLength();<a name="line.393"></a>
-<span class="sourceLineNo">394</span>      if (regionSize &gt;= dataSkewThreshold) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>        // if the current region size is large than the data skew threshold,<a name="line.395"></a>
-<span class="sourceLineNo">396</span>        // split the region into two MapReduce input splits.<a name="line.396"></a>
-<span class="sourceLineNo">397</span>        byte[] splitKey = getSplitKey(ts.getStartRow(), ts.getEndRow(), isTextKey);<a name="line.397"></a>
-<span class="sourceLineNo">398</span>         //Set the size of child TableSplit as 1/2 of the region size. The exact size of the<a name="line.398"></a>
-<span class="sourceLineNo">399</span>         // MapReduce input splits is not far off.<a name="line.399"></a>
-<span class="sourceLineNo">400</span>        TableSplit t1 = new TableSplit(tableName, scan, ts.getStartRow(), splitKey, regionLocation,<a name="line.400"></a>
-<span class="sourceLineNo">401</span>                regionSize / 2);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>        TableSplit t2 = new TableSplit(tableName, scan, splitKey, ts.getEndRow(), regionLocation,<a name="line.402"></a>
-<span class="sourceLineNo">403</span>                regionSize - regionSize / 2);<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        resultList.add(t1);<a name="line.404"></a>
-<span class="sourceLineNo">405</span>        resultList.add(t2);<a name="line.405"></a>
-<span class="sourceLineNo">406</span>        count++;<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      } else if (regionSize &gt;= average) {<a name="line.407"></a>
-<span class="sourceLineNo">408</span>        // if the region size between average size and data skew threshold size,<a name="line.408"></a>
-<span class="sourceLineNo">409</span>        // make this region as one MapReduce input split.<a name="line.409"></a>
-<span class="sourceLineNo">410</span>        resultList.add(ts);<a name="line.410"></a>
+<span class="sourceLineNo">329</span>        return calculateRebalancedSplits(splits, context, averageRegionSize);<a name="line.329"></a>
+<span class="sourceLineNo">330</span>      } else {<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        return splits;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>      }<a name="line.332"></a>
+<span class="sourceLineNo">333</span>    } finally {<a name="line.333"></a>
+<span class="sourceLineNo">334</span>      if (closeOnFinish) {<a name="line.334"></a>
+<span class="sourceLineNo">335</span>        closeTable();<a name="line.335"></a>
+<span class="sourceLineNo">336</span>      }<a name="line.336"></a>
+<span class="sourceLineNo">337</span>    }<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  String reverseDNS(InetAddress ipAddress) throws UnknownHostException {<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    String hostName = this.reverseDNSCacheMap.get(ipAddress);<a name="line.341"></a>
+<span class="sourceLineNo">342</span>    if (hostName == null) {<a name="line.342"></a>
+<span class="sourceLineNo">343</span>      String ipAddressString = null;<a name="line.343"></a>
+<span class="sourceLineNo">344</span>      try {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>        ipAddressString = DNS.reverseDns(ipAddress, null);<a name="line.345"></a>
+<span class="sourceLineNo">346</span>      } catch (Exception e) {<a name="line.346"></a>
+<span class="sourceLineNo">347</span>        // We can use InetAddress in case the jndi failed to pull up the reverse DNS entry from the<a name="line.347"></a>
+<span class="sourceLineNo">348</span>        // name service. Also, in case of ipv6, we need to use the InetAddress since resolving<a name="line.348"></a>
+<span class="sourceLineNo">349</span>        // reverse DNS using jndi doesn't work well with ipv6 addresses.<a name="line.349"></a>
+<span class="sourceLineNo">350</span>        ipAddressString = InetAddress.getByName(ipAddress.getHostAddress()).getHostName();<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      }<a name="line.351"></a>
+<span class="sourceLineNo">352</span>      if (ipAddressString == null) throw new UnknownHostException("No host found for " + ipAddress);<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      hostName = Strings.domainNamePointerToHostName(ipAddressString);<a name="line.353"></a>
+<span class="sourceLineNo">354</span>      this.reverseDNSCacheMap.put(ipAddress, hostName);<a name="line.354"></a>
+<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    return hostName;<a name="line.356"></a>
+<span class="sourceLineNo">357</span>  }<a name="line.357"></a>
+<span class="sourceLineNo">358</span><a name="line.358"></a>
+<span class="sourceLineNo">359</span>  /**<a name="line.359"></a>
+<span class="sourceLineNo">360</span>   * Calculates the number of MapReduce input splits for the map tasks. The number of<a name="line.360"></a>
+<span class="sourceLineNo">361</span>   * MapReduce input splits depends on the average region size and the "data skew ratio" user set in<a name="line.361"></a>
+<span class="sourceLineNo">362</span>   * configuration.<a name="line.362"></a>
+<span class="sourceLineNo">363</span>   *<a name="line.363"></a>
+<span class="sourceLineNo">364</span>   * @param list  The list of input splits before balance.<a name="line.364"></a>
+<span class="sourceLineNo">365</span>   * @param context  The current job context.<a name="line.365"></a>
+<span class="sourceLineNo">366</span>   * @param average  The average size of all regions .<a name="line.366"></a>
+<span class="sourceLineNo">367</span>   * @return The list of input splits.<a name="line.367"></a>
+<span class="sourceLineNo">368</span>   * @throws IOException When creating the list of splits fails.<a name="line.368"></a>
+<span class="sourceLineNo">369</span>   * @see org.apache.hadoop.mapreduce.InputFormat#getSplits(<a name="line.369"></a>
+<span class="sourceLineNo">370</span>   *   org.apache.hadoop.mapreduce.JobContext)<a name="line.370"></a>
+<span class="sourceLineNo">371</span>   */<a name="line.371"></a>
+<span class="sourceLineNo">372</span>  private List&lt;InputSplit&gt; calculateRebalancedSplits(List&lt;InputSplit&gt; list, JobContext context,<a name="line.372"></a>
+<span class="sourceLineNo">373</span>                                               long average) throws IOException {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    List&lt;InputSplit&gt; resultList = new ArrayList&lt;InputSplit&gt;();<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    Configuration conf = context.getConfiguration();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    //The default data skew ratio is 3<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    long dataSkewRatio = conf.getLong(INPUT_AUTOBALANCE_MAXSKEWRATIO, 3);<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    //It determines which mode to use: text key mode or binary key mode. The default is text mode.<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    boolean isTextKey = context.getConfiguration().getBoolean(TABLE_ROW_TEXTKEY, true);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    long dataSkewThreshold = dataSkewRatio * average;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    int count = 0;<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    while (count &lt; list.size()) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      TableSplit ts = (TableSplit)list.get(count);<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      TableName tableName = ts.getTable();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      String regionLocation = ts.getRegionLocation();<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      long regionSize = ts.getLength();<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      if (regionSize &gt;= dataSkewThreshold) {<a name="line.387"></a>
+<span class="sourceLineNo">388</span>        // if the current region size is large than the data skew threshold,<a name="line.388"></a>
+<span class="sourceLineNo">389</span>        // split the region into two MapReduce input splits.<a name="line.389"></a>
+<span class="sourceLineNo">390</span>        byte[] splitKey = getSplitKey(ts.getStartRow(), ts.getEndRow(), isTextKey);<a name="line.390"></a>
+<span class="sourceLineNo">391</span>         //Set the size of child TableSplit as 1/2 of the region size. The exact size of the<a name="line.391"></a>
+<span class="sourceLineNo">392</span>         // MapReduce input splits is not far off.<a name="line.392"></a>
+<span class="sourceLineNo">393</span>        TableSplit t1 = new TableSplit(tableName, scan, ts.getStartRow(), splitKey, regionLocation,<a name="line.393"></a>
+<span class="sourceLineNo">394</span>                regionSize / 2);<a name="line.394"></a>
+<span class="sourceLineNo">395</span>        TableSplit t2 = new TableSplit(tableName, scan, splitKey, ts.getEndRow(), regionLocation,<a name="line.395"></a>
+<span class="sourceLineNo">396</span>                regionSize - regionSize / 2);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>        resultList.add(t1);<a name="line.397"></a>
+<span class="sourceLineNo">398</span>        resultList.add(t2);<a name="line.398"></a>
+<span class="sourceLineNo">399</span>        count++;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      } else if (regionSize &gt;= average) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>        // if the region size between average size and data skew threshold size,<a name="line.401"></a>
+<span class="sourceLineNo">402</span>        // make this region as one MapReduce input split.<a name="line.402"></a>
+<span class="sourceLineNo">403</span>        resultList.add(ts);<a name="line.403"></a>
+<span class="sourceLineNo">404</span>        count++;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      } else {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>        // if the total size of several small continuous regions less than the average region size,<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        // combine them into one MapReduce input split.<a name="line.407"></a>
+<span class="sourceLineNo">408</span>        long totalSize = regionSize;<a name="line.408"></a>
+<span class="sourceLineNo">409</span>        byte[] splitStartKey = ts.getStartRow();<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        byte[] splitEndKey = ts.getEndRow();<a name="line.410"></a>
 <span class="sourceLineNo">411</span>        count++;<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      } else {<a name="line.412"></a>
-<span class="sourceLineNo">413</span>        // if the total size of several small continuous regions less than the average region size,<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        // combine them into one MapReduce input split.<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        long totalSize = regionSize;<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        byte[] splitStartKey = ts.getStartRow();<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        byte[] splitEndKey = ts.getEndRow();<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        count++;<a name="line.418"></a>
-<span class="sourceLineNo">419</span>        for (; count &lt; list.size(); count++) {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          TableSplit nextRegion = (TableSplit)list.get(count);<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          long nextRegionSize = nextRegion.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          if (totalSize + nextRegionSize &lt;= dataSkewThreshold) {<a name="line.422"></a>
-<span class="sourceLineNo">423</span>            totalSize = totalSize + nextRegionSize;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>            splitEndKey = nextRegion.getEndRow();<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          } else {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            break;<a name="line.426"></a>
-<span class="sourceLineNo">427</span>          }<a name="line.427"></a>
-<span class="sourceLineNo">428</span>        }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>        TableSplit t = new TableSplit(tableName, scan, splitStartKey, splitEndKey,<a name="line.429"></a>
-<span class="sourceLineNo">430</span>                regionLocation, totalSize);<a name="line.430"></a>
-<span class="sourceLineNo">431</span>        resultList.add(t);<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      }<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span>    return resultList;<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>  /**<a name="line.437"></a>
-<span class="sourceLineNo">438</span>   * select a split point in the region. The selection of the split point is based on an uniform<a name="line.438"></a>
-<span class="sourceLineNo">439</span>   * distribution assumption for the keys in a region.<a name="line.439"></a>
-<span class="sourceLineNo">440</span>   * Here are some examples:<a name="line.440"></a>
-<span class="sourceLineNo">441</span>   * startKey: aaabcdefg  endKey: aaafff    split point: aaad<a name="line.441"></a>
-<span class="sourceLineNo">442</span>   * startKey: 111000  endKey: 1125790    split point: 111b<a name="line.442"></a>
-<span class="sourceLineNo">443</span>   * startKey: 1110  endKey: 1120    split point: 111_<a name="line.443"></a>
-<span class="sourceLineNo">444</span>   * startKey: binary key { 13, -19, 126, 127 }, endKey: binary key { 13, -19, 127, 0 },<a name="line.444"></a>
-<span class="sourceLineNo">445</span>   * split point: binary key { 13, -19, 127, -64 }<a name="line.445"></a>
-<span class="sourceLineNo">446</span>   * Set this function as "public static", make it easier for test.<a name="line.446"></a>
-<span class="sourceLineNo">447</span>   *<a name="line.447"></a>
-<span class="sourceLineNo">448</span>   * @param start Start key of the region<a name="line.448"></a>
-<span class="sourceLineNo">449</span>   * @param end End key of the region<a name="line.449"></a>
-<span class="sourceLineNo">450</span>   * @param isText It determines to use text key mode or binary key mode<a name="line.450"></a>
-<span class="sourceLineNo">451</span>   * @return The split point in the region.<a name="line.451"></a>
-<span class="sourceLineNo">452</span>   */<a name="line.452"></a>
-<span class="sourceLineNo">453</span>  @InterfaceAudience.Private<a name="line.453"></a>
-<span class="sourceLineNo">454</span>  public static byte[] getSplitKey(byte[] start, byte[] end, boolean isText) {<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    byte upperLimitByte;<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    byte lowerLimitByte;<a name="line.456"></a>
-<span class="sourceLineNo">457</span>    //Use text mode or binary mode.<a name="line.457"></a>
-<span class="sourceLineNo">458</span>    if (isText) {<a name="line.458"></a>
-<span class="sourceLineNo">459</span>      //The range of text char set in ASCII is [32,126], the lower limit is space and the upper<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      // limit is '~'.<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      upperLimitByte = '~';<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      lowerLimitByte = ' ';<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    } else {<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      upperLimitByte = Byte.MAX_VALUE;<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      lowerLimitByte = Byte.MIN_VALUE;<a name="line.465"></a>
-<span class="sourceLineNo">466</span>    }<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // For special case<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    // Example 1 : startkey=null, endkey="hhhqqqwww", splitKey="h"<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    // Example 2 (text key mode): startKey="ffffaaa", endKey=null, splitkey="f~~~~~~"<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    if (start.length == 0 &amp;&amp; end.length == 0){<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return new byte[]{(byte) ((lowerLimitByte + upperLimitByte) / 2)};<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    if (start.length == 0 &amp;&amp; end.length != 0){<a name="line.473"></a>
-<span class="sourceLineNo">474</span>      return new byte[]{ end[0] };<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    }<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    if (start.length != 0 &amp;&amp; end.length == 0){<a name="line.476"></a>
-<span class="sourceLineNo">477</span>      byte[] result =new byte[start.length];<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      result[0]=start[0];<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      for (int k = 1; k &lt; start.length; k++){<a name="line.479"></a>
-<span class="sourceLineNo">480</span>          result[k] = upperLimitByte;<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      return result;<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    }<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    // A list to store bytes in split key<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    List resultBytesList = new ArrayList();<a name="line.485"></a>
-<span class="sourceLineNo">486</span>    int maxLength = start.length &gt; end.length ? start.length : end.length;<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    for (int i = 0; i &lt; maxLength; i++) {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      //calculate the midpoint byte between the first difference<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      //for example: "11ae" and "11chw", the midpoint is "11b"<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      //another example: "11ae" and "11bhw", the first different byte is 'a' and 'b',<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // there is no midpoint between 'a' and 'b', so we need to check the next byte.<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      if (start[i] == end[i]) {<a name="line.492"></a>
-<span class="sourceLineNo">493</span>        resultBytesList.add(start[i]);<a name="line.493"></a>
-<span class="sourceLineNo">494</span>        //For special case like: startKey="aaa", endKey="aaaz", splitKey="aaaM"<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        if (i + 1 == start.length) {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>          resultBytesList.add((byte) ((lowerLimitByte + end[i + 1]) / 2));<a 

<TRUNCATED>

[28/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.BatchErrors.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.BatchErrors.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.BatchErrors.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.BatchErrors.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.BatchErrors.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.ServerErrorTracker createServerErrorTracker() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    return new ConnectionImplementation.ServerErrorTracker(<a name="line.1811"></a

<TRUNCATED>

[42/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/checkstyle.rss
----------------------------------------------------------------------
diff --git a/checkstyle.rss b/checkstyle.rss
index b29c93a..d51af73 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2016 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 1686,
-             Errors: 12747,
+      <title>File: 1688,
+             Errors: 12743,
              Warnings: 0,
              Infos: 0
       </title>
@@ -10322,7 +10322,7 @@ under the License.
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ReplicationService.java">org/apache/hadoop/hbase/regionserver/ReplicationService.java</a>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.BulkAssigner.java">org/apache/hadoop/hbase/master/BulkAssigner.java</a>
                 </td>
                 <td>
                   0
@@ -10331,12 +10331,12 @@ under the License.
                   0
                 </td>
                 <td>
-                  3
+                  6
                 </td>
               </tr>
                           <tr>
                 <td>
-                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.master.BulkAssigner.java">org/apache/hadoop/hbase/master/BulkAssigner.java</a>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.ReplicationService.java">org/apache/hadoop/hbase/regionserver/ReplicationService.java</a>
                 </td>
                 <td>
                   0
@@ -10345,7 +10345,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  6
+                  3
                 </td>
               </tr>
                           <tr>
@@ -12800,6 +12800,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.util.ByteBufferAllocator.java">org/apache/hadoop/hbase/util/ByteBufferAllocator.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.HBaseInterfaceAudience.java">org/apache/hadoop/hbase/HBaseInterfaceAudience.java</a>
                 </td>
                 <td>
@@ -13817,7 +13831,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  32
+                  28
                 </td>
               </tr>
                           <tr>
@@ -14312,6 +14326,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine.java">org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  2
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="http://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.java</a>
                 </td>
                 <td>
@@ -18829,7 +18857,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  4
+                  2
                 </td>
               </tr>
                           <tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/coc.html
----------------------------------------------------------------------
diff --git a/coc.html b/coc.html
index 7ce52d8..1f405a6 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Code of Conduct Policy
@@ -331,7 +331,7 @@ For flagrant violations requiring a firm response the PMC may opt to skip early
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/cygwin.html
----------------------------------------------------------------------
diff --git a/cygwin.html b/cygwin.html
index 5c10715..bd47179 100644
--- a/cygwin.html
+++ b/cygwin.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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Installing Apache HBase (TM) on Windows using Cygwin</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -673,7 +673,7 @@ Now your <b>HBase </b>server is running, <b>start coding</b> and build that next
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/dependencies.html
----------------------------------------------------------------------
diff --git a/dependencies.html b/dependencies.html
index 8829ea2..1b3ffde 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -518,7 +518,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 77465a2..46c3d43 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -1631,7 +1631,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/dependency-info.html
----------------------------------------------------------------------
diff --git a/dependency-info.html b/dependency-info.html
index 05e8a5e..6f911e2 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -312,7 +312,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/dependency-management.html
----------------------------------------------------------------------
diff --git a/dependency-management.html b/dependency-management.html
index fa40015..e4f8253 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -786,7 +786,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-frame.html b/devapidocs/allclasses-frame.html
index 4bdf834..c78de88 100644
--- a/devapidocs/allclasses-frame.html
+++ b/devapidocs/allclasses-frame.html
@@ -186,6 +186,7 @@
 <li><a href="org/apache/hadoop/hbase/filter/ByteArrayComparable.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">ByteArrayComparable</a></li>
 <li><a href="org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io" target="classFrame">ByteArrayOutputStream</a></li>
 <li><a href="org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio" target="classFrame">ByteBuff</a></li>
+<li><a href="org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>ByteBufferAllocator</i></a></li>
 <li><a href="org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">ByteBufferArray</a></li>
 <li><a href="org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>ByteBufferArray.Visitor</i></a></li>
 <li><a href="org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase" target="classFrame">ByteBufferedCell</a></li>
@@ -602,6 +603,7 @@
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">FileIOEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/io/FileLink.html" title="class in org.apache.hadoop.hbase.io" target="classFrame">FileLink</a></li>
 <li><a href="org/apache/hadoop/hbase/io/FileLink.FileLinkInputStream.html" title="class in org.apache.hadoop.hbase.io" target="classFrame">FileLink.FileLinkInputStream</a></li>
+<li><a href="org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">FileMmapEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FileSystemVersionException.html" title="class in org.apache.hadoop.hbase.util" target="classFrame">FileSystemVersionException</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">Filter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter" target="classFrame">Filter.ReturnCode</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/devapidocs/allclasses-noframe.html b/devapidocs/allclasses-noframe.html
index 5865c0a..50fbd3b 100644
--- a/devapidocs/allclasses-noframe.html
+++ b/devapidocs/allclasses-noframe.html
@@ -186,6 +186,7 @@
 <li><a href="org/apache/hadoop/hbase/filter/ByteArrayComparable.html" title="class in org.apache.hadoop.hbase.filter">ByteArrayComparable</a></li>
 <li><a href="org/apache/hadoop/hbase/io/ByteArrayOutputStream.html" title="class in org.apache.hadoop.hbase.io">ByteArrayOutputStream</a></li>
 <li><a href="org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></li>
+<li><a href="org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><i>ByteBufferAllocator</i></a></li>
 <li><a href="org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></li>
 <li><a href="org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util"><i>ByteBufferArray.Visitor</i></a></li>
 <li><a href="org/apache/hadoop/hbase/ByteBufferedCell.html" title="class in org.apache.hadoop.hbase">ByteBufferedCell</a></li>
@@ -602,6 +603,7 @@
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/io/FileLink.html" title="class in org.apache.hadoop.hbase.io">FileLink</a></li>
 <li><a href="org/apache/hadoop/hbase/io/FileLink.FileLinkInputStream.html" title="class in org.apache.hadoop.hbase.io">FileLink.FileLinkInputStream</a></li>
+<li><a href="org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/util/FileSystemVersionException.html" title="class in org.apache.hadoop.hbase.util">FileSystemVersionException</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter">Filter.ReturnCode</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index f5f49d3..b9fa6c8 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -19923,7 +19923,7 @@
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.util.ByteBufferArray.DEFAULT_BUFFER_SIZE">
 <!--   -->
-</a><code>static&nbsp;final&nbsp;int</code></td>
+</a><code>public&nbsp;static&nbsp;final&nbsp;int</code></td>
 <td><code><a href="org/apache/hadoop/hbase/util/ByteBufferArray.html#DEFAULT_BUFFER_SIZE">DEFAULT_BUFFER_SIZE</a></code></td>
 <td class="colLast"><code>4194304</code></td>
 </tr>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/devapidocs/index-all.html b/devapidocs/index-all.html
index 59dfe2f..bcd8941 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -2236,6 +2236,10 @@
 <div class="block">Allocate a block in this bucket, return the offset representing the
  position in physical space</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ByteBufferAllocator.html#allocate(long,%20boolean)">allocate(long, boolean)</a></span> - Method in interface org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></dt>
+<dd>
+<div class="block">Allocates a bytebuffer</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html#allocateBlock(int)">allocateBlock(int)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator</a></dt>
 <dd>
 <div class="block">Allocate a block with specified size.</div>
@@ -2258,6 +2262,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/BoundedByteBufferPool.html#allocationsRef">allocationsRef</a></span> - Variable in class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/BoundedByteBufferPool.html" title="class in org.apache.hadoop.hbase.io">BoundedByteBufferPool</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html#allocator">allocator</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/BloomFilterChunk.html#allocBloom()">allocBloom()</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/BloomFilterChunk.html" title="class in org.apache.hadoop.hbase.util">BloomFilterChunk</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.Chunk.html#allocCount">allocCount</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/HeapMemStoreLAB.Chunk.html" title="class in org.apache.hadoop.hbase.regionserver">HeapMemStoreLAB.Chunk</a></dt>
@@ -5102,6 +5108,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#bufferArray">bufferArray</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">ByteBufferIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#bufferArray">bufferArray</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/ipc/BufferChain.html" title="class in org.apache.hadoop.hbase.ipc"><span class="strong">BufferChain</span></a> - Class in <a href="./org/apache/hadoop/hbase/ipc/package-summary.html">org.apache.hadoop.hbase.ipc</a></dt>
 <dd>
 <div class="block">Chain of ByteBuffers.</div>
@@ -5530,11 +5538,15 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/nio/ByteBuff.html#ByteBuff()">ByteBuff()</a></span> - Constructor for class org.apache.hadoop.hbase.nio.<a href="./org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">ByteBufferAllocator</span></a> - Interface in <a href="./org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
+<dd>
+<div class="block">Defines the way the ByteBuffers are created</div>
+</dd>
 <dt><a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">ByteBufferArray</span></a> - Class in <a href="./org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></dt>
 <dd>
 <div class="block">This class manages an array of ByteBuffers with a default size 4MB.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html#ByteBufferArray(long,%20boolean)">ByteBufferArray(long, boolean)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></dt>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html#ByteBufferArray(long,%20boolean,%20org.apache.hadoop.hbase.util.ByteBufferAllocator)">ByteBufferArray(long, boolean, ByteBufferAllocator)</a></span> - Constructor for class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></dt>
 <dd>
 <div class="block">We allocate a number of byte buffers as the capacity.</div>
 </dd>
@@ -22679,6 +22691,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#fileChannel">fileChannel</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#fileChannel">fileChannel</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/master/cleaner/FileCleanerDelegate.html" title="interface in org.apache.hadoop.hbase.master.cleaner"><span class="strong">FileCleanerDelegate</span></a> - Interface in <a href="./org/apache/hadoop/hbase/master/cleaner/package-summary.html">org.apache.hadoop.hbase.master.cleaner</a></dt>
 <dd>
 <div class="block">General interface for cleaning files from a folder (generally an archive or
@@ -22751,6 +22765,13 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/FileLink.FileLinkInputStream.html#FileLink.FileLinkInputStream(org.apache.hadoop.fs.FileSystem,%20org.apache.hadoop.hbase.io.FileLink,%20int)">FileLink.FileLinkInputStream(FileSystem, FileLink, int)</a></span> - Constructor for class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/FileLink.FileLinkInputStream.html" title="class in org.apache.hadoop.hbase.io">FileLink.FileLinkInputStream</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">FileMmapEngine</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html">org.apache.hadoop.hbase.io.hfile.bucket</a></dt>
+<dd>
+<div class="block">IO engine that stores data to a file on the local file system using memory mapping
+ mechanism</div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#FileMmapEngine(java.lang.String,%20long)">FileMmapEngine(String, long)</a></span> - Constructor for class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/http/HttpRequestLogAppender.html#filename">filename</a></span> - Variable in class org.apache.hadoop.hbase.http.<a href="./org/apache/hadoop/hbase/http/HttpRequestLogAppender.html" title="class in org.apache.hadoop.hbase.http">HttpRequestLogAppender</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html#filename">filename</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/BlockCacheUtil.CachedBlockCountsPerFile.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheUtil.CachedBlockCountsPerFile</a></dt>
@@ -47119,6 +47140,10 @@
 <dd>
 <div class="block">File IO engine is always able to support persistent storage for the cache</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#isPersistent()">isPersistent()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>
+<div class="block">File IO engine is always able to support persistent storage for the cache</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#isPersistent()">isPersistent()</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/HColumnDescriptor.html#isPrefetchBlocksOnOpen()">isPrefetchBlocksOnOpen()</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a></dt>
@@ -50759,6 +50784,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheConfig.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/ChecksumUtil.html#LOG">LOG</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/ChecksumUtil.html" title="class in org.apache.hadoop.hbase.io.hfile">ChecksumUtil</a></dt>
@@ -60686,6 +60713,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#path">path</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#path">path</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html#path">path</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFile.WriterFactory.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile.WriterFactory</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html#path">path</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl</a></dt>
@@ -66647,6 +66676,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#raf">raf</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#raf">raf</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#ramCache">ramCache</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ipc/RpcServer.Listener.html#rand">rand</a></span> - Variable in class org.apache.hadoop.hbase.ipc.<a href="./org/apache/hadoop/hbase/ipc/RpcServer.Listener.html" title="class in org.apache.hadoop.hbase.ipc">RpcServer.Listener</a></dt>
@@ -66976,6 +67007,8 @@ service.</div>
 <dd>
 <div class="block">Transfers data from file to the given byte buffer</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read(long, int, CacheableDeserializer&lt;Cacheable&gt;)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read(long, int, CacheableDeserializer&lt;Cacheable&gt;)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></dt>
 <dd>
 <div class="block">Transfers data from IOEngine to a Cacheable object.</div>
@@ -73228,6 +73261,8 @@ service.</div>
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/balancer/FavoredNodeLoadBalancer.html#roundRobinAssignmentImpl(org.apache.hadoop.hbase.master.balancer.FavoredNodeAssignmentHelper,%20java.util.Map,%20java.util.List,%20java.util.List)">roundRobinAssignmentImpl(FavoredNodeAssignmentHelper, Map&lt;ServerName, List&lt;HRegionInfo&gt;&gt;, List&lt;HRegionInfo&gt;, List&lt;ServerName&gt;)</a></span> - Method in class org.apache.hadoop.hbase.master.balancer.<a href="./org/apache/hadoop/hbase/master/balancer/FavoredNodeLoadBalancer.html" title="class in org.apache.hadoop.hbase.master.balancer">FavoredNodeLoadBalancer</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#roundUp(long,%20long)">roundUp(long, long)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html#roundUp(long,%20long)">roundUp(long, long)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html#roundUpToBucketSizeInfo(int)">roundUpToBucketSizeInfo(int)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator</a></dt>
@@ -80059,6 +80094,10 @@ service.</div>
 <dd>
 <div class="block">Close the file</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#shutdown()">shutdown()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>
+<div class="block">Close the file</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#shutdown()">shutdown()</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></dt>
 <dd>
 <div class="block">Shutdown the IOEngine</div>
@@ -80505,6 +80544,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#size">size</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#size">size</a></span> - Variable in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html#size()">size()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CombinedBlockCache.html" title="class in org.apache.hadoop.hbase.io.hfile">CombinedBlockCache</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html#size()">size()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFile.FileInfo.html" title="class in org.apache.hadoop.hbase.io.hfile">HFile.FileInfo</a></dt>
@@ -84503,6 +84544,10 @@ service.</div>
 <dd>
 <div class="block">Sync the data to file after writing</div>
 </dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#sync()">sync()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>
+<div class="block">Sync the data to file after writing</div>
+</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#sync()">sync()</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></dt>
 <dd>
 <div class="block">Sync the data to IOEngine after writing</div>
@@ -87689,6 +87734,8 @@ service.</div>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#toString()">toString()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#toString()">toString()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheConfig.html#toString()">toString()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheConfig.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheConfig</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html#toString()">toString()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a></dt>
@@ -93593,6 +93640,12 @@ the order they are declared.</div>
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">write(ByteBuff, long)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#write(java.nio.ByteBuffer,%20long)">write(ByteBuffer, long)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>
+<div class="block">Transfers data from the given byte buffer to file</div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">write(ByteBuff, long)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#write(java.nio.ByteBuffer,%20long)">write(ByteBuffer, long)</a></span> - Method in interface org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></dt>
 <dd>
 <div class="block">Transfers data from the given byte buffer to IOEngine</div>
@@ -95121,11 +95174,6 @@ the order they are declared.</div>
 <dd>
 <div class="block">Used in decoding the "ordered" dialect of Base64.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/HTableMultiplexer.html#_put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put,%20int,%20boolean)">_put(TableName, Put, int, boolean)</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/HTableMultiplexer.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer</a></dt>
-<dd>
-<div class="block">Internal "put" which exposes a boolean flag to control whether or not the region location
- cache should be reloaded when trying to queue the <a href="./org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a>.</div>
-</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html#_readMvccVersion(int)">_readMvccVersion(int)</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.HFileScannerImpl.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileReaderImpl.HFileScannerImpl</a></dt>
 <dd>
 <div class="block">Actually do the mvcc read.</div>


[37/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
index f38a376..6b1aff6 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html
@@ -1108,7 +1108,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheBlock</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.323">cacheBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.326">cacheBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
               <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;buf)</pre>
 <div class="block">Cache the block with the specified name and buffer.</div>
 <dl>
@@ -1123,7 +1123,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheBlock</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.335">cacheBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.338">cacheBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
               <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;cachedItem,
               boolean&nbsp;inMemory,
               boolean&nbsp;cacheDataInL1)</pre>
@@ -1140,7 +1140,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>cacheBlockWithWait</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.347">cacheBlockWithWait</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.350">cacheBlockWithWait</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
                       <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;cachedItem,
                       boolean&nbsp;inMemory,
                       boolean&nbsp;wait)</pre>
@@ -1154,7 +1154,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlock</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.396">getBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;key,
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.399">getBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;key,
                  boolean&nbsp;caching,
                  boolean&nbsp;repeat,
                  boolean&nbsp;updateCacheMetrics)</pre>
@@ -1172,7 +1172,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>blockEvicted</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.452">blockEvicted</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.455">blockEvicted</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
                 <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.BucketEntry</a>&nbsp;bucketEntry,
                 boolean&nbsp;decrementBlockNumber)</pre>
 </li>
@@ -1183,7 +1183,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>evictBlock</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.462">evictBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.465">evictBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#evictBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">BlockCache</a></code></strong></div>
 <div class="block">Evict block from cache.</div>
 <dl>
@@ -1199,7 +1199,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>forceEvict</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.468">forceEvict</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.471">forceEvict</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 </li>
 </ul>
 <a name="checkRamCache(org.apache.hadoop.hbase.io.hfile.BlockCacheKey)">
@@ -1208,7 +1208,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRamCache</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.497">checkRamCache</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.500">checkRamCache</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 </li>
 </ul>
 <a name="evictBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey, boolean)">
@@ -1217,7 +1217,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>evictBlock</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.506">evictBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.509">evictBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
                  boolean&nbsp;deletedBlock)</pre>
 </li>
 </ul>
@@ -1227,7 +1227,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>logStats</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.571">logStats</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.574">logStats</a>()</pre>
 </li>
 </ul>
 <a name="getRealCacheSize()">
@@ -1236,7 +1236,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getRealCacheSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.597">getRealCacheSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.600">getRealCacheSize</a>()</pre>
 </li>
 </ul>
 <a name="acceptableSize()">
@@ -1245,7 +1245,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>acceptableSize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.601">acceptableSize</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.604">acceptableSize</a>()</pre>
 </li>
 </ul>
 <a name="singleSize()">
@@ -1254,7 +1254,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>singleSize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.605">singleSize</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.608">singleSize</a>()</pre>
 </li>
 </ul>
 <a name="multiSize()">
@@ -1263,7 +1263,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>multiSize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.610">multiSize</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.613">multiSize</a>()</pre>
 </li>
 </ul>
 <a name="memorySize()">
@@ -1272,7 +1272,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>memorySize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.615">memorySize</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.618">memorySize</a>()</pre>
 </li>
 </ul>
 <a name="freeSpace(java.lang.String)">
@@ -1281,7 +1281,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>freeSpace</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.626">freeSpace</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.629">freeSpace</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why)</pre>
 <div class="block">Free the space if the used size reaches acceptableSize() or one size block
  couldn't be allocated. When freeing the space, we use the LRU algorithm and
  ensure there must be some blocks evicted</div>
@@ -1294,7 +1294,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getRAMQueueEntries</h4>
-<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.922">getRAMQueueEntries</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;q,
+<pre>static&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.925">getRAMQueueEntries</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;q,
                                                  <a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/BucketCache.RAMQueueEntry.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketCache.RAMQueueEntry</a>&gt;&nbsp;receptacle)
                                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Blocks until elements available in <code>q</code> then tries to grab as many as possible
@@ -1312,7 +1312,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>persistToFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.933">persistToFile</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.936">persistToFile</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -1324,7 +1324,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>retrieveFromFile</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.955">retrieveFromFile</a>(int[]&nbsp;bucketSizes)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.958">retrieveFromFile</a>(int[]&nbsp;bucketSizes)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                               <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocatorException.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocatorException</a>,
                               <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/ClassNotFoundException.html?is-external=true" title="class or interface in java.lang">ClassNotFoundException</a></pre>
@@ -1340,7 +1340,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIOErrorIsTolerated</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1006">checkIOErrorIsTolerated</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1009">checkIOErrorIsTolerated</a>()</pre>
 <div class="block">Check whether we tolerate IO error this time. If the duration of IOEngine
  throwing errors exceeds ioErrorsDurationTimeTolerated, we will disable the
  cache</div>
@@ -1352,7 +1352,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>disableCache</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1023">disableCache</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1026">disableCache</a>()</pre>
 <div class="block">Used to shut down the cache -or- turn it off in the case of something
  broken.</div>
 </li>
@@ -1363,7 +1363,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>join</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1037">join</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1040">join</a>()
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd></dl>
@@ -1375,7 +1375,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1043">shutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1046">shutdown</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#shutdown()">BlockCache</a></code></strong></div>
 <div class="block">Shutdown the cache.</div>
 <dl>
@@ -1390,7 +1390,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getStats</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1060">getStats</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheStats.html" title="class in org.apache.hadoop.hbase.io.hfile">CacheStats</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1063">getStats</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getStats()">BlockCache</a></code></strong></div>
 <div class="block">Get the statistics for this block cache.</div>
 <dl>
@@ -1405,7 +1405,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getAllocator</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1064">getAllocator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketAllocator.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">BucketAllocator</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1067">getAllocator</a>()</pre>
 </li>
 </ul>
 <a name="heapSize()">
@@ -1414,7 +1414,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1069">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1072">heapSize</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/HeapSize.html#heapSize()">heapSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/HeapSize.html" title="interface in org.apache.hadoop.hbase.io">HeapSize</a></code></dd>
@@ -1428,7 +1428,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1074">size</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1077">size</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#size()">BlockCache</a></code></strong></div>
 <div class="block">Returns the total size of the block cache, in bytes.</div>
 <dl>
@@ -1443,7 +1443,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getFreeSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1079">getFreeSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1082">getFreeSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getFreeSize()">BlockCache</a></code></strong></div>
 <div class="block">Returns the free size of the block cache, in bytes.</div>
 <dl>
@@ -1458,7 +1458,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1084">getBlockCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1087">getBlockCount</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getBlockCount()">BlockCache</a></code></strong></div>
 <div class="block">Returns the number of blocks currently cached in the block cache.</div>
 <dl>
@@ -1473,7 +1473,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1089">getCurrentSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1092">getCurrentSize</a>()</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getCurrentSize()">BlockCache</a></code></strong></div>
 <div class="block">Returns the occupied size of the block cache, in bytes.</div>
 <dl>
@@ -1488,7 +1488,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>evictBlocksByHfileName</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1101">evictBlocksByHfileName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hfileName)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1104">evictBlocksByHfileName</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;hfileName)</pre>
 <div class="block">Evicts all blocks for a specific HFile.
  <p>
  This is used for evict-on-close to remove all blocks of a specific HFile.</div>
@@ -1504,7 +1504,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>stopWriterThreads</h4>
-<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1349">stopWriterThreads</a>()
+<pre>void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1352">stopWriterThreads</a>()
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Only used in test</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -1517,7 +1517,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>iterator</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1358">iterator</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Iterator.html?is-external=true" title="class or interface in java.util">Iterator</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1361">iterator</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true#iterator()" title="class or interface in java.lang">iterator</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CachedBlock.html" title="interface in org.apache.hadoop.hbase.io.hfile">CachedBlock</a>&gt;</code></dd>
@@ -1532,7 +1532,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCaches</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1448">getBlockCaches</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>[]&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1451">getBlockCaches</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#getBlockCaches()">getBlockCaches</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a></code></dd>
@@ -1545,7 +1545,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockList">
 <li class="blockList">
 <h4>returnBlock</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1453">returnBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1456">returnBlock</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey,
                <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;block)</pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html#returnBlock(org.apache.hadoop.hbase.io.hfile.BlockCacheKey,%20org.apache.hadoop.hbase.io.hfile.Cacheable)">BlockCache</a></code></strong></div>
 <div class="block">Called when the scanner using the block decides to return the block once its usage
@@ -1566,7 +1566,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockC
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getRefCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1466">getRefCount</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html#line.1469">getRefCount</a>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheKey.html" title="class in org.apache.hadoop.hbase.io.hfile">BlockCacheKey</a>&nbsp;cacheKey)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
index 45e2323..3a61968 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html
@@ -100,7 +100,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.36">ByteBufferIOEngine</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.37">ByteBufferIOEngine</a>
 extends <a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></pre>
 <div class="block">IO engine that stores data in memory using an array of ByteBuffers
@@ -243,7 +243,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>bufferArray</h4>
-<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.37">bufferArray</a></pre>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.38">bufferArray</a></pre>
 </li>
 </ul>
 <a name="capacity">
@@ -252,7 +252,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>capacity</h4>
-<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.38">capacity</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.39">capacity</a></pre>
 </li>
 </ul>
 <a name="direct">
@@ -261,7 +261,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>direct</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.39">direct</a></pre>
+<pre>private final&nbsp;boolean <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.40">direct</a></pre>
 </li>
 </ul>
 </li>
@@ -278,13 +278,13 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ByteBufferIOEngine</h4>
-<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.47">ByteBufferIOEngine</a>(long&nbsp;capacity,
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.48">ByteBufferIOEngine</a>(long&nbsp;capacity,
                   boolean&nbsp;direct)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Construct the ByteBufferIOEngine with the given capacity</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>capacity</code> - </dd><dd><code>direct</code> - true if allocate direct buffer</dd>
 <dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - ideally here no exception to be thrown from the allocator</dd></dl>
 </li>
 </ul>
 </li>
@@ -301,7 +301,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/ByteBufferIOEngine.html#line.55">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/ByteBufferIOEngine.html#line.67">toString</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -314,7 +314,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>isPersistent</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.66">isPersistent</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.78">isPersistent</a>()</pre>
 <div class="block">Memory IO engine is always unable to support persistent storage for the
  cache</div>
 <dl>
@@ -329,7 +329,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>read</h4>
-<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.71">read</a>(long&nbsp;offset,
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.83">read</a>(long&nbsp;offset,
              int&nbsp;length,
              <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)
                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -350,7 +350,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.91">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;srcBuffer,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.103">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;srcBuffer,
          long&nbsp;offset)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Transfers data from the given byte buffer to the buffer array</div>
@@ -360,7 +360,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <dt><span class="strong">Parameters:</span></dt><dd><code>srcBuffer</code> - the given byte buffer from which bytes are to be read</dd><dd><code>offset</code> - The offset in the ByteBufferArray of the first byte to be
           written</dd>
 <dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - throws IOException if writing to the array throws exception</dd></dl>
 </li>
 </ul>
 <a name="write(org.apache.hadoop.hbase.nio.ByteBuff, long)">
@@ -369,7 +369,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>write</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.98">write</a>(<a href="../../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.110">write</a>(<a href="../../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
          long&nbsp;offset)
            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">IOEngine</a></code></strong></div>
@@ -388,7 +388,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.109">sync</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.121">sync</a>()</pre>
 <div class="block">No operation for the sync in the memory IO engine</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -402,7 +402,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <ul class="blockListLast">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.117">shutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#line.129">shutdown</a>()</pre>
 <div class="block">No operation for the shutdown in the memory IO engine</div>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
index 4906a22..e5c6b07 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/CacheFullException.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" target="_top">Frames</a></li>
@@ -457,7 +457,7 @@ implements <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/CacheFullException.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html
new file mode 100644
index 0000000..4995e34
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html
@@ -0,0 +1,531 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>FileMmapEngine (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="FileMmapEngine (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/FileMmapEngine.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/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="FileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All 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.io.hfile.bucket</div>
+<h2 title="Class FileMmapEngine" class="title">Class FileMmapEngine</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/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.io.hfile.bucket.FileMmapEngine</li>
+</ul>
+</li>
+</ul>
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<dl>
+<dt>All Implemented Interfaces:</dt>
+<dd><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></dd>
+</dl>
+<hr>
+<br>
+<pre><a href="../../../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public class <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.43">FileMmapEngine</a>
+extends <a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></pre>
+<div class="block">IO engine that stores data to a file on the local file system using memory mapping
+ mechanism</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- =========== FIELD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_summary">
+<!--   -->
+</a>
+<h3>Field Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
+<caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#bufferArray">bufferArray</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#fileChannel">fileChannel</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>(package private) static org.apache.commons.logging.Log</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#LOG">LOG</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#path">path</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html?is-external=true" title="class or interface in java.io">RandomAccessFile</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#raf">raf</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#size">size</a></strong></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="overviewSummary" 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><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#FileMmapEngine(java.lang.String,%20long)">FileMmapEngine</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filePath,
+                            long&nbsp;capacity)</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="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>boolean</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#isPersistent()">isPersistent</a></strong>()</code>
+<div class="block">File IO engine is always able to support persistent storage for the cache</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read</a></strong>(long&nbsp;offset,
+        int&nbsp;length,
+        <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>
+<div class="block">Transfers data from IOEngine to a Cacheable object.</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>private long</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#roundUp(long,%20long)">roundUp</a></strong>(long&nbsp;n,
+              long&nbsp;to)</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#shutdown()">shutdown</a></strong>()</code>
+<div class="block">Close the file</div>
+</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#sync()">sync</a></strong>()</code>
+<div class="block">Sync the data to file after writing</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#toString()">toString</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#write(java.nio.ByteBuffer,%20long)">write</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;srcBuffer,
+          long&nbsp;offset)</code>
+<div class="block">Transfers data from the given byte buffer to file</div>
+</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">write</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
+          long&nbsp;offset)</code>
+<div class="block">Transfers the data from the given MultiByteBuffer to IOEngine</div>
+</td>
+</tr>
+</table>
+<ul class="blockList">
+<li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
+<!--   -->
+</a>
+<h3>Methods inherited from class&nbsp;java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ FIELD DETAIL =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="field_detail">
+<!--   -->
+</a>
+<h3>Field Detail</h3>
+<a name="LOG">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>LOG</h4>
+<pre>static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.44">LOG</a></pre>
+</li>
+</ul>
+<a name="path">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>path</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/FileMmapEngine.html#line.46">path</a></pre>
+</li>
+</ul>
+<a name="size">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>size</h4>
+<pre>private&nbsp;long <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.47">size</a></pre>
+</li>
+</ul>
+<a name="bufferArray">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>bufferArray</h4>
+<pre>private&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.48">bufferArray</a></pre>
+</li>
+</ul>
+<a name="fileChannel">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>fileChannel</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/channels/FileChannel.html?is-external=true" title="class or interface in java.nio.channels">FileChannel</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.49">fileChannel</a></pre>
+</li>
+</ul>
+<a name="raf">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>raf</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/RandomAccessFile.html?is-external=true" title="class or interface in java.io">RandomAccessFile</a> <a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.50">raf</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="FileMmapEngine(java.lang.String, long)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>FileMmapEngine</h4>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.52">FileMmapEngine</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filePath,
+              long&nbsp;capacity)
+               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="roundUp(long, long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>roundUp</h4>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.90">roundUp</a>(long&nbsp;n,
+           long&nbsp;to)</pre>
+</li>
+</ul>
+<a name="toString()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>toString</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/io/hfile/bucket/FileMmapEngine.html#line.95">toString</a>()</pre>
+<dl>
+<dt><strong>Overrides:</strong></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
+</dl>
+</li>
+</ul>
+<a name="isPersistent()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>isPersistent</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.105">isPersistent</a>()</pre>
+<div class="block">File IO engine is always able to support persistent storage for the cache</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#isPersistent()">isPersistent</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></code></dd>
+<dt><span class="strong">Returns:</span></dt><dd>true</dd></dl>
+</li>
+</ul>
+<a name="read(long, int, org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>read</h4>
+<pre>public&nbsp;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.110">read</a>(long&nbsp;offset,
+             int&nbsp;length,
+             <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)
+               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">IOEngine</a></code></strong></div>
+<div class="block">Transfers data from IOEngine to a Cacheable object.</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>offset</code> - The offset in the IO engine where the first byte to be read</dd><dd><code>length</code> - How many bytes to be read from the offset</dd><dd><code>deserializer</code> - The deserializer to be used to make a Cacheable from the data.</dd>
+<dt><span class="strong">Returns:</span></dt><dd>Cacheable</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="write(java.nio.ByteBuffer, long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>write</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.125">write</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;srcBuffer,
+         long&nbsp;offset)
+           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Transfers data from the given byte buffer to file</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#write(java.nio.ByteBuffer,%20long)">write</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>srcBuffer</code> - the given byte buffer from which bytes are to be read</dd><dd><code>offset</code> - The offset in the file where the first byte to be written</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+<a name="write(org.apache.hadoop.hbase.nio.ByteBuff, long)">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>write</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.132">write</a>(<a href="../../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
+         long&nbsp;offset)
+           throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">IOEngine</a></code></strong></div>
+<div class="block">Transfers the data from the given MultiByteBuffer to IOEngine</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">write</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></code></dd>
+<dt><span class="strong">Parameters:</span></dt><dd><code>srcBuffer</code> - the given MultiBytebufffers from which bytes are to be read</dd><dd><code>offset</code> - the offset in the IO engine where the first byte to be written</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="sync()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>sync</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.144">sync</a>()
+          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Sync the data to file after writing</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#sync()">sync</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></code></dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="shutdown()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>shutdown</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#line.154">shutdown</a>()</pre>
+<div class="block">Close the file</div>
+<dl>
+<dt><strong>Specified by:</strong></dt>
+<dd><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html#shutdown()">shutdown</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</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><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/FileMmapEngine.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/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="FileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All 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;2016 <a href="http://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/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html
index e39162a..44a6692 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -87,7 +87,7 @@
 <li class="blockList">
 <dl>
 <dt>All Known Implementing Classes:</dt>
-<dd><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">ByteBufferIOEngine</a>, <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a></dd>
+<dd><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">ByteBufferIOEngine</a>, <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileIOEngine</a>, <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></dd>
 </dl>
 <hr>
 <br>
@@ -274,7 +274,7 @@ public interface <a href="../../../../../../../src-html/org/apache/hadoop/hbase/
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/FileMmapEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/FileMmapEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/FileMmapEngine.html
new file mode 100644
index 0000000..d6048ca
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/FileMmapEngine.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">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/io/hfile/bucket/class-use/FileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="FileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../../allclasses-noframe.html">All 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.io.hfile.bucket.FileMmapEngine" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.io.hfile.bucket.FileMmapEngine</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">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/io/hfile/bucket/class-use/FileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="FileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../../allclasses-noframe.html">All 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;2016 <a href="http://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
+</body>
+</html>


[03/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
index d1e0c3b..c0eb370 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.53">TestHTableMultiplexerViaMocks</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.36">TestHTableMultiplexerViaMocks</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -123,26 +123,6 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>private org.apache.hadoop.hbase.client.HTableMultiplexer</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#mockMultiplexer">mockMultiplexer</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.HRegionInfo</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#mockRegionInfo">mockRegionInfo</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.HRegionLocation</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#mockRegionLocation">mockRegionLocation</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private static int</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#NUM_RETRIES">NUM_RETRIES</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.client.Put</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#put">put</a></strong></code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>private org.apache.hadoop.hbase.TableName</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#tableName">tableName</a></strong></code>&nbsp;</td>
-</tr>
 </table>
 </li>
 </ul>
@@ -176,32 +156,16 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static byte[]</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#getBytes(java.lang.String)">getBytes</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;str)</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#ignoreCacheOnRetriedPut()">ignoreCacheOnRetriedPut</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#nonNullLocationQueuesPut()">nonNullLocationQueuesPut</a></strong>()</code>&nbsp;</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#setupTest()">setupTest</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
-<td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#testClosingAlreadyClosedConnection()">testClosingAlreadyClosedConnection</a></strong>()</code>&nbsp;</td>
-</tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#testConnectionClosing()">testConnectionClosing</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#testClosingAlreadyClosedConnection()">testClosingAlreadyClosedConnection</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#useCacheOnInitialPut()">useCacheOnInitialPut</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#testConnectionClosing()">testConnectionClosing</a></strong>()</code>&nbsp;</td>
 </tr>
 </table>
 <ul class="blockList">
@@ -225,68 +189,22 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <!--   -->
 </a>
 <h3>Field Detail</h3>
-<a name="NUM_RETRIES">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>NUM_RETRIES</h4>
-<pre>private static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.55">NUM_RETRIES</a></pre>
-<dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.client.TestHTableMultiplexerViaMocks.NUM_RETRIES">Constant Field Values</a></dd></dl>
-</li>
-</ul>
 <a name="mockMultiplexer">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>mockMultiplexer</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.HTableMultiplexer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.56">mockMultiplexer</a></pre>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.HTableMultiplexer <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.38">mockMultiplexer</a></pre>
 </li>
 </ul>
 <a name="mockConnection">
 <!--   -->
 </a>
-<ul class="blockList">
-<li class="blockList">
-<h4>mockConnection</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.ClusterConnection <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.57">mockConnection</a></pre>
-</li>
-</ul>
-<a name="mockRegionLocation">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>mockRegionLocation</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.HRegionLocation <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.58">mockRegionLocation</a></pre>
-</li>
-</ul>
-<a name="mockRegionInfo">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>mockRegionInfo</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.HRegionInfo <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.59">mockRegionInfo</a></pre>
-</li>
-</ul>
-<a name="tableName">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>tableName</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.TableName <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.61">tableName</a></pre>
-</li>
-</ul>
-<a name="put">
-<!--   -->
-</a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>put</h4>
-<pre>private&nbsp;org.apache.hadoop.hbase.client.Put <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.62">put</a></pre>
+<h4>mockConnection</h4>
+<pre>private&nbsp;org.apache.hadoop.hbase.client.ClusterConnection <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.39">mockConnection</a></pre>
 </li>
 </ul>
 </li>
@@ -303,7 +221,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestHTableMultiplexerViaMocks</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.53">TestHTableMultiplexerViaMocks</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.36">TestHTableMultiplexerViaMocks</a>()</pre>
 </li>
 </ul>
 </li>
@@ -320,43 +238,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setupTest</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.65">setupTest</a>()</pre>
-</li>
-</ul>
-<a name="useCacheOnInitialPut()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>useCacheOnInitialPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.90">useCacheOnInitialPut</a>()
-                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/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="nonNullLocationQueuesPut()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>nonNullLocationQueuesPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.96">nonNullLocationQueuesPut</a>()
-                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/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="ignoreCacheOnRetriedPut()">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>ignoreCacheOnRetriedPut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.114">ignoreCacheOnRetriedPut</a>()
-                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
-<dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.42">setupTest</a>()</pre>
 </li>
 </ul>
 <a name="testConnectionClosing()">
@@ -365,7 +247,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testConnectionClosing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.164">testConnectionClosing</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.54">testConnectionClosing</a>()
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -374,25 +256,15 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="testClosingAlreadyClosedConnection()">
 <!--   -->
 </a>
-<ul class="blockList">
+<ul class="blockListLast">
 <li class="blockList">
 <h4>testClosingAlreadyClosedConnection</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.176">testClosingAlreadyClosedConnection</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.66">testClosingAlreadyClosedConnection</a>()
                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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="getBytes(java.lang.String)">
-<!--   -->
-</a>
-<ul class="blockListLast">
-<li class="blockList">
-<h4>getBytes</h4>
-<pre>private static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#line.190">getBytes</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;str)</pre>
-<dl><dt><span class="strong">Returns:</span></dt><dd>UTF-8 byte representation for <code>str</code></dd></dl>
-</li>
-</ul>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html b/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html
index f6ae9ea..a15c104 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html
@@ -109,7 +109,7 @@
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1985">TestFilter.SlowScanFilter</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.2022">TestFilter.SlowScanFilter</a>
 extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <div class="block">Filter which makes sleeps for a second between each row of a scan.
  This can be useful for manual testing of bugs like HBASE-5973. For example:
@@ -249,7 +249,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ipcHandlerThread</h4>
-<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.1986">ipcHandlerThread</a></pre>
+<pre>private static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.2023">ipcHandlerThread</a></pre>
 </li>
 </ul>
 </li>
@@ -266,7 +266,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestFilter.SlowScanFilter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.1985">TestFilter.SlowScanFilter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.2022">TestFilter.SlowScanFilter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -283,7 +283,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.1989">toByteArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.2026">toByteArray</a>()</pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>
 <dd><code>toByteArray</code>&nbsp;in class&nbsp;<code>org.apache.hadoop.hbase.filter.FilterBase</code></dd>
@@ -296,7 +296,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>filterKeyValue</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.filter.Filter.ReturnCode&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.1992">filterKeyValue</a>(org.apache.hadoop.hbase.Cell&nbsp;ignored)
+<pre>public&nbsp;org.apache.hadoop.hbase.filter.Filter.ReturnCode&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.2029">filterKeyValue</a>(org.apache.hadoop.hbase.Cell&nbsp;ignored)
                                                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
@@ -311,7 +311,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filterRow</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.1997">filterRow</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html#line.2034">filterRow</a>()
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><strong>Overrides:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.html b/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.html
index e3a2f45..ffb8c0e 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/filter/TestFilter.html
@@ -293,64 +293,68 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testKeyOnlyFilter()">testKeyOnlyFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testInclusiveStopFilterWithReverseScan()">testInclusiveStopFilterWithReverseScan</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testNestedFilterListWithSCVF()">testNestedFilterListWithSCVF</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testKeyOnlyFilter()">testKeyOnlyFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testNoFilter()">testNoFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testNestedFilterListWithSCVF()">testNestedFilterListWithSCVF</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPageFilter()">testPageFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testNoFilter()">testNoFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPageFilterWithReverseScan()">testPageFilterWithReverseScan</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPageFilter()">testPageFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPrefixFilter()">testPrefixFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPageFilterWithReverseScan()">testPageFilterWithReverseScan</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPrefixFilterWithReverseScan()">testPrefixFilterWithReverseScan</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPrefixFilter()">testPrefixFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testQualifierFilter()">testQualifierFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testPrefixFilterWithReverseScan()">testPrefixFilterWithReverseScan</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testRegionScannerReseek()">testRegionScannerReseek</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testQualifierFilter()">testQualifierFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testRowFilter()">testRowFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testRegionScannerReseek()">testRegionScannerReseek</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testSingleColumnValueFilter()">testSingleColumnValueFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testRowFilter()">testRowFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testSkipFilter()">testSkipFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testSingleColumnValueFilter()">testSingleColumnValueFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testValueFilter()">testValueFilter</a></strong>()</code>&nbsp;</td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testSkipFilter()">testSkipFilter</a></strong>()</code>&nbsp;</td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testValueFilter()">testValueFilter</a></strong>()</code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testWhileMatchFilterWithFilterKeyValue()">testWhileMatchFilterWithFilterKeyValue</a></strong>()</code>
 <div class="block">Tests the the <code>WhileMatchFilter</code> works in combination with a
  <code>Filter</code> that uses the <code>Filter.filterKeyValue(Cell)</code> method.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testWhileMatchFilterWithFilterRow()">testWhileMatchFilterWithFilterRow</a></strong>()</code>
 <div class="block">Tests the the <code>WhileMatchFilter</code> works in combination with a
@@ -358,7 +362,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
  <code>Filter.filterRow()</code> method.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testWhileMatchFilterWithFilterRowKey()">testWhileMatchFilterWithFilterRowKey</a></strong>()</code>
 <div class="block">Tests the the <code>WhileMatchFilter</code> works in combination with a
@@ -366,32 +370,32 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
  <code>Filter.filterRowKey(Cell)</code> method.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testWhileMatchFilterWithFilterRowKeyWithReverseScan()">testWhileMatchFilterWithFilterRowKeyWithReverseScan</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#testWhileMatchFilterWithFilterRowWithReverseScan()">testWhileMatchFilterWithFilterRowWithReverseScan</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#verifyScan(org.apache.hadoop.hbase.client.Scan,%20long,%20long)">verifyScan</a></strong>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                     long&nbsp;expectedRows,
                     long&nbsp;expectedKeys)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#verifyScanFull(org.apache.hadoop.hbase.client.Scan,%20org.apache.hadoop.hbase.KeyValue[])">verifyScanFull</a></strong>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                             org.apache.hadoop.hbase.KeyValue[]&nbsp;kvs)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#verifyScanFullNoValues(org.apache.hadoop.hbase.client.Scan,%20org.apache.hadoop.hbase.KeyValue[],%20boolean)">verifyScanFullNoValues</a></strong>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                                             org.apache.hadoop.hbase.KeyValue[]&nbsp;kvs,
                                             boolean&nbsp;useLen)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/filter/TestFilter.html#verifyScanNoEarlyOut(org.apache.hadoop.hbase.client.Scan,%20long,%20long)">verifyScanNoEarlyOut</a></strong>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                                         long&nbsp;expectedRows,
@@ -795,13 +799,25 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <dd><code><a href="http://docs.oracle.com/javase/7/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="testInclusiveStopFilterWithReverseScan()">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>testInclusiveStopFilterWithReverseScan</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.720">testInclusiveStopFilterWithReverseScan</a>()
+                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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="testQualifierFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>testQualifierFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.720">testQualifierFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.757">testQualifierFilter</a>()
                          throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -813,7 +829,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFamilyFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.878">testFamilyFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.915">testFamilyFilter</a>()
                       throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -825,7 +841,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testRowFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1013">testRowFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1050">testRowFilter</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -837,7 +853,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testValueFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1160">testValueFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1197">testValueFilter</a>()
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -849,7 +865,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testSkipFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1284">testSkipFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1321">testSkipFilter</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -861,7 +877,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFilterList</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1322">testFilterList</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1359">testFilterList</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -873,7 +889,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFirstKeyOnlyFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1355">testFirstKeyOnlyFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1392">testFirstKeyOnlyFilter</a>()
                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -885,7 +901,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFilterListWithSingleColumnValueFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1371">testFilterListWithSingleColumnValueFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1408">testFilterListWithSingleColumnValueFilter</a>()
                                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -897,7 +913,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testFilterListWithPrefixFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1449">testFilterListWithPrefixFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1486">testFilterListWithPrefixFilter</a>()
                                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -909,7 +925,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testSingleColumnValueFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1496">testSingleColumnValueFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1533">testSingleColumnValueFilter</a>()
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -921,7 +937,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyScan</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1615">verifyScan</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1652">verifyScan</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
               long&nbsp;expectedRows,
               long&nbsp;expectedKeys)
                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -935,7 +951,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyScanNoEarlyOut</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1636">verifyScanNoEarlyOut</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1673">verifyScanNoEarlyOut</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                         long&nbsp;expectedRows,
                         long&nbsp;expectedKeys)
                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -949,7 +965,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyScanFull</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1658">verifyScanFull</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1695">verifyScanFull</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                   org.apache.hadoop.hbase.KeyValue[]&nbsp;kvs)
                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -962,7 +978,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>verifyScanFullNoValues</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1689">verifyScanFullNoValues</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1726">verifyScanFullNoValues</a>(org.apache.hadoop.hbase.client.Scan&nbsp;s,
                           org.apache.hadoop.hbase.KeyValue[]&nbsp;kvs,
                           boolean&nbsp;useLen)
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -976,7 +992,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testColumnPaginationFilterColumnOffset</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1732">testColumnPaginationFilterColumnOffset</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1769">testColumnPaginationFilterColumnOffset</a>()
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -988,7 +1004,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testColumnPaginationFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1818">testColumnPaginationFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1855">testColumnPaginationFilter</a>()
                                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -1000,7 +1016,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>testKeyOnlyFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1916">testKeyOnlyFilter</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.1953">testKeyOnlyFilter</a>()
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -1012,7 +1028,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testNestedFilterListWithSCVF</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.2010">testNestedFilterListWithSCVF</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/TestFilter.html#line.2047">testNestedFilterListWithSCVF</a>()
                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html
index 1b646ee..874772b 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.BufferGrabbingDeserializer.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
-<li>Next Class</li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html" target="_top">Frames</a></li>
@@ -215,7 +215,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.BufferGrabbingDeserializer.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
-<li>Next Class</li>
+<li><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html
new file mode 100644
index 0000000..677e45d
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html
@@ -0,0 +1,260 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>TestFileMmapEngine (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="TestFileMmapEngine (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/TestFileMmapEngine.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/io/hfile/bucket/TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="TestFileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../allclasses-noframe.html">All 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>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_top">
+<!--   -->
+</a></div>
+<!-- ========= END OF TOP NAVBAR ========= -->
+<!-- ======== START OF CLASS DATA ======== -->
+<div class="header">
+<div class="subTitle">org.apache.hadoop.hbase.io.hfile.bucket</div>
+<h2 title="Class TestFileMmapEngine" class="title">Class TestFileMmapEngine</h2>
+</div>
+<div class="contentContainer">
+<ul class="inheritance">
+<li><a href="http://docs.oracle.com/javase/7/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.io.hfile.bucket.TestFileMmapEngine</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/io/hfile/bucket/TestFileMmapEngine.html#line.38">TestFileMmapEngine</a>
+extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
+<div class="block">Basic test for <code>FileMmapEngine</code></div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ======== CONSTRUCTOR SUMMARY ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_summary">
+<!--   -->
+</a>
+<h3>Constructor Summary</h3>
+<table class="overviewSummary" 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><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html#TestFileMmapEngine()">TestFileMmapEngine</a></strong>()</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="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html#testFileMmapEngine()">testFileMmapEngine</a></strong>()</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="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
+<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#clone()" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#equals(java.lang.Object)" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#finalize()" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#getClass()" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#hashCode()" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#notify()" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang
 /Object.html?is-external=true#notifyAll()" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#toString()" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait()" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long)" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true#wait(long,%20int)" title="class or interface in java.lang">wait</a></code></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========= CONSTRUCTOR DETAIL ======== -->
+<ul class="blockList">
+<li class="blockList"><a name="constructor_detail">
+<!--   -->
+</a>
+<h3>Constructor Detail</h3>
+<a name="TestFileMmapEngine()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>TestFileMmapEngine</h4>
+<pre>public&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html#line.38">TestFileMmapEngine</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="testFileMmapEngine()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testFileMmapEngine</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html#line.40">testFileMmapEngine</a>()
+                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</div>
+<!-- ========= END OF CLASS DATA ========= -->
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/TestFileMmapEngine.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/io/hfile/bucket/TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">Prev Class</span></a></li>
+<li>Next Class</li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../../../index.html?org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="TestFileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../allclasses-noframe.html">All 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>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_summary">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li><a href="#constructor_detail">Constr</a>&nbsp;|&nbsp;</li>
+<li><a href="#method_detail">Method</a></li>
+</ul>
+</div>
+<a name="skip-navbar_bottom">
+<!--   -->
+</a></div>
+<!-- ======== END OF BOTTOM NAVBAR ======= -->
+<p class="legalCopy"><small>Copyright &#169; 2007&#x2013;2016 <a href="http://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/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/TestFileMmapEngine.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/TestFileMmapEngine.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/TestFileMmapEngine.html
new file mode 100644
index 0000000..8f8273d
--- /dev/null
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/TestFileMmapEngine.html
@@ -0,0 +1,115 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Class org.apache.hadoop.hbase.io.hfile.bucket.TestFileMmapEngine (Apache HBase 2.0.0-SNAPSHOT Test API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Class org.apache.hadoop.hbase.io.hfile.bucket.TestFileMmapEngine (Apache HBase 2.0.0-SNAPSHOT Test API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">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/io/hfile/bucket/class-use/TestFileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="TestFileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../../../allclasses-noframe.html">All 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.io.hfile.bucket.TestFileMmapEngine" class="title">Uses of Class<br>org.apache.hadoop.hbase.io.hfile.bucket.TestFileMmapEngine</h2>
+</div>
+<div class="classUseContainer">No usage of org.apache.hadoop.hbase.io.hfile.bucket.TestFileMmapEngine</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">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/io/hfile/bucket/class-use/TestFileMmapEngine.html" target="_top">Frames</a></li>
+<li><a href="TestFileMmapEngine.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../../../allclasses-noframe.html">All 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;2016 <a href="http://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/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
index 2e2558e..48580e9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
@@ -17,6 +17,7 @@
 <li><a href="TestByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestByteBufferIOEngine</a></li>
 <li><a href="TestByteBufferIOEngine.BufferGrabbingDeserializer.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestByteBufferIOEngine.BufferGrabbingDeserializer</a></li>
 <li><a href="TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestFileIOEngine</a></li>
+<li><a href="TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestFileMmapEngine</a></li>
 </ul>
 </div>
 </body>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
index 146ced8..dec1cc1 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
@@ -109,6 +109,12 @@
 <div class="block">Basic test for <code>FileIOEngine</code></div>
 </td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestFileMmapEngine</a></td>
+<td class="colLast">
+<div class="block">Basic test for <code>FileMmapEngine</code></div>
+</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
index b03d5f6..0d5cce9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
@@ -84,6 +84,7 @@
 <li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestByteBufferIOEngine</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestByteBufferIOEngine.BufferGrabbingDeserializer.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestByteBufferIOEngine.BufferGrabbingDeserializer</span></a> (implements org.apache.hadoop.hbase.io.hfile.CacheableDeserializer&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestFileIOEngine</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestFileMmapEngine</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html
index 8210b45..f490cb0 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html#line.34">TestTableInputFormatBase</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html#line.32">TestTableInputFormatBase</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -164,7 +164,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestTableInputFormatBase</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html#line.34">TestTableInputFormatBase</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html#line.32">TestTableInputFormatBase</a>()</pre>
 </li>
 </ul>
 </li>
@@ -181,12 +181,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testTableInputFormatBaseReverseDNSForIPv6</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html#line.36">testTableInputFormatBaseReverseDNSForIPv6</a>()
-                                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a>,
-                                                      <a href="http://docs.oracle.com/javase/7/docs/api/javax/naming/NamingException.html?is-external=true" title="class or interface in javax.naming">NamingException</a></pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TestTableInputFormatBase.html#line.34">testTableInputFormatBaseReverseDNSForIPv6</a>()
+                                               throws <a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></code></dd>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/javax/naming/NamingException.html?is-external=true" title="class or interface in javax.naming">NamingException</a></code></dd></dl>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></code></dd></dl>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/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 df371ff..6622b08 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -515,16 +515,16 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/ScanPerformanceEvaluation.ScanCounter.html" title="enum in org.apache.hadoop.hbase"><span class="strong">ScanPerformanceEvaluation.ScanCounter</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="strong">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="strong">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="strong">RESTApiClusterManager.Service</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/IntegrationTestDDLMasterFailover.ACTION.html" title="enum in org.apache.hadoop.hbase"><span class="strong">IntegrationTestDDLMasterFailover.ACTION</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="strong">IntegrationTestRegionReplicaPerf.Stat</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestRegionServerMetrics.Metric.html" title="enum in org.apache.hadoop.hbase"><span class="strong">TestRegionServerMetrics.Metric</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="strong">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="strong">RESTApiClusterManager.RoleCommand</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="strong">HBaseClusterManager.CommandProvider.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/TestRegionServerMetrics.Metric.html" title="enum in org.apache.hadoop.hbase"><span class="strong">TestRegionServerMetrics.Metric</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="strong">PerformanceEvaluation.Counter</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="strong">ResourceChecker.Phase</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="strong">RESTApiClusterManager.Service</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/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 73fc8a4..eca46be 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -544,9 +544,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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="strong">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="strong">TestAtomicOperation.TestStep</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DataBlockEncodingTool.Manipulation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DataBlockEncodingTool.Manipulation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TestCacheOnWriteInSchema.CacheOnWriteType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">TestCacheOnWriteInSchema.CacheOnWriteType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
index a78922e..7130dd9 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/util/TestByteBufferArray.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.30">TestByteBufferArray</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.33">TestByteBufferArray</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -164,7 +164,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestByteBufferArray</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.30">TestByteBufferArray</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.33">TestByteBufferArray</a>()</pre>
 </li>
 </ul>
 </li>
@@ -181,7 +181,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>testAsSubBufferWhenEndOffsetLandInLastBuffer</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.33">testAsSubBufferWhenEndOffsetLandInLastBuffer</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/TestByteBufferArray.html#line.36">testAsSubBufferWhenEndOffsetLandInLastBuffer</a>()
                                                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/overview-tree.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/overview-tree.html b/testdevapidocs/overview-tree.html
index e113e54..d1ab0b7 100644
--- a/testdevapidocs/overview-tree.html
+++ b/testdevapidocs/overview-tree.html
@@ -2046,6 +2046,7 @@
 <li type="circle">org.apache.hadoop.hbase.regionserver.compactions.<a href="org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions"><span class="strong">TestFIFOCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestFileIOEngine</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.<a href="org/apache/hadoop/hbase/io/TestFileLink.html" title="class in org.apache.hadoop.hbase.io"><span class="strong">TestFileLink</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestFileMmapEngine</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestFilter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterList.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestFilterList</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="org/apache/hadoop/hbase/filter/TestFilterSerialization.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestFilterSerialization</span></a></li>


[36/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/IOEngine.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/IOEngine.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/IOEngine.html
index a5552c1..1c2826a 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/IOEngine.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/class-use/IOEngine.html
@@ -110,6 +110,13 @@
 <div class="block">IO engine that stores data to a file on the local file system.</div>
 </td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></strong></code>
+<div class="block">IO engine that stores data to a file on the local file system using memory mapping
+ mechanism</div>
+</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
index 5400821..ad14055 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-frame.html
@@ -26,6 +26,7 @@
 <li><a href="ByteBufferIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">ByteBufferIOEngine</a></li>
 <li><a href="CachedEntryQueue.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">CachedEntryQueue</a></li>
 <li><a href="FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">FileIOEngine</a></li>
+<li><a href="FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">FileMmapEngine</a></li>
 <li><a href="UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">UniqueIndexMap</a></li>
 </ul>
 <h2 title="Exceptions">Exceptions</h2>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
index 56cfb7f..b477da1 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html
@@ -163,6 +163,13 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></td>
+<td class="colLast">
+<div class="block">IO engine that stores data to a file on the local file system using memory mapping
+ mechanism</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;T&gt;</td>
 <td class="colLast">
 <div class="block">Map from type T to int and vice-versa.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
index 20ae1e9..17bf757 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/bucket/package-tree.html
@@ -89,6 +89,7 @@
 </ul>
 </li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">FileIOEngine</span></a> (implements org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">FileMmapEngine</span></a> (implements org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">HasThread</span></a> (implements java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.bucket.<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.WriterThread.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">BucketCache.WriterThread</span></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/Cacheable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/Cacheable.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/Cacheable.html
index 85cad1e..4c339b0 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/Cacheable.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/Cacheable.html
@@ -429,6 +429,12 @@
         int&nbsp;length,
         <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></code></td>
+<td class="colLast"><span class="strong">FileMmapEngine.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read</a></strong>(long&nbsp;offset,
+        int&nbsp;length,
+        <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 <table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing methods, and an explanation">
@@ -513,6 +519,12 @@
         <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></code></td>
+<td class="colLast"><span class="strong">FileMmapEngine.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read</a></strong>(long&nbsp;offset,
+        int&nbsp;length,
+        <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">BucketCache.BucketEntry.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#setDeserialiserReference(org.apache.hadoop.hbase.io.hfile.CacheableDeserializer,%20org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap)">setDeserialiserReference</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer,
                                                 <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;deserialiserMap)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/CacheableDeserializer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/CacheableDeserializer.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/CacheableDeserializer.html
index 145fa84..8376bf0 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/CacheableDeserializer.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/class-use/CacheableDeserializer.html
@@ -212,6 +212,12 @@
         <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a></code></td>
+<td class="colLast"><span class="strong">FileMmapEngine.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#read(long,%20int,%20org.apache.hadoop.hbase.io.hfile.CacheableDeserializer)">read</a></strong>(long&nbsp;offset,
+        int&nbsp;length,
+        <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer)</code>&nbsp;</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><span class="strong">BucketCache.BucketEntry.</span><code><strong><a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntry.html#setDeserialiserReference(org.apache.hadoop.hbase.io.hfile.CacheableDeserializer,%20org.apache.hadoop.hbase.io.hfile.bucket.UniqueIndexMap)">setDeserialiserReference</a></strong>(<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/CacheableDeserializer.html" title="interface in org.apache.hadoop.hbase.io.hfile">CacheableDeserializer</a>&lt;<a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html" title="interface in org.apache.hadoop.hbase.io.hfile">Cacheable</a>&gt;&nbsp;deserializer,
                                                 <a href="../../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;deserialiserMap)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 95a56d1..c60324d 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -271,11 +271,11 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">HFileBlock.Writer.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockPriority</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">CacheConfig.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.MemoryType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">Cacheable.MemoryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/CacheConfig.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">CacheConfig.ExternalBlockCaches</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="strong">BlockType.BlockCategory</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
index 8c36d4d..60d1885 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
@@ -106,7 +106,7 @@
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Public</a>
 <a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Stable</a>
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.103">TableInputFormatBase</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.101">TableInputFormatBase</a>
 extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;</pre>
 <div class="block">A base for <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableInputFormat</code></a>s. Receives a <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>, a <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase"><code>TableName</code></a>,
  an <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client"><code>Scan</code></a> instance that defines the input columns etc. Subclasses may use
@@ -403,7 +403,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>MAPREDUCE_INPUT_AUTOBALANCE</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.107">MAPREDUCE_INPUT_AUTOBALANCE</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.105">MAPREDUCE_INPUT_AUTOBALANCE</a></pre>
 <div class="block">Specify if we enable auto-balance for input in M/R jobs.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.MAPREDUCE_INPUT_AUTOBALANCE">Constant Field Values</a></dd></dl>
 </li>
@@ -414,7 +414,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>INPUT_AUTOBALANCE_MAXSKEWRATIO</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.110">INPUT_AUTOBALANCE_MAXSKEWRATIO</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.108">INPUT_AUTOBALANCE_MAXSKEWRATIO</a></pre>
 <div class="block">Specify if ratio for data skew in M/R jobs, it goes well with the enabling hbase.mapreduce
  .input.autobalance property.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.INPUT_AUTOBALANCE_MAXSKEWRATIO">Constant Field Values</a></dd></dl>
@@ -426,7 +426,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>TABLE_ROW_TEXTKEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.114">TABLE_ROW_TEXTKEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.112">TABLE_ROW_TEXTKEY</a></pre>
 <div class="block">Specify if the row key in table is text (ASCII between 32~126),
  default is true. False means the table is using binary row key</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.TABLE_ROW_TEXTKEY">Constant Field Values</a></dd></dl>
@@ -438,7 +438,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.116">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.114">LOG</a></pre>
 </li>
 </ul>
 <a name="NOT_INITIALIZED">
@@ -447,7 +447,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>NOT_INITIALIZED</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.118">NOT_INITIALIZED</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.116">NOT_INITIALIZED</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.NOT_INITIALIZED">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -457,7 +457,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>INITIALIZATION_ERROR</h4>
-<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.121">INITIALIZATION_ERROR</a></pre>
+<pre>private static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.119">INITIALIZATION_ERROR</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.INITIALIZATION_ERROR">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -467,7 +467,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>scan</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.128">scan</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.126">scan</a></pre>
 <div class="block">Holds the details for the internal scanner.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client"><code>Scan</code></a></dd></dl>
 </li>
@@ -478,7 +478,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>admin</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.130">admin</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client">Admin</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.128">admin</a></pre>
 <div class="block">The <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a>.</div>
 </li>
 </ul>
@@ -488,7 +488,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>table</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.132">table</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.130">table</a></pre>
 <div class="block">The <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client"><code>Table</code></a> to scan.</div>
 </li>
 </ul>
@@ -498,7 +498,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>regionLocator</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.134">regionLocator</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.132">regionLocator</a></pre>
 <div class="block">The <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionLocator</code></a> of the table.</div>
 </li>
 </ul>
@@ -508,7 +508,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>tableRecordReader</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReader</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.136">tableRecordReader</a></pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReader</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.134">tableRecordReader</a></pre>
 <div class="block">The reader scanning the table, can be a custom one.</div>
 </li>
 </ul>
@@ -518,7 +518,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>connection</h4>
-<pre>private&nbsp;<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/mapreduce/TableInputFormatBase.html#line.138">connection</a></pre>
+<pre>private&nbsp;<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/mapreduce/TableInputFormatBase.html#line.136">connection</a></pre>
 <div class="block">The underlying <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a> of the table.</div>
 </li>
 </ul>
@@ -528,7 +528,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockListLast">
 <li class="blockList">
 <h4>reverseDNSCacheMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.142">reverseDNSCacheMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html?is-external=true" title="class or interface in java.util">HashMap</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.140">reverseDNSCacheMap</a></pre>
 <div class="block">The reverse DNS lookup cache mapping: IPAddress => HostName</div>
 </li>
 </ul>
@@ -546,7 +546,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableInputFormatBase</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.103">TableInputFormatBase</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.101">TableInputFormatBase</a>()</pre>
 </li>
 </ul>
 </li>
@@ -563,7 +563,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>createRecordReader</h4>
-<pre>public&nbsp;org.apache.hadoop.mapreduce.RecordReader&lt;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.158">createRecordReader</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;split,
+<pre>public&nbsp;org.apache.hadoop.mapreduce.RecordReader&lt;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.156">createRecordReader</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;split,
                                                                                          org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)
                                                                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Builds a <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a>. If no <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a> was provided, uses
@@ -585,7 +585,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartEndKeys</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.219">getStartEndKeys</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.217">getStartEndKeys</a>()
                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -597,7 +597,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplits</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.234">getSplits</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.232">getSplits</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
                                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Calculates the splits that will serve as input for the map tasks. The
  number of splits matches the number of regions in a table.</div>
@@ -617,11 +617,9 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>reverseDNS</h4>
-<pre><a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.347">reverseDNS</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;ipAddress)
-            throws <a href="http://docs.oracle.com/javase/7/docs/api/javax/naming/NamingException.html?is-external=true" title="class or interface in javax.naming">NamingException</a>,
-                   <a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
+<pre><a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.340">reverseDNS</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html?is-external=true" title="class or interface in java.net">InetAddress</a>&nbsp;ipAddress)
+            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
-<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/javax/naming/NamingException.html?is-external=true" title="class or interface in javax.naming">NamingException</a></code></dd>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/net/UnknownHostException.html?is-external=true" title="class or interface in java.net">UnknownHostException</a></code></dd></dl>
 </li>
 </ul>
@@ -631,7 +629,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateRebalancedSplits</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.379">calculateRebalancedSplits</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;list,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.372">calculateRebalancedSplits</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;list,
                                                                      org.apache.hadoop.mapreduce.JobContext&nbsp;context,
                                                                      long&nbsp;average)
                                                                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -652,7 +650,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <li class="blockList">
 <h4>getSplitKey</h4>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.454">getSplitKey</a>(byte[]&nbsp;start,
+public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.447">getSplitKey</a>(byte[]&nbsp;start,
                                            byte[]&nbsp;end,
                                            boolean&nbsp;isText)</pre>
 <div class="block">select a split point in the region. The selection of the split point is based on an uniform
@@ -674,7 +672,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>includeRegionInSplit</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.552">includeRegionInSplit</a>(byte[]&nbsp;startKey,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.545">includeRegionInSplit</a>(byte[]&nbsp;startKey,
                            byte[]&nbsp;endKey)</pre>
 <div class="block">Test if the given region is to be included in the InputSplit while splitting
  the regions of a table.
@@ -698,7 +696,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocator</h4>
-<pre>protected&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/mapreduce/TableInputFormatBase.html#line.559">getRegionLocator</a>()</pre>
+<pre>protected&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/mapreduce/TableInputFormatBase.html#line.552">getRegionLocator</a>()</pre>
 <div class="block">Allows subclasses to get the <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionLocator</code></a>.</div>
 </li>
 </ul>
@@ -708,7 +706,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>getTable</h4>
-<pre>protected&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/mapreduce/TableInputFormatBase.html#line.569">getTable</a>()</pre>
+<pre>protected&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/mapreduce/TableInputFormatBase.html#line.562">getTable</a>()</pre>
 <div class="block">Allows subclasses to get the <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client"><code>Table</code></a>.</div>
 </li>
 </ul>
@@ -718,7 +716,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdmin</h4>
-<pre>protected&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/mapreduce/TableInputFormatBase.html#line.579">getAdmin</a>()</pre>
+<pre>protected&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/mapreduce/TableInputFormatBase.html#line.572">getAdmin</a>()</pre>
 <div class="block">Allows subclasses to get the <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a>.</div>
 </li>
 </ul>
@@ -728,7 +726,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeTable</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.593">initializeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.586">initializeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Allows subclasses to initialize the table information.</div>
@@ -743,7 +741,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>getScan</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.609">getScan</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.602">getScan</a>()</pre>
 <div class="block">Gets the scan defining the actual details like columns etc.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The internal scan instance.</dd></dl>
 </li>
@@ -754,7 +752,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>setScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.619">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.612">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
 <div class="block">Sets the scan defining the actual details like columns etc.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>scan</code> - The scan to set.</dd></dl>
 </li>
@@ -765,7 +763,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableRecordReader</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.629">setTableRecordReader</a>(<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReader</a>&nbsp;tableRecordReader)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.622">setTableRecordReader</a>(<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReader</a>&nbsp;tableRecordReader)</pre>
 <div class="block">Allows subclasses to set the <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a>.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>tableRecordReader</code> - A different <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a>
    implementation.</dd></dl>
@@ -777,7 +775,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.648">initialize</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.641">initialize</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Handle subclass specific set up.
  Each of the entry points used by the MapReduce framework,
@@ -801,7 +799,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockList">
 <li class="blockList">
 <h4>closeTable</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.657">closeTable</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.650">closeTable</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close the Table and related objects that were initialized via
  <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#initializeTable(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.TableName)"><code>initializeTable(Connection, TableName)</code></a>.</div>
@@ -815,7 +813,7 @@ public static&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoo
 <ul class="blockListLast">
 <li class="blockList">
 <h4>close</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.665">close</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>...&nbsp;closables)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.658">close</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/Closeable.html?is-external=true" title="class or interface in java.io">Closeable</a>...&nbsp;closables)
             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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/d02dd5db/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index a8ea334..8740365 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -267,10 +267,10 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">SyncTable.SyncMapper.Counter</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">TableSplit.Version</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">RowCounter.RowCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="strong">CellCounter.CellCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 1aef94f..4388335 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -318,11 +318,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.TerminationStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.ResubmitDirective</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">MasterRpcServices.BalanceSwitchMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">RegionState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="strong">SplitLogManager.TerminationStatus</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index aaf26d9..ecf9de1 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -145,9 +145,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">DisableTableProcedure.MarkRegionOfflineOpResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">TableProcedureInterface.TableOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">ServerProcedureInterface.ServerOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/DisableTableProcedure.MarkRegionOfflineOpResult.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="strong">DisableTableProcedure.MarkRegionOfflineOpResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html b/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
index e121edf..45d522c 100644
--- a/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
+++ b/devapidocs/org/apache/hadoop/hbase/nio/class-use/ByteBuff.html
@@ -668,6 +668,11 @@
 <td class="colLast"><span class="strong">ByteBufferIOEngine.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">write</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
           long&nbsp;offset)</code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><span class="strong">FileMmapEngine.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#write(org.apache.hadoop.hbase.nio.ByteBuff,%20long)">write</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;srcBuffer,
+          long&nbsp;offset)</code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 186e0be..982d772 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -352,8 +352,8 @@
 </ul>
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/VersionAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">VersionAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaMutationAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">MetaMutationAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/VersionAnnotation.html" title="annotation in org.apache.hadoop.hbase"><span class="strong">VersionAnnotation</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 <h2 title="Enum Hierarchy">Enum Hierarchy</h2>
 <ul>
@@ -361,14 +361,14 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="strong">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="strong">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.OperationStatusCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="strong">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="strong">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="strong">MetaTableAccessor.QueryType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.Modify.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.Modify</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="strong">KeepDeletedCells</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HConstants.OperationStatusCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="strong">HealthChecker.HealthCheckerExitStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="strong">Coprocessor.State</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 19ef617..a73d0a7 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -120,8 +120,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">StateMachineProcedure.Flow</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">RootProcedureState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="strong">StateMachineProcedure.Flow</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 995b01f..7e08554 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -172,11 +172,11 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottleType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaScope</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">ThrottlingException.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="strong">QuotaType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index a373330..3d37b20 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -629,24 +629,24 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">StoreScanner.StoreScannerCompactionRace</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.LimitScope</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionOpeningState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionOpeningState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteCompare.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteCompare</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreScanner.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MemStoreScanner.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/StoreScanner.StoreScannerCompactionRace.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">StoreScanner.StoreScannerCompactionRace</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">FlushType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitLogWorker.TaskExecutor.Status</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">ScannerContext.NextState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitTransaction.SplitTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">SplitTransaction.SplitTransactionPhase</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionMergeTransaction.RegionMergeTransactionPhase.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">RegionMergeTransaction.RegionMergeTransactionPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="strong">DeleteTracker.DeleteResult</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
index 00d2201..546973c 100644
--- a/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/rest/model/package-tree.html
@@ -101,8 +101,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.ByteArrayComparableModel.ComparatorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.rest.model.<a href="../../../../../../org/apache/hadoop/hbase/rest/model/ScannerModel.FilterModel.FilterType.html" title="enum in org.apache.hadoop.hbase.rest.model"><span class="strong">ScannerModel.FilterModel.FilterType</span></a></li>
 </ul>
 </li>
 </ul>


[41/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/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 17e7086..08cd800 100644
--- a/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
+++ b/devapidocs/org/apache/hadoop/hbase/class-use/TableName.html
@@ -969,16 +969,6 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><span class="strong">HTableMultiplexer.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#_put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put,%20int,%20boolean)">_put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
-        int&nbsp;maxAttempts,
-        boolean&nbsp;reloadCache)</code>
-<div class="block">Internal "put" which exposes a boolean flag to control whether or not the region location
- cache should be reloaded when trying to queue the <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a>.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#addColumn(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HColumnDescriptor)">addColumn</a></strong>(<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/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;columnFamily)</code>
@@ -988,7 +978,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#addColumn(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HColumnDescriptor)">addColumn</a></strong>(<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/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;columnFamily)</code>
@@ -1000,33 +990,33 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#addColumnFamily(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HColumnDescriptor)">addColumnFamily</a></strong>(<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/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;columnFamily)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#addColumnFamily(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.HColumnDescriptor)">addColumnFamily</a></strong>(<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/HColumnDescriptor.html" title="class in org.apache.hadoop.hbase">HColumnDescriptor</a>&nbsp;columnFamily)</code>
 <div class="block">Add a column family to an existing table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#cacheLocation(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.RegionLocations)">cacheLocation</a></strong>(<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)</code>
 <div class="block">Put a newly discovered HRegionLocation into the cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#cacheLocation(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.RegionLocations)">cacheLocation</a></strong>(<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;locations)</code>
 <div class="block">Put a newly discovered HRegionLocation into the cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#cacheLocation(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionLocation)">cacheLocation</a></strong>(<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,
@@ -1034,7 +1024,7 @@ service.</div>
 <div class="block">Put a newly discovered HRegionLocation into the cache.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#cacheLocation(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.HRegionLocation)">cacheLocation</a></strong>(<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,
@@ -1042,26 +1032,26 @@ service.</div>
 <div class="block">Put a newly discovered HRegionLocation into the cache.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a></code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#checkTableExists(org.apache.hadoop.hbase.TableName)">checkTableExists</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Check if table exists or not</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#clearCache(org.apache.hadoop.hbase.TableName)">clearCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Delete all cached entries of a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#clearCache(org.apache.hadoop.hbase.TableName,%20byte[])">clearCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     byte[]&nbsp;row)</code>
 <div class="block">Delete a cached location, no matter what it is.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#clearCache(org.apache.hadoop.hbase.TableName,%20byte[],%20int)">clearCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     byte[]&nbsp;row,
@@ -1069,7 +1059,7 @@ service.</div>
 <div class="block">Delete a cached location, no matter what it is.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#clearCache(org.apache.hadoop.hbase.TableName,%20byte[],%20org.apache.hadoop.hbase.ServerName)">clearCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                     byte[]&nbsp;row,
@@ -1077,11 +1067,11 @@ service.</div>
 <div class="block">Delete a cached location for a table, row and server</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#clearRegionCache(org.apache.hadoop.hbase.TableName)">clearRegionCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#clearRegionCache(org.apache.hadoop.hbase.TableName)">clearRegionCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;
@@ -1089,83 +1079,83 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">ClusterConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#clearRegionCache(org.apache.hadoop.hbase.TableName)">clearRegionCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Allows flushing the region cache of all locations that pertain to
  <code>tableName</code></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#clearRegionCache(org.apache.hadoop.hbase.TableName,%20byte[])">clearRegionCache</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 byte[]&nbsp;row)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#cloneSnapshot(byte[],%20org.apache.hadoop.hbase.TableName)">cloneSnapshot</a></strong>(byte[]&nbsp;snapshotName,
                           <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#cloneSnapshot(byte[],%20org.apache.hadoop.hbase.TableName)">cloneSnapshot</a></strong>(byte[]&nbsp;snapshotName,
                           <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Create a new table by cloning the snapshot content.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#cloneSnapshot(java.lang.String,%20org.apache.hadoop.hbase.TableName)">cloneSnapshot</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                           <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#cloneSnapshot(java.lang.String,%20org.apache.hadoop.hbase.TableName)">cloneSnapshot</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                           <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Create a new table by cloning the snapshot content.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact(org.apache.hadoop.hbase.TableName)">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact(org.apache.hadoop.hbase.TableName)">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Admin.CompactType)">compact</a></strong>(<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/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client">Admin.CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Admin.CompactType)">compact</a></strong>(<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/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client">Admin.CompactType</a>&nbsp;compactType)</code>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact(org.apache.hadoop.hbase.TableName,%20byte[])">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact(org.apache.hadoop.hbase.TableName,%20byte[])">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;columnFamily)</code>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact(org.apache.hadoop.hbase.TableName,%20byte[],%20org.apache.hadoop.hbase.client.Admin.CompactType)">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;columnFamily,
@@ -1173,7 +1163,7 @@ service.</div>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#compact(org.apache.hadoop.hbase.TableName,%20byte[],%20org.apache.hadoop.hbase.client.Admin.CompactType)">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;columnFamily,
@@ -1181,7 +1171,7 @@ service.</div>
 <div class="block">Compact a column family within a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#compact(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean,%20org.apache.hadoop.hbase.client.Admin.CompactType)">compact</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               byte[]&nbsp;columnFamily,
@@ -1190,14 +1180,14 @@ service.</div>
 <div class="block">Compact a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="strong">TableState.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TableState.html#convert(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.TableState)">convert</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
               org.apache.hadoop.hbase.protobuf.generated.HBaseProtos.TableState&nbsp;tableState)</code>
 <div class="block">Covert from PB version of TableState</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected &lt;CResult&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFutureImpl</a>&lt;CResult&gt;</code></td>
 <td class="colLast"><span class="strong">AsyncProcess.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.html#createAsyncRequestFuture(org.apache.hadoop.hbase.TableName,%20java.util.List,%20long,%20java.util.concurrent.ExecutorService,%20org.apache.hadoop.hbase.client.coprocessor.Batch.Callback,%20java.lang.Object[],%20boolean)">createAsyncRequestFuture</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                 <a href="http://docs.oracle.com/javase/7/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/Action.html" title="class in org.apache.hadoop.hbase.client">Action</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&gt;&nbsp;actions,
@@ -1207,7 +1197,7 @@ service.</div>
                                                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>[]&nbsp;results,
                                                 boolean&nbsp;needResults)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;</code></td>
 <td class="colLast"><span class="strong">AsyncProcess.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.html#createCallable(org.apache.hadoop.hbase.ServerName,%20org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.MultiAction)">createCallable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                             <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -1215,14 +1205,14 @@ service.</div>
 <div class="block">Create a callable.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a></code></td>
 <td class="colLast"><span class="strong">HTableWrapper.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableWrapper.html#createWrapper(java.util.List,%20org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.coprocessor.CoprocessorHost.Environment,%20java.util.concurrent.ExecutorService)">createWrapper</a></strong>(<a href="http://docs.oracle.com/javase/7/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/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a>&gt;&nbsp;openTables,
                           <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/coprocessor/CoprocessorHost.Environment.html" title="class in org.apache.hadoop.hbase.coprocessor">CoprocessorHost.Environment</a>&nbsp;env,
                           <a href="http://docs.oracle.com/javase/7/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>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumn(org.apache.hadoop.hbase.TableName,%20byte[])">deleteColumn</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;columnFamily)</code>
@@ -1232,7 +1222,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumn(org.apache.hadoop.hbase.TableName,%20byte[])">deleteColumn</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;columnFamily)</code>
@@ -1244,125 +1234,125 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteColumnFamily(org.apache.hadoop.hbase.TableName,%20byte[])">deleteColumnFamily</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;columnFamily)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteColumnFamily(org.apache.hadoop.hbase.TableName,%20byte[])">deleteColumnFamily</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;columnFamily)</code>
 <div class="block">Delete a column family from a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTable(org.apache.hadoop.hbase.TableName)">deleteTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTable(org.apache.hadoop.hbase.TableName)">deleteTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#deleteTableAsync(org.apache.hadoop.hbase.TableName)">deleteTableAsync</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#deleteTableAsync(org.apache.hadoop.hbase.TableName)">deleteTableAsync</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Deletes the table but does not block and wait for it be completely removed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTable(org.apache.hadoop.hbase.TableName)">disableTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTable(org.apache.hadoop.hbase.TableName)">disableTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable table and wait on completion.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#disableTableAsync(org.apache.hadoop.hbase.TableName)">disableTableAsync</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#disableTableAsync(org.apache.hadoop.hbase.TableName)">disableTableAsync</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Disable the table but does not block and wait for it be completely disabled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTable(org.apache.hadoop.hbase.TableName)">enableTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTable(org.apache.hadoop.hbase.TableName)">enableTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#enableTableAsync(org.apache.hadoop.hbase.TableName)">enableTableAsync</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Future.html?is-external=true" title="class or interface in java.util.concurrent">Future</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Void.html?is-external=true" title="class or interface in java.lang">Void</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#enableTableAsync(org.apache.hadoop.hbase.TableName)">enableTableAsync</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Enable the table but does not block and wait for it be completely enabled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#flush(org.apache.hadoop.hbase.TableName)">flush</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#flush(org.apache.hadoop.hbase.TableName)">flush</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Flush a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getAlterStatus(org.apache.hadoop.hbase.TableName)">getAlterStatus</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getAlterStatus(org.apache.hadoop.hbase.TableName)">getAlterStatus</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the status of alter command - indicates how many regions have received the updated schema
  Asynchronous operation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getBufferedMutator(org.apache.hadoop.hbase.TableName)">getBufferedMutator</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/BufferedMutator.html" title="interface in org.apache.hadoop.hbase.client">BufferedMutator</a></code></td>
 <td class="colLast"><span class="strong">Connection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getBufferedMutator(org.apache.hadoop.hbase.TableName)">getBufferedMutator</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <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.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getCachedLocation(org.apache.hadoop.hbase.TableName,%20byte[])">getCachedLocation</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                   byte[]&nbsp;row)</code>
 <div class="block">Search the cache for a location that fits our table and row key.</div>
 </td>
 </tr>
-<tr class="altColor">
+<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>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#getCachedLocation(org.apache.hadoop.hbase.TableName,%20byte[])">getCachedLocation</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                   byte[]&nbsp;row)</code>
 <div class="block">Search the cache for a location that fits our table and row key.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/ScannerCallableWithReplicas.html" title="class in org.apache.hadoop.hbase.client">ScannerCallableWithReplicas</a></code></td>
 <td class="colLast"><span class="strong">ClientSmallScanner.SmallScannerCallableFactory.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClientSmallScanner.SmallScannerCallableFactory.html#getCallable(org.apache.hadoop.hbase.client.ClusterConnection,%20org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Scan,%20org.apache.hadoop.hbase.client.metrics.ScanMetrics,%20byte[],%20int,%20org.apache.hadoop.hbase.ipc.RpcControllerFactory,%20java.util.concurrent.ExecutorService,%20int,%20int,%20int,%20org.apache.hadoop.conf.Configuration,%20org.apache.hadoop.hbase.client.RpcRetryingCaller)">getCallable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
                       <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;table,
@@ -1378,31 +1368,31 @@ service.</div>
                       org.apache.hadoop.conf.Configuration&nbsp;conf,
                       <a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCaller.html" title="interface in org.apache.hadoop.hbase.client">RpcRetryingCaller</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>[]&gt;&nbsp;caller)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionState(org.apache.hadoop.hbase.TableName)">getCompactionState</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState(org.apache.hadoop.hbase.TableName)">getCompactionState</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getCompactionState(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Admin.CompactType)">getCompactionState</a></strong>(<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/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client">Admin.CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>org.apache.hadoop.hbase.protobuf.generated.AdminProtos.GetRegionInfoResponse.CompactionState</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getCompactionState(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Admin.CompactType)">getCompactionState</a></strong>(<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/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client">Admin.CompactType</a>&nbsp;compactType)</code>
 <div class="block">Get the current compaction state of a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getHTableDescriptor(org.apache.hadoop.hbase.TableName)">getHTableDescriptor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;
@@ -1411,7 +1401,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getHTableDescriptor(org.apache.hadoop.hbase.TableName)">getHTableDescriptor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;
@@ -1419,11 +1409,11 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getLastMajorCompactionTimestamp(org.apache.hadoop.hbase.TableName)">getLastMajorCompactionTimestamp</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getLastMajorCompactionTimestamp(org.apache.hadoop.hbase.TableName)">getLastMajorCompactionTimestamp</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the timestamp of the last major compaction for the passed table
@@ -1432,21 +1422,21 @@ service.</div>
  or 0 if no such HFile could be found.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a></code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getMobRegionInfo(org.apache.hadoop.hbase.TableName)">getMobRegionInfo</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) int</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getNumberOfCachedRegionLocations(org.apache.hadoop.hbase.TableName)">getNumberOfCachedRegionLocations</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#getNumberOfCachedRegionLocations(org.apache.hadoop.hbase.TableName)">getNumberOfCachedRegionLocations</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Return the number of cached region for a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getRegionCachePrefetch(org.apache.hadoop.hbase.TableName)">getRegionCachePrefetch</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;
@@ -1454,7 +1444,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getRegionCachePrefetch(org.apache.hadoop.hbase.TableName)">getRegionCachePrefetch</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;
@@ -1462,13 +1452,13 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getRegionLocation(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean)">getRegionLocation</a></strong>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getRegionLocation(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean)">getRegionLocation</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                   byte[]&nbsp;row,
@@ -1478,7 +1468,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></code></td>
 <td class="colLast"><span class="strong">ClusterConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#getRegionLocation(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean)">getRegionLocation</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                   byte[]&nbsp;row,
@@ -1486,7 +1476,7 @@ service.</div>
 <div class="block">Find region location hosting passed row</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="strong">RpcRetryingCallerWithReadReplicas.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerWithReadReplicas.html#getRegionLocations(boolean,%20int,%20org.apache.hadoop.hbase.client.ClusterConnection,%20org.apache.hadoop.hbase.TableName,%20byte[])">getRegionLocations</a></strong>(boolean&nbsp;useCache,
                                     int&nbsp;replicaId,
@@ -1494,7 +1484,7 @@ service.</div>
                                     <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                     byte[]&nbsp;row)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="strong">RegionAdminServiceCallable.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/RegionAdminServiceCallable.html#getRegionLocations(org.apache.hadoop.hbase.client.ClusterConnection,%20org.apache.hadoop.hbase.TableName,%20byte[],%20boolean,%20int)">getRegionLocations</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;connection,
                                     <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
@@ -1502,46 +1492,46 @@ service.</div>
                                     boolean&nbsp;useCache,
                                     int&nbsp;replicaId)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getRegionLocator(org.apache.hadoop.hbase.TableName)">getRegionLocator</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getRegionLocator(org.apache.hadoop.hbase.TableName)">getRegionLocator</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 <div class="block">Retrieve a RegionLocator implementation to inspect region information on a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client">RegionLocator</a></code></td>
 <td class="colLast"><span class="strong">Connection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getRegionLocator(org.apache.hadoop.hbase.TableName)">getRegionLocator</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Retrieve a RegionLocator implementation to inspect region information on a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/HTableInterface.html" title="interface in org.apache.hadoop.hbase.client">HTableInterface</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getTable(org.apache.hadoop.hbase.TableName)">getTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/HTableInterface.html" title="interface in org.apache.hadoop.hbase.client">HTableInterface</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getTable(org.apache.hadoop.hbase.TableName)">getTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 <div class="block">Retrieve an HTableInterface implementation for access to a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a></code></td>
 <td class="colLast"><span class="strong">Connection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable(org.apache.hadoop.hbase.TableName)">getTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Retrieve a Table implementation for accessing a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/HTableInterface.html" title="interface in org.apache.hadoop.hbase.client">HTableInterface</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getTable(org.apache.hadoop.hbase.TableName,%20java.util.concurrent.ExecutorService)">getTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="http://docs.oracle.com/javase/7/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><a href="../../../../../org/apache/hadoop/hbase/client/HTableInterface.html" title="interface in org.apache.hadoop.hbase.client">HTableInterface</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getTable(org.apache.hadoop.hbase.TableName,%20java.util.concurrent.ExecutorService)">getTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</code>
@@ -1549,103 +1539,103 @@ service.</div>
 <div class="block">Retrieve an HTableInterface implementation for access to a table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client">Table</a></code></td>
 <td class="colLast"><span class="strong">Connection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Connection.html#getTable(org.apache.hadoop.hbase.TableName,%20java.util.concurrent.ExecutorService)">getTable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                 <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool)</code>
 <div class="block">Retrieve a Table implementation for accessing a table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptor(org.apache.hadoop.hbase.TableName)">getTableDescriptor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableDescriptor(org.apache.hadoop.hbase.TableName)">getTableDescriptor</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Method for getting the tableDescriptor</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) static <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptor(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.HConnection,%20org.apache.hadoop.hbase.client.RpcRetryingCallerFactory,%20int)">getTableDescriptor</a></strong>(<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/HConnection.html" title="interface in org.apache.hadoop.hbase.client">HConnection</a>&nbsp;connection,
                                     <a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCallerFactory.html" title="class in org.apache.hadoop.hbase.client">RpcRetryingCallerFactory</a>&nbsp;rpcCallerFactory,
                                     int&nbsp;operationTimeout)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/HTableDescriptor.html" title="class in org.apache.hadoop.hbase">HTableDescriptor</a></code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableDescriptorByTableName(org.apache.hadoop.hbase.TableName)">getTableDescriptorByTableName</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get tableDescriptor</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/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/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a>&gt;</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#getTableLocations(org.apache.hadoop.hbase.TableName)">getTableLocations</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableRegions(org.apache.hadoop.hbase.TableName)">getTableRegions</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/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/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&gt;</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#getTableRegions(org.apache.hadoop.hbase.TableName)">getTableRegions</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Get the regions of a given table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private byte[][]</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#getTableSplits(org.apache.hadoop.hbase.TableName)">getTableSplits</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#getTableState(org.apache.hadoop.hbase.TableName)">getTableState</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#getTableState(org.apache.hadoop.hbase.TableName)">getTableState</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 <div class="block">Retrieve TableState, represent current table state.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#internalRestoreSnapshot(java.lang.String,%20org.apache.hadoop.hbase.TableName)">internalRestoreSnapshot</a></strong>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;snapshotName,
                                               <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block">Execute Restore/Clone snapshot and wait for the server to complete (blocking).</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">MetaCache.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/MetaCache.html#isRegionCached(org.apache.hadoop.hbase.TableName,%20byte[])">isRegionCached</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                             byte[]&nbsp;row)</code>
 <div class="block">Check the region cache to see whether a region is cached yet or not.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#isTableAvailable(org.apache.hadoop.hbase.TableName)">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#isTableAvailable(org.apache.hadoop.hbase.TableName)">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableAvailable(org.apache.hadoop.hbase.TableName)">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableAvailable(org.apache.hadoop.hbase.TableName)">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#isTableAvailable(org.apache.hadoop.hbase.TableName,%20byte[][])">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 byte[][]&nbsp;splitKeys)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#isTableAvailable(org.apache.hadoop.hbase.TableName,%20byte[][])">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 byte[][]&nbsp;splitKeys)</code>
@@ -1654,12 +1644,12 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableAvailable(org.apache.hadoop.hbase.TableName,%20byte[][])">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 byte[][]&nbsp;splitKeys)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ClusterConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#isTableAvailable(org.apache.hadoop.hbase.TableName,%20byte[][])">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 byte[][]&nbsp;splitKeys)</code>
@@ -1667,7 +1657,7 @@ service.</div>
  splitkeys which was used while creating the given table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableAvailable(org.apache.hadoop.hbase.TableName,%20byte[][])">isTableAvailable</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                 byte[][]&nbsp;splitKeys)</code>
@@ -1675,33 +1665,33 @@ service.</div>
  which was used while creating the given table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#isTableDisabled(org.apache.hadoop.hbase.TableName)">isTableDisabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#isTableDisabled(org.apache.hadoop.hbase.TableName)">isTableDisabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
 &nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableDisabled(org.apache.hadoop.hbase.TableName)">isTableDisabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ConnectionUtils.MasterlessConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionUtils.MasterlessConnection.html#isTableDisabled(org.apache.hadoop.hbase.TableName)">isTableDisabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableDisabled(org.apache.hadoop.hbase.TableName)">isTableDisabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#isTableEnabled(org.apache.hadoop.hbase.TableName)">isTableEnabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#isTableEnabled(org.apache.hadoop.hbase.TableName)">isTableEnabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>
 <div class="block"><strong>Deprecated.</strong>&nbsp;</div>
@@ -1709,26 +1699,26 @@ service.</div>
  is possible.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HBaseAdmin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HBaseAdmin.html#isTableEnabled(org.apache.hadoop.hbase.TableName)">isTableEnabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">Admin.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/Admin.html#isTableEnabled(org.apache.hadoop.hbase.TableName)">isTableEnabled</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#locateMeta(org.apache.hadoop.hbase.TableName,%20boolean,%20int)">locateMeta</a></strong>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[])">locateRegion</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;row)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></code></td>
 <td class="colLast"><span class="strong">HConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HConnection.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[])">locateRegion</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;row)</code>
@@ -1737,7 +1727,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a></code></td>
 <td class="colLast"><span class="strong">ClusterConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[])">locateRegion</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;row)</code>
@@ -1745,21 +1735,21 @@ service.</div>
  lives in.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean,%20boolean)">locateRegion</a></strong>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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>
 <td class="colLast"><span class="strong">ClusterConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean,%20boolean)">locateRegion</a></strong>(<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)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/RegionLocations.html" title="class in org.apache.hadoop.hbase">RegionLocations</a></code></td>
 <td class="colLast"><span class="strong">ConnectionImplementation.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean,%20boolean,%20int)">locateRegion</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;row,
@@ -1767,7 +1757,7 @@ service.</div>
                         boolean&nbsp;retry,
                         int&nbsp;replicaId)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<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>
 <td class="colLast"><span class="strong">ClusterConnection.</span><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html#locateRegion(org.apache.hadoop.hbase.TableName,%20byte[],%20boolean,%20boolean,%20int)">locateRegion</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                         byte[]&nbsp;row,
@@ -1775,7 +1765,7 @@ service.</div>
                         boolean&nbsp;retry,
          

<TRUNCATED>

[05/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-management.html b/hbase-archetypes/dependency-management.html
index fb01451..d93f8f7 100644
--- a/hbase-archetypes/dependency-management.html
+++ b/hbase-archetypes/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/distribution-management.html b/hbase-archetypes/distribution-management.html
index abeac22..1da68ae 100644
--- a/hbase-archetypes/distribution-management.html
+++ b/hbase-archetypes/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependencies.html b/hbase-archetypes/hbase-archetype-builder/dependencies.html
index aa992aa..e8da0fd 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependencies.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html b/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
index 9c4c9b3..fa36890 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-info.html b/hbase-archetypes/hbase-archetype-builder/dependency-info.html
index d4e5ca3..8ce8154 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/dependency-management.html b/hbase-archetypes/hbase-archetype-builder/dependency-management.html
index d46cf45..6eb1ddb 100644
--- a/hbase-archetypes/hbase-archetype-builder/dependency-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/distribution-management.html b/hbase-archetypes/hbase-archetype-builder/distribution-management.html
index 7cb1e18..24b449a 100644
--- a/hbase-archetypes/hbase-archetype-builder/distribution-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/index.html b/hbase-archetypes/hbase-archetype-builder/index.html
index 191f554..97d10a8 100644
--- a/hbase-archetypes/hbase-archetype-builder/index.html
+++ b/hbase-archetypes/hbase-archetype-builder/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/integration.html b/hbase-archetypes/hbase-archetype-builder/integration.html
index 515b9bc..bd01a16 100644
--- a/hbase-archetypes/hbase-archetype-builder/integration.html
+++ b/hbase-archetypes/hbase-archetype-builder/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html b/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
index a1524f8..110b85b 100644
--- a/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
+++ b/hbase-archetypes/hbase-archetype-builder/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/license.html b/hbase-archetypes/hbase-archetype-builder/license.html
index 2a3fbdf..f98f40b 100644
--- a/hbase-archetypes/hbase-archetype-builder/license.html
+++ b/hbase-archetypes/hbase-archetype-builder/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/mail-lists.html b/hbase-archetypes/hbase-archetype-builder/mail-lists.html
index 71d2e30..bf822a4 100644
--- a/hbase-archetypes/hbase-archetype-builder/mail-lists.html
+++ b/hbase-archetypes/hbase-archetype-builder/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/plugin-management.html b/hbase-archetypes/hbase-archetype-builder/plugin-management.html
index 95f8098..5957723 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugin-management.html
+++ b/hbase-archetypes/hbase-archetype-builder/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/plugins.html b/hbase-archetypes/hbase-archetype-builder/plugins.html
index 6c8ed43..777041c 100644
--- a/hbase-archetypes/hbase-archetype-builder/plugins.html
+++ b/hbase-archetypes/hbase-archetype-builder/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/project-info.html b/hbase-archetypes/hbase-archetype-builder/project-info.html
index 94b17e0..d810cf9 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-info.html
+++ b/hbase-archetypes/hbase-archetype-builder/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/project-summary.html b/hbase-archetypes/hbase-archetype-builder/project-summary.html
index 50c4189..e1feda0 100644
--- a/hbase-archetypes/hbase-archetype-builder/project-summary.html
+++ b/hbase-archetypes/hbase-archetype-builder/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/source-repository.html b/hbase-archetypes/hbase-archetype-builder/source-repository.html
index 27fef63..7e602c5 100644
--- a/hbase-archetypes/hbase-archetype-builder/source-repository.html
+++ b/hbase-archetypes/hbase-archetype-builder/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-archetype-builder/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-archetype-builder/team-list.html b/hbase-archetypes/hbase-archetype-builder/team-list.html
index bac88a2..4486d5a 100644
--- a/hbase-archetypes/hbase-archetype-builder/team-list.html
+++ b/hbase-archetypes/hbase-archetype-builder/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetype builder">Apache HBase - Archetype builder</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/checkstyle.html b/hbase-archetypes/hbase-client-project/checkstyle.html
index 44095be..d28da95 100644
--- a/hbase-archetypes/hbase-client-project/checkstyle.html
+++ b/hbase-archetypes/hbase-client-project/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependencies.html b/hbase-archetypes/hbase-client-project/dependencies.html
index 4cdd114..7a758f8 100644
--- a/hbase-archetypes/hbase-client-project/dependencies.html
+++ b/hbase-archetypes/hbase-client-project/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-convergence.html b/hbase-archetypes/hbase-client-project/dependency-convergence.html
index 50dc562..52a3054 100644
--- a/hbase-archetypes/hbase-client-project/dependency-convergence.html
+++ b/hbase-archetypes/hbase-client-project/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-info.html b/hbase-archetypes/hbase-client-project/dependency-info.html
index 6cbaa3c..7d27e42 100644
--- a/hbase-archetypes/hbase-client-project/dependency-info.html
+++ b/hbase-archetypes/hbase-client-project/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/dependency-management.html b/hbase-archetypes/hbase-client-project/dependency-management.html
index ce5bdc4..5f23b2b 100644
--- a/hbase-archetypes/hbase-client-project/dependency-management.html
+++ b/hbase-archetypes/hbase-client-project/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/distribution-management.html b/hbase-archetypes/hbase-client-project/distribution-management.html
index f12df3b..363cda5 100644
--- a/hbase-archetypes/hbase-client-project/distribution-management.html
+++ b/hbase-archetypes/hbase-client-project/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/index.html b/hbase-archetypes/hbase-client-project/index.html
index 9b13616..89cda7e 100644
--- a/hbase-archetypes/hbase-client-project/index.html
+++ b/hbase-archetypes/hbase-client-project/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/integration.html b/hbase-archetypes/hbase-client-project/integration.html
index a968896..aaeb77e 100644
--- a/hbase-archetypes/hbase-client-project/integration.html
+++ b/hbase-archetypes/hbase-client-project/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/issue-tracking.html b/hbase-archetypes/hbase-client-project/issue-tracking.html
index 68e4943..559fd3b 100644
--- a/hbase-archetypes/hbase-client-project/issue-tracking.html
+++ b/hbase-archetypes/hbase-client-project/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/license.html b/hbase-archetypes/hbase-client-project/license.html
index c2cd202..1f8168e 100644
--- a/hbase-archetypes/hbase-client-project/license.html
+++ b/hbase-archetypes/hbase-client-project/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/mail-lists.html b/hbase-archetypes/hbase-client-project/mail-lists.html
index 128e152..c4c0635 100644
--- a/hbase-archetypes/hbase-client-project/mail-lists.html
+++ b/hbase-archetypes/hbase-client-project/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/plugin-management.html b/hbase-archetypes/hbase-client-project/plugin-management.html
index 62e5440..51aba01 100644
--- a/hbase-archetypes/hbase-client-project/plugin-management.html
+++ b/hbase-archetypes/hbase-client-project/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/plugins.html b/hbase-archetypes/hbase-client-project/plugins.html
index b4cd715..ff557da 100644
--- a/hbase-archetypes/hbase-client-project/plugins.html
+++ b/hbase-archetypes/hbase-client-project/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-info.html b/hbase-archetypes/hbase-client-project/project-info.html
index 2aa218a..cdab540 100644
--- a/hbase-archetypes/hbase-client-project/project-info.html
+++ b/hbase-archetypes/hbase-client-project/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-reports.html b/hbase-archetypes/hbase-client-project/project-reports.html
index 9816ca6..2ca4ed1 100644
--- a/hbase-archetypes/hbase-client-project/project-reports.html
+++ b/hbase-archetypes/hbase-client-project/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/project-summary.html b/hbase-archetypes/hbase-client-project/project-summary.html
index b1e59a0..657a788 100644
--- a/hbase-archetypes/hbase-client-project/project-summary.html
+++ b/hbase-archetypes/hbase-client-project/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/source-repository.html b/hbase-archetypes/hbase-client-project/source-repository.html
index 7642ec2..931d828 100644
--- a/hbase-archetypes/hbase-client-project/source-repository.html
+++ b/hbase-archetypes/hbase-client-project/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/hbase-client-project/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/hbase-client-project/team-list.html b/hbase-archetypes/hbase-client-project/team-list.html
index 96214a6..ab434e9 100644
--- a/hbase-archetypes/hbase-client-project/team-list.html
+++ b/hbase-archetypes/hbase-client-project/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Exemplar for hbase-client archetype">Apache HBase - Exemplar for hbase-client archetype</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/index.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/index.html b/hbase-archetypes/index.html
index 51c354b..e456678 100644
--- a/hbase-archetypes/index.html
+++ b/hbase-archetypes/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/integration.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/integration.html b/hbase-archetypes/integration.html
index 00e3058..60f35f4 100644
--- a/hbase-archetypes/integration.html
+++ b/hbase-archetypes/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/issue-tracking.html b/hbase-archetypes/issue-tracking.html
index 9505685..b835ed6 100644
--- a/hbase-archetypes/issue-tracking.html
+++ b/hbase-archetypes/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/license.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/license.html b/hbase-archetypes/license.html
index d5f18f3..4b603f3 100644
--- a/hbase-archetypes/license.html
+++ b/hbase-archetypes/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/mail-lists.html b/hbase-archetypes/mail-lists.html
index 64f7f86..f42e276 100644
--- a/hbase-archetypes/mail-lists.html
+++ b/hbase-archetypes/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/modules.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/modules.html b/hbase-archetypes/modules.html
index 9558253..b791269 100644
--- a/hbase-archetypes/modules.html
+++ b/hbase-archetypes/modules.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/plugin-management.html b/hbase-archetypes/plugin-management.html
index 1011693..8e0db83 100644
--- a/hbase-archetypes/plugin-management.html
+++ b/hbase-archetypes/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/plugins.html b/hbase-archetypes/plugins.html
index d4ab1f8..9b5a13f 100644
--- a/hbase-archetypes/plugins.html
+++ b/hbase-archetypes/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/project-info.html b/hbase-archetypes/project-info.html
index 30bbe7d..4db0146 100644
--- a/hbase-archetypes/project-info.html
+++ b/hbase-archetypes/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/project-summary.html b/hbase-archetypes/project-summary.html
index bfa00a7..fd8aadf 100644
--- a/hbase-archetypes/project-summary.html
+++ b/hbase-archetypes/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/source-repository.html b/hbase-archetypes/source-repository.html
index 46efeb4..8b4ff52 100644
--- a/hbase-archetypes/source-repository.html
+++ b/hbase-archetypes/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/team-list.html b/hbase-archetypes/team-list.html
index 52af174..c6c144a 100644
--- a/hbase-archetypes/team-list.html
+++ b/hbase-archetypes/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-spark/checkstyle.html b/hbase-spark/checkstyle.html
index 0ac6a28..2065d32 100644
--- a/hbase-spark/checkstyle.html
+++ b/hbase-spark/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependencies.html b/hbase-spark/dependencies.html
index d58d064..aea7319 100644
--- a/hbase-spark/dependencies.html
+++ b/hbase-spark/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-convergence.html b/hbase-spark/dependency-convergence.html
index 59bbf30..eecba21 100644
--- a/hbase-spark/dependency-convergence.html
+++ b/hbase-spark/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>


[21/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
index 1b54cf8..195ffb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[39/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
index b7324f8..6c0a03c 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.442">HTableMultiplexer.FlushWorker</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.431">HTableMultiplexer.FlushWorker</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></pre>
 </li>
@@ -291,7 +291,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>addr</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.443">addr</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.432">addr</a></pre>
 </li>
 </ul>
 <a name="queue">
@@ -300,7 +300,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>queue</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.444">queue</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.433">queue</a></pre>
 </li>
 </ul>
 <a name="multiplexer">
@@ -309,7 +309,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>multiplexer</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.445">multiplexer</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.434">multiplexer</a></pre>
 </li>
 </ul>
 <a name="totalFailedPutCount">
@@ -318,7 +318,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>totalFailedPutCount</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.446">totalFailedPutCount</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.435">totalFailedPutCount</a></pre>
 </li>
 </ul>
 <a name="currentProcessingCount">
@@ -327,7 +327,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>currentProcessingCount</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.FlushWorker.html#line.447">currentProcessingCount</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.FlushWorker.html#line.436">currentProcessingCount</a></pre>
 </li>
 </ul>
 <a name="averageLatency">
@@ -336,7 +336,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>averageLatency</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.AtomicAverageCounter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.448">averageLatency</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.AtomicAverageCounter</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.437">averageLatency</a></pre>
 </li>
 </ul>
 <a name="maxLatency">
@@ -345,7 +345,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>maxLatency</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.449">maxLatency</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.438">maxLatency</a></pre>
 </li>
 </ul>
 <a name="ap">
@@ -354,7 +354,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>ap</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/HTableMultiplexer.FlushWorker.html#line.451">ap</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/HTableMultiplexer.FlushWorker.html#line.440">ap</a></pre>
 </li>
 </ul>
 <a name="processingList">
@@ -363,7 +363,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>processingList</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.452">processingList</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.441">processingList</a></pre>
 </li>
 </ul>
 <a name="executor">
@@ -372,7 +372,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>executor</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.453">executor</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.442">executor</a></pre>
 </li>
 </ul>
 <a name="maxRetryInQueue">
@@ -381,7 +381,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>maxRetryInQueue</h4>
-<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.454">maxRetryInQueue</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.443">maxRetryInQueue</a></pre>
 </li>
 </ul>
 <a name="retryInQueue">
@@ -390,7 +390,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>retryInQueue</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.FlushWorker.html#line.455">retryInQueue</a></pre>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.FlushWorker.html#line.444">retryInQueue</a></pre>
 </li>
 </ul>
 </li>
@@ -407,7 +407,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableMultiplexer.FlushWorker</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.457">HTableMultiplexer.FlushWorker</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.446">HTableMultiplexer.FlushWorker</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                              <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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;addr,
                              <a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer</a>&nbsp;htableMultiplexer,
@@ -430,7 +430,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getQueue</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.470">getQueue</a>()</pre>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.459">getQueue</a>()</pre>
 </li>
 </ul>
 <a name="getTotalFailedCount()">
@@ -439,7 +439,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalFailedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.474">getTotalFailedCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.463">getTotalFailedCount</a>()</pre>
 </li>
 </ul>
 <a name="getTotalBufferedCount()">
@@ -448,7 +448,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalBufferedCount</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.478">getTotalBufferedCount</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.467">getTotalBufferedCount</a>()</pre>
 </li>
 </ul>
 <a name="getAverageLatencyCounter()">
@@ -457,7 +457,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getAverageLatencyCounter</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.AtomicAverageCounter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.482">getAverageLatencyCounter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.AtomicAverageCounter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.471">getAverageLatencyCounter</a>()</pre>
 </li>
 </ul>
 <a name="getMaxLatency()">
@@ -466,7 +466,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLatency</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.486">getMaxLatency</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.475">getMaxLatency</a>()</pre>
 </li>
 </ul>
 <a name="resubmitFailedPut(org.apache.hadoop.hbase.client.HTableMultiplexer.PutStatus, org.apache.hadoop.hbase.HRegionLocation)">
@@ -475,7 +475,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>resubmitFailedPut</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.490">resubmitFailedPut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&nbsp;ps,
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.479">resubmitFailedPut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&nbsp;ps,
                         <a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;oldLoc)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -488,7 +488,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextDelay</h4>
-<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.533">getNextDelay</a>(int&nbsp;retryCount)</pre>
+<pre>long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.526">getNextDelay</a>(int&nbsp;retryCount)</pre>
 </li>
 </ul>
 <a name="getRetryInQueue()">
@@ -497,7 +497,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getRetryInQueue</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.539">getRetryInQueue</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.532">getRetryInQueue</a>()</pre>
 </li>
 </ul>
 <a name="getMaxRetryInQueue()">
@@ -506,7 +506,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxRetryInQueue</h4>
-<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.544">getMaxRetryInQueue</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.537">getMaxRetryInQueue</a>()</pre>
 </li>
 </ul>
 <a name="getTotalFailedPutCount()">
@@ -515,7 +515,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalFailedPutCount</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.549">getTotalFailedPutCount</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.542">getTotalFailedPutCount</a>()</pre>
 </li>
 </ul>
 <a name="getMultiplexer()">
@@ -524,7 +524,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getMultiplexer</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.554">getMultiplexer</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.547">getMultiplexer</a>()</pre>
 </li>
 </ul>
 <a name="getExecutor()">
@@ -533,7 +533,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getExecutor</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.559">getExecutor</a>()</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ScheduledExecutorService</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.552">getExecutor</a>()</pre>
 </li>
 </ul>
 <a name="run()">
@@ -542,7 +542,7 @@ implements <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.564">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html#line.557">run</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true#run()" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
index 5951677..27bd4f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
@@ -101,7 +101,7 @@
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Public</a>
 <a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Evolving</a>
-public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.287">HTableMultiplexer.HTableMultiplexerStatus</a>
+public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.276">HTableMultiplexer.HTableMultiplexerStatus</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.
  report the number of buffered requests and the number of the failed (dropped) requests
@@ -252,7 +252,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>totalFailedPutCounter</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.288">totalFailedPutCounter</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.277">totalFailedPutCounter</a></pre>
 </li>
 </ul>
 <a name="totalBufferedPutCounter">
@@ -261,7 +261,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>totalBufferedPutCounter</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.289">totalBufferedPutCounter</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.278">totalBufferedPutCounter</a></pre>
 </li>
 </ul>
 <a name="maxLatency">
@@ -270,7 +270,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>maxLatency</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.290">maxLatency</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.279">maxLatency</a></pre>
 </li>
 </ul>
 <a name="overallAverageLatency">
@@ -279,7 +279,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>overallAverageLatency</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.291">overallAverageLatency</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.280">overallAverageLatency</a></pre>
 </li>
 </ul>
 <a name="serverToFailedCounterMap">
@@ -288,7 +288,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>serverToFailedCounterMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.292">serverToFailedCounterMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.281">serverToFailedCounterMap</a></pre>
 </li>
 </ul>
 <a name="serverToBufferedCounterMap">
@@ -297,7 +297,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>serverToBufferedCounterMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.293">serverToBufferedCounterMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.282">serverToBufferedCounterMap</a></pre>
 </li>
 </ul>
 <a name="serverToAverageLatencyMap">
@@ -306,7 +306,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>serverToAverageLatencyMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.294">serverToAverageLatencyMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.283">serverToAverageLatencyMap</a></pre>
 </li>
 </ul>
 <a name="serverToMaxLatencyMap">
@@ -315,7 +315,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>serverToMaxLatencyMap</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.295">serverToMaxLatencyMap</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.284">serverToMaxLatencyMap</a></pre>
 </li>
 </ul>
 </li>
@@ -332,7 +332,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableMultiplexer.HTableMultiplexerStatus</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.297">HTableMultiplexer.HTableMultiplexerStatus</a>(<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.FlushWorker</a>&gt;&nbsp;serverToFlushWorkerMap)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.286">HTableMultiplexer.HTableMultiplexerStatus</a>(<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.FlushWorker</a>&gt;&nbsp;serverToFlushWorkerMap)</pre>
 </li>
 </ul>
 </li>
@@ -349,7 +349,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.310">initialize</a>(<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.FlushWorker</a>&gt;&nbsp;serverToFlushWorkerMap)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.299">initialize</a>(<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.FlushWorker</a>&gt;&nbsp;serverToFlushWorkerMap)</pre>
 </li>
 </ul>
 <a name="getTotalBufferedCounter()">
@@ -358,7 +358,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalBufferedCounter</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.355">getTotalBufferedCounter</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.344">getTotalBufferedCounter</a>()</pre>
 </li>
 </ul>
 <a name="getTotalFailedCounter()">
@@ -367,7 +367,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalFailedCounter</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.359">getTotalFailedCounter</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.348">getTotalFailedCounter</a>()</pre>
 </li>
 </ul>
 <a name="getMaxLatency()">
@@ -376,7 +376,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLatency</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.363">getMaxLatency</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.352">getMaxLatency</a>()</pre>
 </li>
 </ul>
 <a name="getOverallAverageLatency()">
@@ -385,7 +385,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getOverallAverageLatency</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.367">getOverallAverageLatency</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.356">getOverallAverageLatency</a>()</pre>
 </li>
 </ul>
 <a name="getBufferedCounterForEachRegionServer()">
@@ -394,7 +394,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBufferedCounterForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.371">getBufferedCounterForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.360">getBufferedCounterForEachRegionServer</a>()</pre>
 </li>
 </ul>
 <a name="getFailedCounterForEachRegionServer()">
@@ -403,7 +403,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFailedCounterForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.375">getFailedCounterForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.364">getFailedCounterForEachRegionServer</a>()</pre>
 </li>
 </ul>
 <a name="getMaxLatencyForEachRegionServer()">
@@ -412,7 +412,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLatencyForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.379">getMaxLatencyForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.368">getMaxLatencyForEachRegionServer</a>()</pre>
 </li>
 </ul>
 <a name="getAverageLatencyForEachRegionServer()">
@@ -421,7 +421,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getAverageLatencyForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.383">getAverageLatencyForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.372">getAverageLatencyForEachRegionServer</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
index 2c40878..f0ceae8 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.389">HTableMultiplexer.PutStatus</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.378">HTableMultiplexer.PutStatus</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -186,7 +186,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>regionInfo</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.390">regionInfo</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.379">regionInfo</a></pre>
 </li>
 </ul>
 <a name="put">
@@ -195,7 +195,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>put</h4>
-<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.391">put</a></pre>
+<pre>final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.380">put</a></pre>
 </li>
 </ul>
 <a name="maxAttempCount">
@@ -204,7 +204,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>maxAttempCount</h4>
-<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.392">maxAttempCount</a></pre>
+<pre>final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.381">maxAttempCount</a></pre>
 </li>
 </ul>
 </li>
@@ -221,7 +221,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableMultiplexer.PutStatus</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.394">HTableMultiplexer.PutStatus</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html#line.383">HTableMultiplexer.PutStatus</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionInfo.html" title="class in org.apache.hadoop.hbase">HRegionInfo</a>&nbsp;regionInfo,
                            <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
                            int&nbsp;maxAttempCount)</pre>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
index 68a240d..e534f96 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
@@ -257,34 +257,24 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Method and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#_put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put,%20int,%20boolean)">_put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
-        int&nbsp;maxAttempts,
-        boolean&nbsp;reloadCache)</code>
-<div class="block">Internal "put" which exposes a boolean flag to control whether or not the region location
- cache should be reloaded when trying to queue the <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a>.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#close()">close</a></strong>()</code>
 <div class="block">Closes the internal <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#getConnection()">getConnection</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.HTableMultiplexerStatus</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#getHTableMultiplexerStatus()">getHTableMultiplexerStatus</a></strong>()</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#getQueue(org.apache.hadoop.hbase.HRegionLocation)">getQueue</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;addr)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(byte[],%20java.util.List)">put</a></strong>(byte[]&nbsp;tableName,
       <a href="http://docs.oracle.com/javase/7/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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;&nbsp;puts)</code>
@@ -293,7 +283,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(byte[],%20org.apache.hadoop.hbase.client.Put)">put</a></strong>(byte[]&nbsp;tableName,
       <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
@@ -302,7 +292,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(byte[],%20org.apache.hadoop.hbase.client.Put,%20int)">put</a></strong>(byte[]&nbsp;tableName,
       <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
@@ -312,21 +302,21 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20java.util.List)">put</a></strong>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
       <a href="http://docs.oracle.com/javase/7/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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&gt;&nbsp;puts)</code>
 <div class="block">The puts request will be buffered by their corresponding buffer queue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put)">put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
 <div class="block">The put request will be buffered by its corresponding buffer queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put,%20int)">put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
@@ -590,22 +580,6 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.htm
 <dl><dt><span class="strong">Returns:</span></dt><dd>true if the request can be accepted by its corresponding buffer queue.</dd></dl>
 </li>
 </ul>
-<a name="_put(org.apache.hadoop.hbase.TableName, org.apache.hadoop.hbase.client.Put, int, boolean)">
-<!--   -->
-</a>
-<ul class="blockList">
-<li class="blockList">
-<h4>_put</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.209">_put</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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
-           int&nbsp;maxAttempts,
-           boolean&nbsp;reloadCache)</pre>
-<div class="block">Internal "put" which exposes a boolean flag to control whether or not the region location
- cache should be reloaded when trying to queue the <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a>.</div>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>tableName</code> - Destination table for the Put</dd><dd><code>put</code> - The Put to send</dd><dd><code>maxAttempts</code> - Number of attempts to retry the <code>put</code></dd><dd><code>reloadCache</code> - Should the region location cache be reloaded</dd>
-<dt><span class="strong">Returns:</span></dt><dd>true if the request was accepted in the queue, otherwise false</dd></dl>
-</li>
-</ul>
 <a name="put(byte[], org.apache.hadoop.hbase.client.Put, int)">
 <!--   -->
 </a>
@@ -613,7 +587,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.htm
 <li class="blockList">
 <h4>put</h4>
 <pre><a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.html#line.238">put</a>(byte[]&nbsp;tableName,
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.227">put</a>(byte[]&nbsp;tableName,
                      <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
                      int&nbsp;retry)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>Use <a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put)"><code>put(TableName, Put)</code></a> instead.</i></div>
@@ -626,7 +600,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>put</h4>
 <pre><a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.html#line.246">put</a>(byte[]&nbsp;tableName,
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.235">put</a>(byte[]&nbsp;tableName,
                      <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>Use <a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put)"><code>put(TableName, Put)</code></a> instead.</i></div>
 </li>
@@ -637,7 +611,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getHTableMultiplexerStatus</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.HTableMultiplexerStatus</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.253">getHTableMultiplexerStatus</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.HTableMultiplexerStatus</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.242">getHTableMultiplexerStatus</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the current HTableMultiplexerStatus</dd></dl>
 </li>
 </ul>
@@ -647,7 +621,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockList">
 <li class="blockList">
 <h4>getQueue</h4>
-<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.258">getQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;addr)</pre>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">LinkedBlockingQueue</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.PutStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.PutStatus</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.247">getQueue</a>(<a href="../../../../../org/apache/hadoop/hbase/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>&nbsp;addr)</pre>
 </li>
 </ul>
 <a name="getConnection()">
@@ -656,7 +630,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getConnection</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.276">getConnection</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/client/ClusterConnection.html" title="interface in org.apache.hadoop.hbase.client">ClusterConnection</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.265">getConnection</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html
index 91584f8..4c4adf0 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html
@@ -454,22 +454,12 @@ service.</div>
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>(package private) boolean</code></td>
-<td class="colLast"><span class="strong">HTableMultiplexer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#_put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put,%20int,%20boolean)">_put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
-        int&nbsp;maxAttempts,
-        boolean&nbsp;reloadCache)</code>
-<div class="block">Internal "put" which exposes a boolean flag to control whether or not the region location
- cache should be reloaded when trying to queue the <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a>.</div>
-</td>
-</tr>
-<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">RowMutations.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/RowMutations.html#add(org.apache.hadoop.hbase.client.Put)">add</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)</code>
 <div class="block">Add a <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client"><code>Put</code></a> operation to the list of mutations</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">Table.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html#checkAndPut(byte[],%20byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.client.Put)">checkAndPut</a></strong>(byte[]&nbsp;row,
                       byte[]&nbsp;family,
@@ -480,7 +470,7 @@ service.</div>
  value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTable.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTable.html#checkAndPut(byte[],%20byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.client.Put)">checkAndPut</a></strong>(byte[]&nbsp;row,
                       byte[]&nbsp;family,
@@ -491,7 +481,7 @@ service.</div>
  value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTableWrapper.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableWrapper.html#checkAndPut(byte[],%20byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.client.Put)">checkAndPut</a></strong>(byte[]&nbsp;row,
                       byte[]&nbsp;family,
@@ -499,7 +489,7 @@ service.</div>
                       byte[]&nbsp;value,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">Table.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html#checkAndPut(byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.filter.CompareFilter.CompareOp,%20byte[],%20org.apache.hadoop.hbase.client.Put)">checkAndPut</a></strong>(byte[]&nbsp;row,
                       byte[]&nbsp;family,
@@ -511,7 +501,7 @@ service.</div>
  value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTable.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTable.html#checkAndPut(byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.filter.CompareFilter.CompareOp,%20byte[],%20org.apache.hadoop.hbase.client.Put)">checkAndPut</a></strong>(byte[]&nbsp;row,
                       byte[]&nbsp;family,
@@ -523,7 +513,7 @@ service.</div>
  value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTableWrapper.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableWrapper.html#checkAndPut(byte[],%20byte[],%20byte[],%20org.apache.hadoop.hbase.filter.CompareFilter.CompareOp,%20byte[],%20org.apache.hadoop.hbase.client.Put)">checkAndPut</a></strong>(byte[]&nbsp;row,
                       byte[]&nbsp;family,
@@ -532,7 +522,7 @@ service.</div>
                       byte[]&nbsp;value,
                       <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTableMultiplexer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(byte[],%20org.apache.hadoop.hbase.client.Put)">put</a></strong>(byte[]&nbsp;tableName,
       <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
@@ -541,7 +531,7 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTableMultiplexer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(byte[],%20org.apache.hadoop.hbase.client.Put,%20int)">put</a></strong>(byte[]&nbsp;tableName,
       <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
@@ -551,30 +541,30 @@ service.</div>
 </div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">Table.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/Table.html#put(org.apache.hadoop.hbase.client.Put)">put</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
 <div class="block">Puts some data in the table.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HTable.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTable.html#put(org.apache.hadoop.hbase.client.Put)">put</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
 <div class="block">Puts some data in the table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HTableWrapper.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableWrapper.html#put(org.apache.hadoop.hbase.client.Put)">put</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTableMultiplexer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put)">put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>
 <div class="block">The put request will be buffered by its corresponding buffer queue.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><span class="strong">HTableMultiplexer.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put,%20int)">put</a></strong>(<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/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
@@ -582,15 +572,15 @@ service.</div>
 <div class="block">The put request will be buffered by its corresponding buffer queue.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">BufferedMutatorImpl.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/BufferedMutatorImpl.html#validatePut(org.apache.hadoop.hbase.client.Put)">validatePut</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><span class="strong">HTable.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTable.html#validatePut(org.apache.hadoop.hbase.client.Put)">validatePut</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><span class="strong">HTable.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/client/HTable.html#validatePut(org.apache.hadoop.hbase.client.Put,%20int)">validatePut</a></strong>(<a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
                       int&nbsp;maxKeyValueSize)</code>&nbsp;</td>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 9de447b..c83b245 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -389,12 +389,12 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.CompactType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">IsolationLevel</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">TableState.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">AsyncProcess.Retry</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Consistency</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Admin.CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Admin.CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="strong">Durability</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html b/devapidocs/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
index 9406553..d9210c9 100644
--- a/devapidocs/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
+++ b/devapidocs/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html
@@ -97,7 +97,7 @@
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
 <a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceStability.Evolving</a>
-public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.33">ClientExceptionsUtil</a>
+public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.34">ClientExceptionsUtil</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -183,7 +183,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ClientExceptionsUtil</h4>
-<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.35">ClientExceptionsUtil</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.36">ClientExceptionsUtil</a>()</pre>
 </li>
 </ul>
 </li>
@@ -200,7 +200,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isMetaClearingException</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.37">isMetaClearingException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cur)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.38">isMetaClearingException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cur)</pre>
 </li>
 </ul>
 <a name="isSpecialException(java.lang.Throwable)">
@@ -209,7 +209,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>isSpecialException</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.46">isSpecialException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cur)</pre>
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.48">isSpecialException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;cur)</pre>
 </li>
 </ul>
 <a name="findException(java.lang.Object)">
@@ -218,7 +218,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>findException</h4>
-<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.63">findException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;exception)</pre>
+<pre>public static&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/exceptions/ClientExceptionsUtil.html#line.65">findException</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;exception)</pre>
 <div class="block">Look for an exception we know in the remote exception:
  - hadoop.ipc wrapped exceptions
  - nested exceptions

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
index dc0d7a6..434ae88 100644
--- a/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/executor/package-tree.html
@@ -96,8 +96,8 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">EventType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/ExecutorType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">ExecutorType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.executor.<a href="../../../../../org/apache/hadoop/hbase/executor/EventType.html" title="enum in org.apache.hadoop.hbase.executor"><span class="strong">EventType</span></a></li>
 </ul>
 </li>
 </ul>


[32/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.ServerErrorTracker createServerErrorTracker() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    return new ConnectionImplementation.ServerE

<TRUNCATED>

[34/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
index 3968982..7dad6c4 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html
@@ -292,13 +292,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.151">format</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.158">bcn</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.158">filter</a></pre>
 </li>
 </ul>
 <a name="bcv">
@@ -310,13 +310,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.165">bcv</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.172">filter</a></pre>
+<h4>bcn</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.html#line.172">bcn</a></pre>
 </li>
 </ul>
 </li>
@@ -397,13 +397,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.152">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setBcn(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.159">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
 <a name="setBcv(java.lang.String)">
@@ -415,13 +415,13 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.166">setBcv</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcv)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setBcn(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setBcn</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.regionserver">RSStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.html#line.173">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_bcn)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
index f9484ac..e27531a 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmplImpl.html
@@ -233,13 +233,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.29">format</a></pre>
 </li>
 </ul>
-<a name="bcn">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>bcn</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.30">bcn</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.30">filter</a></pre>
 </li>
 </ul>
 <a name="bcv">
@@ -251,13 +251,13 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/regionserver/
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.31">bcv</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="bcn">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.32">filter</a></pre>
+<h4>bcn</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmplImpl.html#line.32">bcn</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html b/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html
index 9978b14..7274d5d 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html
@@ -36,7 +36,7 @@
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" target="_top">Frames</a></li>
@@ -391,7 +391,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <div class="subNav">
 <ul class="navList">
 <li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
-<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
 <li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" target="_top">Frames</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/ByteBufferAllocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferAllocator.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferAllocator.html
new file mode 100644
index 0000000..425d87b
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferAllocator.html
@@ -0,0 +1,218 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>ByteBufferAllocator (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="ByteBufferAllocator (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/ByteBufferAllocator.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/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/ByteBufferAllocator.html" target="_top">Frames</a></li>
+<li><a href="ByteBufferAllocator.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../allclasses-noframe.html">All 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>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&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.util</div>
+<h2 title="Interface ByteBufferAllocator" class="title">Interface ByteBufferAllocator</h2>
+</div>
+<div class="contentContainer">
+<div class="description">
+<ul class="blockList">
+<li class="blockList">
+<hr>
+<br>
+<pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
+public interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferAllocator.html#line.29">ByteBufferAllocator</a></pre>
+<div class="block">Defines the way the ByteBuffers are created</div>
+</li>
+</ul>
+</div>
+<div class="summary">
+<ul class="blockList">
+<li class="blockList">
+<!-- ========== METHOD SUMMARY =========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_summary">
+<!--   -->
+</a>
+<h3>Method Summary</h3>
+<table class="overviewSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
+<caption><span>Methods</span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Method and Description</th>
+</tr>
+<tr class="altColor">
+<td class="colFirst"><code><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html#allocate(long,%20boolean)">allocate</a></strong>(long&nbsp;size,
+                boolean&nbsp;directByteBuffer)</code>
+<div class="block">Allocates a bytebuffer</div>
+</td>
+</tr>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<div class="details">
+<ul class="blockList">
+<li class="blockList">
+<!-- ============ METHOD DETAIL ========== -->
+<ul class="blockList">
+<li class="blockList"><a name="method_detail">
+<!--   -->
+</a>
+<h3>Method Detail</h3>
+<a name="allocate(long, boolean)">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>allocate</h4>
+<pre><a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferAllocator.html#line.38">allocate</a>(long&nbsp;size,
+                  boolean&nbsp;directByteBuffer)
+                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
+<div class="block">Allocates a bytebuffer</div>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>size</code> - the size of the bytebuffer</dd><dd><code>directByteBuffer</code> - indicator to create a direct bytebuffer</dd>
+<dt><span class="strong">Returns:</span></dt><dd>the bytebuffer that is created</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - exception thrown if there is an error while creating the ByteBuffer</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><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/ByteBufferAllocator.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/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
+</ul>
+<ul class="navList">
+<li><a href="../../../../../index.html?org/apache/hadoop/hbase/util/ByteBufferAllocator.html" target="_top">Frames</a></li>
+<li><a href="ByteBufferAllocator.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../allclasses-noframe.html">All 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>Field&nbsp;|&nbsp;</li>
+<li>Constr&nbsp;|&nbsp;</li>
+<li><a href="#method_summary">Method</a></li>
+</ul>
+<ul class="subNavList">
+<li>Detail:&nbsp;</li>
+<li>Field&nbsp;|&nbsp;</li>
+<li>Constr&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;2016 <a href="http://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/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
index f05aaa6..cc0f230 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html
@@ -91,7 +91,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.142">ByteBufferArray.Visitor</a></pre>
+<pre>private static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.146">ByteBufferArray.Visitor</a></pre>
 </li>
 </ul>
 </div>
@@ -142,7 +142,7 @@
 <ul class="blockListLast">
 <li class="blockList">
 <h4>visit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html#line.152">visit</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;bb,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html#line.156">visit</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>&nbsp;bb,
          byte[]&nbsp;array,
          int&nbsp;arrayOffset,
          int&nbsp;len)</pre>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
index 3eb744e..30ab016 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/ByteBufferArray.html
@@ -35,7 +35,7 @@
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">
@@ -96,7 +96,7 @@
 <hr>
 <br>
 <pre><a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification">@InterfaceAudience.Private</a>
-public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.39">ByteBufferArray</a>
+public final class <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.40">ByteBufferArray</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This class manages an array of ByteBuffers with a default size 4MB. These
  buffers are sequential and could be considered as a large buffer.It supports
@@ -139,34 +139,38 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colLast" scope="col">Field and Description</th>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#allocator">allocator</a></strong></code>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#bufferCount">bufferCount</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#buffers">buffers</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#bufferSize">bufferSize</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
-<td class="colFirst"><code>(package private) static int</code></td>
+<tr class="altColor">
+<td class="colFirst"><code>static int</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#DEFAULT_BUFFER_SIZE">DEFAULT_BUFFER_SIZE</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#GET_MULTIPLE_VISTOR">GET_MULTIPLE_VISTOR</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>[]</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#locks">locks</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.apache.commons.logging.Log</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#LOG">LOG</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a></code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#PUT_MULTIPLE_VISITOR">PUT_MULTIPLE_VISITOR</a></strong></code>&nbsp;</td>
 </tr>
@@ -185,8 +189,9 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <th class="colOne" scope="col">Constructor and Description</th>
 </tr>
 <tr class="altColor">
-<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#ByteBufferArray(long,%20boolean)">ByteBufferArray</a></strong>(long&nbsp;capacity,
-                              boolean&nbsp;directByteBuffer)</code>
+<td class="colOne"><code><strong><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#ByteBufferArray(long,%20boolean,%20org.apache.hadoop.hbase.util.ByteBufferAllocator)">ByteBufferArray</a></strong>(long&nbsp;capacity,
+                              boolean&nbsp;directByteBuffer,
+                              <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)</code>
 <div class="block">We allocate a number of byte buffers as the capacity.</div>
 </td>
 </tr>
@@ -291,7 +296,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.40">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.41">LOG</a></pre>
 </li>
 </ul>
 <a name="DEFAULT_BUFFER_SIZE">
@@ -300,7 +305,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_BUFFER_SIZE</h4>
-<pre>static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.42">DEFAULT_BUFFER_SIZE</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.43">DEFAULT_BUFFER_SIZE</a></pre>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.util.ByteBufferArray.DEFAULT_BUFFER_SIZE">Constant Field Values</a></dd></dl>
 </li>
 </ul>
@@ -310,7 +315,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>buffers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.43">buffers</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/nio/ByteBuffer.html?is-external=true" title="class or interface in java.nio">ByteBuffer</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.44">buffers</a></pre>
 </li>
 </ul>
 <a name="locks">
@@ -319,7 +324,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>locks</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.44">locks</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.45">locks</a></pre>
 </li>
 </ul>
 <a name="bufferSize">
@@ -328,7 +333,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>bufferSize</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.45">bufferSize</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.46">bufferSize</a></pre>
 </li>
 </ul>
 <a name="bufferCount">
@@ -337,7 +342,16 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>bufferCount</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.46">bufferCount</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.47">bufferCount</a></pre>
+</li>
+</ul>
+<a name="allocator">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>allocator</h4>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.48">allocator</a></pre>
 </li>
 </ul>
 <a name="GET_MULTIPLE_VISTOR">
@@ -346,7 +360,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>GET_MULTIPLE_VISTOR</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.106">GET_MULTIPLE_VISTOR</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.110">GET_MULTIPLE_VISTOR</a></pre>
 </li>
 </ul>
 <a name="PUT_MULTIPLE_VISITOR">
@@ -355,7 +369,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PUT_MULTIPLE_VISITOR</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.135">PUT_MULTIPLE_VISITOR</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.139">PUT_MULTIPLE_VISITOR</a></pre>
 </li>
 </ul>
 </li>
@@ -366,18 +380,22 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <!--   -->
 </a>
 <h3>Constructor Detail</h3>
-<a name="ByteBufferArray(long, boolean)">
+<a name="ByteBufferArray(long, boolean, org.apache.hadoop.hbase.util.ByteBufferAllocator)">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ByteBufferArray</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.55">ByteBufferArray</a>(long&nbsp;capacity,
-               boolean&nbsp;directByteBuffer)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.58">ByteBufferArray</a>(long&nbsp;capacity,
+               boolean&nbsp;directByteBuffer,
+               <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)
+                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">We allocate a number of byte buffers as the capacity. In order not to out
  of the array bounds for the last byte(see <a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#multiple(long,%20int,%20byte[],%20int,%20org.apache.hadoop.hbase.util.ByteBufferArray.Visitor)"><code>multiple(long, int, byte[], int, org.apache.hadoop.hbase.util.ByteBufferArray.Visitor)</code></a>),
  we will allocate one additional buffer with capacity 0;</div>
-<dl><dt><span class="strong">Parameters:</span></dt><dd><code>capacity</code> - total size of the byte buffer array</dd><dd><code>directByteBuffer</code> - true if we allocate direct buffer</dd></dl>
+<dl><dt><span class="strong">Parameters:</span></dt><dd><code>capacity</code> - total size of the byte buffer array</dd><dd><code>directByteBuffer</code> - true if we allocate direct buffer</dd><dd><code>allocator</code> - the ByteBufferAllocator that will create the buffers</dd>
+<dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code> - throws IOException if there is an exception thrown by the allocator</dd></dl>
 </li>
 </ul>
 </li>
@@ -394,7 +412,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>roundUp</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.77">roundUp</a>(long&nbsp;n,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.81">roundUp</a>(long&nbsp;n,
            long&nbsp;to)</pre>
 </li>
 </ul>
@@ -404,7 +422,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMultiple</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.88">getMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.92">getMultiple</a>(long&nbsp;start,
               int&nbsp;len,
               byte[]&nbsp;dstArray)</pre>
 <div class="block">Transfers bytes from this buffer array into the given destination array</div>
@@ -418,7 +436,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMultiple</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.101">getMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.105">getMultiple</a>(long&nbsp;start,
               int&nbsp;len,
               byte[]&nbsp;dstArray,
               int&nbsp;dstOffset)</pre>
@@ -434,7 +452,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>putMultiple</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.119">putMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.123">putMultiple</a>(long&nbsp;start,
                int&nbsp;len,
                byte[]&nbsp;srcArray)</pre>
 <div class="block">Transfers bytes from the given source array into this buffer array</div>
@@ -447,7 +465,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>putMultiple</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.131">putMultiple</a>(long&nbsp;start,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.135">putMultiple</a>(long&nbsp;start,
                int&nbsp;len,
                byte[]&nbsp;srcArray,
                int&nbsp;srcOffset)</pre>
@@ -462,7 +480,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>multiple</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.166">multiple</a>(long&nbsp;start,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.170">multiple</a>(long&nbsp;start,
             int&nbsp;len,
             byte[]&nbsp;array,
             int&nbsp;arrayOffset,
@@ -480,7 +498,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>asSubByteBuff</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.217">asSubByteBuff</a>(long&nbsp;offset,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html#line.221">asSubByteBuff</a>(long&nbsp;offset,
                      int&nbsp;len)</pre>
 <div class="block">Creates a ByteBuff from a given array of ByteBuffers from the given offset to the
  length specified. For eg, if there are 4 buffers forming an array each with length 10 and
@@ -517,7 +535,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 </div>
 <div class="subNav">
 <ul class="navList">
-<li><a href="../../../../../org/apache/hadoop/hbase/util/BoundedPriorityBlockingQueue.PriorityQueue.html" title="class in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
+<li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Prev Class</span></a></li>
 <li><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Next Class</span></a></li>
 </ul>
 <ul class="navList">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
new file mode 100644
index 0000000..ee7007f
--- /dev/null
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html
@@ -0,0 +1,170 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- NewPage -->
+<html lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>Uses of Interface org.apache.hadoop.hbase.util.ByteBufferAllocator (Apache HBase 2.0.0-SNAPSHOT API)</title>
+<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
+</head>
+<body>
+<script type="text/javascript"><!--
+    if (location.href.indexOf('is-external=true') == -1) {
+        parent.document.title="Uses of Interface org.apache.hadoop.hbase.util.ByteBufferAllocator (Apache HBase 2.0.0-SNAPSHOT API)";
+    }
+//-->
+</script>
+<noscript>
+<div>JavaScript is disabled on your browser.</div>
+</noscript>
+<!-- ========= START OF TOP NAVBAR ======= -->
+<div class="topNav"><a name="navbar_top">
+<!--   -->
+</a><a href="#skip-navbar_top" title="Skip navigation links"></a><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/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">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/util/class-use/ByteBufferAllocator.html" target="_top">Frames</a></li>
+<li><a href="ByteBufferAllocator.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_top">
+<li><a href="../../../../../../allclasses-noframe.html">All 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 Interface org.apache.hadoop.hbase.util.ByteBufferAllocator" class="title">Uses of Interface<br>org.apache.hadoop.hbase.util.ByteBufferAllocator</h2>
+</div>
+<div class="classUseContainer">
+<ul class="blockList">
+<li class="blockList">
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing packages, and an explanation">
+<caption><span>Packages that use <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Package</th>
+<th class="colLast" scope="col">Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><a href="#org.apache.hadoop.hbase.util">org.apache.hadoop.hbase.util</a></td>
+<td class="colLast">&nbsp;</td>
+</tr>
+</tbody>
+</table>
+</li>
+<li class="blockList">
+<ul class="blockList">
+<li class="blockList"><a name="org.apache.hadoop.hbase.util">
+<!--   -->
+</a>
+<h3>Uses of <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a> in <a href="../../../../../../org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a></h3>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing fields, and an explanation">
+<caption><span>Fields in <a href="../../../../../../org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a> declared as <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colFirst" scope="col">Modifier and Type</th>
+<th class="colLast" scope="col">Field and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></code></td>
+<td class="colLast"><span class="strong">ByteBufferArray.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#allocator">allocator</a></strong></code>&nbsp;</td>
+</tr>
+</tbody>
+</table>
+<table border="0" cellpadding="3" cellspacing="0" summary="Use table, listing constructors, and an explanation">
+<caption><span>Constructors in <a href="../../../../../../org/apache/hadoop/hbase/util/package-summary.html">org.apache.hadoop.hbase.util</a> with parameters of type <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></span><span class="tabEnd">&nbsp;</span></caption>
+<tr>
+<th class="colOne" scope="col">Constructor and Description</th>
+</tr>
+<tbody>
+<tr class="altColor">
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html#ByteBufferArray(long,%20boolean,%20org.apache.hadoop.hbase.util.ByteBufferAllocator)">ByteBufferArray</a></strong>(long&nbsp;capacity,
+                              boolean&nbsp;directByteBuffer,
+                              <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a>&nbsp;allocator)</code>
+<div class="block">We allocate a number of byte buffers as the capacity.</div>
+</td>
+</tr>
+</tbody>
+</table>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+<!-- ======= START OF BOTTOM NAVBAR ====== -->
+<div class="bottomNav"><a name="navbar_bottom">
+<!--   -->
+</a><a href="#skip-navbar_bottom" title="Skip navigation links"></a><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/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">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/util/class-use/ByteBufferAllocator.html" target="_top">Frames</a></li>
+<li><a href="ByteBufferAllocator.html" target="_top">No Frames</a></li>
+</ul>
+<ul class="navList" id="allclasses_navbar_bottom">
+<li><a href="../../../../../../allclasses-noframe.html">All 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;2016 <a href="http://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/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferArray.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferArray.html b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferArray.html
index 4cce5ff..09ba24d 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferArray.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/class-use/ByteBufferArray.html
@@ -101,6 +101,10 @@
 <td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></code></td>
 <td class="colLast"><span class="strong">ByteBufferIOEngine.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/ByteBufferIOEngine.html#bufferArray">bufferArray</a></strong></code>&nbsp;</td>
 </tr>
+<tr class="rowColor">
+<td class="colFirst"><code>private <a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></code></td>
+<td class="colLast"><span class="strong">FileMmapEngine.</span><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html#bufferArray">bufferArray</a></strong></code>&nbsp;</td>
+</tr>
 </tbody>
 </table>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-frame.html b/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
index 70b5ab2..a336df2 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-frame.html
@@ -15,6 +15,7 @@
 <li><a href="BloomFilter.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>BloomFilter</i></a></li>
 <li><a href="BloomFilterBase.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>BloomFilterBase</i></a></li>
 <li><a href="BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>BloomFilterWriter</i></a></li>
+<li><a href="ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>ByteBufferAllocator</i></a></li>
 <li><a href="ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>ByteBufferArray.Visitor</i></a></li>
 <li><a href="ByteRange.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>ByteRange</i></a></li>
 <li><a href="Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util" target="classFrame"><i>Bytes.Comparer</i></a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-summary.html b/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
index d9df4c5..a77ecaa 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-summary.html
@@ -100,65 +100,71 @@
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></td>
+<td class="colLast">
+<div class="block">Defines the way the ByteBuffers are created</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util">ByteRange</a></td>
 <td class="colLast">
 <div class="block">Lightweight, reusable class for specifying ranges of byte[]'s.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;</td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a></td>
 <td class="colLast">
 <div class="block">Similar interface as <code>Progressable</code> but returns
  a boolean to support canceling the operation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a></td>
 <td class="colLast">
 <div class="block">Has some basic interaction with the environment.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/FSVisitor.StoreFileVisitor.html" title="interface in org.apache.hadoop.hbase.util">FSVisitor.StoreFileVisitor</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.html" title="interface in org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/JSONBean.Writer.html" title="interface in org.apache.hadoop.hbase.util">JSONBean.Writer</a></td>
 <td class="colLast">
 <div class="block">Use dumping out mbeans as JSON.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></td>
 <td class="colLast">
 <div class="block">A key range use in split coverage.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ModifyRegionUtils.RegionEditTask.html" title="interface in org.apache.hadoop.hbase.util">ModifyRegionUtils.RegionEditTask</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/ModifyRegionUtils.RegionFillTask.html" title="interface in org.apache.hadoop.hbase.util">ModifyRegionUtils.RegionFillTask</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util">PoolMap.Pool</a>&lt;R&gt;</td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/PositionedByteRange.html" title="interface in org.apache.hadoop.hbase.util">PositionedByteRange</a></td>
 <td class="colLast">
 <div class="block">
@@ -166,18 +172,18 @@
  consumers position within the viewport.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/RegionSplitter.SplitAlgorithm.html" title="interface in org.apache.hadoop.hbase.util">RegionSplitter.SplitAlgorithm</a></td>
 <td class="colLast">
 <div class="block">A generic interface for the RegionSplitter code to use for all it's
  functionality.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/Threads.PrintThreadInfoHelper.html" title="interface in org.apache.hadoop.hbase.util">Threads.PrintThreadInfoHelper</a></td>
 <td class="colLast">&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><a href="../../../../../org/apache/hadoop/hbase/util/WeakObjectPool.ObjectFactory.html" title="interface in org.apache.hadoop.hbase.util">WeakObjectPool.ObjectFactory</a>&lt;K,V&gt;</td>
 <td class="colLast">
 <div class="block">An <code>ObjectFactory</code> object is used to create

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index a631b0a..98cd86f 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -432,6 +432,7 @@
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/BloomFilterWriter.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">BloomFilterWriter</span></a></li>
 </ul>
 </li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">ByteBufferAllocator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.Visitor.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">ByteBufferArray.Visitor</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">Bytes.Comparer</span></a>&lt;T&gt;</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util"><span class="strong">CancelableProgressable</span></a></li>
@@ -462,12 +463,12 @@
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PrettyPrinter.Unit</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Order</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HBaseFsck.ErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">HBaseFsck.ErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">PoolMap.PoolType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="strong">ChecksumType</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/util/package-use.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-use.html b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
index 804f782..8dcc877 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-use.html
@@ -1383,308 +1383,313 @@ service.</div>
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/BoundedPriorityBlockingQueue.PriorityQueue.html#org.apache.hadoop.hbase.util">BoundedPriorityBlockingQueue.PriorityQueue</a>&nbsp;</td>
 </tr>
 <tr class="rowColor">
-<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ByteBufferArray.Visitor.html#org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a>&nbsp;</td>
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ByteBufferAllocator.html#org.apache.hadoop.hbase.util">ByteBufferAllocator</a>
+<div class="block">Defines the way the ByteBuffers are created</div>
+</td>
 </tr>
 <tr class="altColor">
+<td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ByteBufferArray.Visitor.html#org.apache.hadoop.hbase.util">ByteBufferArray.Visitor</a>&nbsp;</td>
+</tr>
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ByteRange.html#org.apache.hadoop.hbase.util">ByteRange</a>
 <div class="block">Lightweight, reusable class for specifying ranges of byte[]'s.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Bytes.html#org.apache.hadoop.hbase.util">Bytes</a>
 <div class="block">Utility class that handles byte arrays, conversions to/from other types,
  comparisons, hash code generation, manufacturing keys for HashMaps or
  HashSets, and can be used as key in maps or trees.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Bytes.ByteArrayComparator.html#org.apache.hadoop.hbase.util">Bytes.ByteArrayComparator</a>
 <div class="block">Byte array comparator class.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Bytes.Comparer.html#org.apache.hadoop.hbase.util">Bytes.Comparer</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Bytes.LexicographicalComparerHolder.PureJavaComparer.html#org.apache.hadoop.hbase.util">Bytes.LexicographicalComparerHolder.PureJavaComparer</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Bytes.LexicographicalComparerHolder.UnsafeComparer.html#org.apache.hadoop.hbase.util">Bytes.LexicographicalComparerHolder.UnsafeComparer</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/CancelableProgressable.html#org.apache.hadoop.hbase.util">CancelableProgressable</a>
 <div class="block">Similar interface as <code>Progressable</code> but returns
  a boolean to support canceling the operation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ChecksumType.html#org.apache.hadoop.hbase.util">ChecksumType</a>
 <div class="block">Checksum types.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ClassLoaderBase.html#org.apache.hadoop.hbase.util">ClassLoaderBase</a>
 <div class="block">Base class loader that defines couple shared constants used by sub-classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ConnectionCache.ConnectionInfo.html#org.apache.hadoop.hbase.util">ConnectionCache.ConnectionInfo</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/CoprocessorClassLoader.html#org.apache.hadoop.hbase.util">CoprocessorClassLoader</a>
 <div class="block">ClassLoader used to load classes for Coprocessor instances.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Counter.Cell.html#org.apache.hadoop.hbase.util">Counter.Cell</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Counter.Container.html#org.apache.hadoop.hbase.util">Counter.Container</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Counter.IndexHolder.html#org.apache.hadoop.hbase.util">Counter.IndexHolder</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/EnvironmentEdge.html#org.apache.hadoop.hbase.util">EnvironmentEdge</a>
 <div class="block">Has some basic interaction with the environment.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/FastLongHistogram.Bins.html#org.apache.hadoop.hbase.util">FastLongHistogram.Bins</a>
 <div class="block">Bins is a class containing a list of buckets(or bins) for estimation histogram of some data.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/FSTableDescriptors.html#org.apache.hadoop.hbase.util">FSTableDescriptors</a>
 <div class="block">Implementation of <a href="../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase"><code>TableDescriptors</code></a> that reads descriptors from the
  passed filesystem.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/FSUtils.html#org.apache.hadoop.hbase.util">FSUtils</a>
 <div class="block">Utility methods for interacting with the underlying file system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/FSUtils.BlackListDirFilter.html#org.apache.hadoop.hbase.util">FSUtils.BlackListDirFilter</a>
 <div class="block">Directory filter that doesn't include any of the directories in the specified blacklist</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/FSVisitor.StoreFileVisitor.html#org.apache.hadoop.hbase.util">FSVisitor.StoreFileVisitor</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Hash.html#org.apache.hadoop.hbase.util">Hash</a>
 <div class="block">This class represents a common API for hashing functions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.html#org.apache.hadoop.hbase.util">HBaseFsck</a>
 <div class="block">HBaseFsck (hbck) is a tool for checking and repairing region consistency and
  table integrity problems in a corrupted HBase.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.CheckRegionConsistencyWorkItem.html#org.apache.hadoop.hbase.util">HBaseFsck.CheckRegionConsistencyWorkItem</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.ErrorReporter.html#org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.ErrorReporter.ERROR_CODE.html#org.apache.hadoop.hbase.util">HBaseFsck.ErrorReporter.ERROR_CODE</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.HbckInfo.html#org.apache.hadoop.hbase.util">HBaseFsck.HbckInfo</a>
 <div class="block">Maintain information about a particular region.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.HdfsEntry.html#org.apache.hadoop.hbase.util">HBaseFsck.HdfsEntry</a>
 <div class="block">Stores the regioninfo entries from HDFS</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.MetaEntry.html#org.apache.hadoop.hbase.util">HBaseFsck.MetaEntry</a>
 <div class="block">Stores the regioninfo entries scanned from META</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.OnlineEntry.html#org.apache.hadoop.hbase.util">HBaseFsck.OnlineEntry</a>
 <div class="block">Stores the regioninfo retrieved from Online region servers.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.TableInfo.html#org.apache.hadoop.hbase.util">HBaseFsck.TableInfo</a>
 <div class="block">Maintain information about a particular table.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HBaseFsck.TableInfo.IntegrityFixSuggester.html#org.apache.hadoop.hbase.util">HBaseFsck.TableInfo.IntegrityFixSuggester</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/HMerge.Merger.html#org.apache.hadoop.hbase.util">HMerge.Merger</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/IdLock.Entry.html#org.apache.hadoop.hbase.util">IdLock.Entry</a>
 <div class="block">An entry returned to the client as a lock object</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/JenkinsHash.html#org.apache.hadoop.hbase.util">JenkinsHash</a>
 <div class="block">Produces 32-bit hash for hash table lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/JSONBean.Writer.html#org.apache.hadoop.hbase.util">JSONBean.Writer</a>
 <div class="block">Use dumping out mbeans as JSON.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/JVMClusterUtil.MasterThread.html#org.apache.hadoop.hbase.util">JVMClusterUtil.MasterThread</a>
 <div class="block">Datastructure to hold Master Thread and Master instance</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/JVMClusterUtil.RegionServerThread.html#org.apache.hadoop.hbase.util">JVMClusterUtil.RegionServerThread</a>
 <div class="block">Datastructure to hold RegionServer Thread and RegionServer instance</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/JvmPauseMonitor.GcTimes.html#org.apache.hadoop.hbase.util">JvmPauseMonitor.GcTimes</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/KeyLocker.html#org.apache.hadoop.hbase.util">KeyLocker</a>
 <div class="block">A utility class to manage a set of locks.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/KeyRange.html#org.apache.hadoop.hbase.util">KeyRange</a>
 <div class="block">A key range use in split coverage.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/MetaUtils.html#org.apache.hadoop.hbase.util">MetaUtils</a>
 <div class="block">Contains utility methods for manipulating HBase meta tables.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ModifyRegionUtils.RegionEditTask.html#org.apache.hadoop.hbase.util">ModifyRegionUtils.RegionEditTask</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ModifyRegionUtils.RegionFillTask.html#org.apache.hadoop.hbase.util">ModifyRegionUtils.RegionFillTask</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/MurmurHash.html#org.apache.hadoop.hbase.util">MurmurHash</a>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/MurmurHash3.html#org.apache.hadoop.hbase.util">MurmurHash3</a>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Order.html#org.apache.hadoop.hbase.util">Order</a>
 <div class="block">Used to describe or modify the lexicographical sort order of a
  <code>byte[]</code>.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Pair.html#org.apache.hadoop.hbase.util">Pair</a>
 <div class="block">A generic class for pairs.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/PoolMap.Pool.html#org.apache.hadoop.hbase.util">PoolMap.Pool</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/PoolMap.PoolType.html#org.apache.hadoop.hbase.util">PoolMap.PoolType</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/PoolMap.ThreadLocalPool.html#org.apache.hadoop.hbase.util">PoolMap.ThreadLocalPool</a>
 <div class="block">The <code>ThreadLocalPool</code> represents a <a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.Pool.html" title="interface in org.apache.hadoop.hbase.util"><code>PoolMap.Pool</code></a> that
  builds on the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang"><code>ThreadLocal</code></a> class.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/PositionedByteRange.html#org.apache.hadoop.hbase.util">PositionedByteRange</a>
 <div class="block">
  Extends <a href="../../../../../org/apache/hadoop/hbase/util/ByteRange.html" title="interface in org.apache.hadoop.hbase.util"><code>ByteRange</code></a> with additional methods to support tracking a
  consumers position within the viewport.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/PrettyPrinter.Unit.html#org.apache.hadoop.hbase.util">PrettyPrinter.Unit</a>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RegionMover.html#org.apache.hadoop.hbase.util">RegionMover</a>
 <div class="block">Tool for loading/unloading regions to/from given regionserver This tool can be run from Command
  line directly as a utility.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RegionMover.RegionMoverBuilder.html#org.apache.hadoop.hbase.util">RegionMover.RegionMoverBuilder</a>
 <div class="block">Builder for Region mover.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RegionSplitCalculator.html#org.apache.hadoop.hbase.util">RegionSplitCalculator</a>
 <div class="block">This is a generic region split calculator.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RegionSplitter.SplitAlgorithm.html#org.apache.hadoop.hbase.util">RegionSplitter.SplitAlgorithm</a>
 <div class="block">A generic interface for the RegionSplitter code to use for all it's
  functionality.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.html#org.apache.hadoop.hbase.util">RetryCounter</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.BackoffPolicy.html#org.apache.hadoop.hbase.util">RetryCounter.BackoffPolicy</a>
 <div class="block">Policy for calculating sleeping intervals between retry attempts</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.ExponentialBackoffPolicy.html#org.apache.hadoop.hbase.util">RetryCounter.ExponentialBackoffPolicy</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounter.RetryConfig.html#org.apache.hadoop.hbase.util">RetryCounter.RetryConfig</a>
 <div class="block">Configuration for a retry counter</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/RetryCounterFactory.html#org.apache.hadoop.hbase.util">RetryCounterFactory</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/ShutdownHookManager.html#org.apache.hadoop.hbase.util">ShutdownHookManager</a>
 <div class="block">This class provides ShutdownHookManager shims for HBase to interact with the Hadoop 1.0.x and the
  Hadoop 2.0+ series.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Threads.PrintThreadInfoHelper.html#org.apache.hadoop.hbase.util">Threads.PrintThreadInfoHelper</a>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/Triple.html#org.apache.hadoop.hbase.util">Triple</a>
 <div class="block">Utility class to manage a triple.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/WeakObjectPool.html#org.apache.hadoop.hbase.util">WeakObjectPool</a>
 <div class="block">A <code>WeakReference</code> based shared object pool.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/WeakObjectPool.ObjectFactory.html#org.apache.hadoop.hbase.util">WeakObjectPool.ObjectFactory</a>
 <div class="block">An <code>ObjectFactory</code> object is used to create
  new shared objects on demand.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colOne"><a href="../../../../../org/apache/hadoop/hbase/util/class-use/WeakObjectPool.ObjectReference.html#org.apache.hadoop.hbase.util">WeakObjectPool.ObjectReference</a>&nbsp;</td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 8260133..1f810f3 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -148,9 +148,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/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/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALFactory.Providers</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">RegionGroupingProvider.Strategies</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALKey.Version.html" title="enum in org.apache.hadoop.hbase.wal"><span class="strong">WALKey.Version</span></a></li>
 </ul>
 </li>
 </ul>


[47/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html b/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
index 1b54cf8..195ffb2 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[24/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
index 1b54cf8..195ffb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[29/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.ServerErrorTracker createServerErrorTracker() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    return new ConnectionIm

<TRUNCATED>

[16/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
index 3a9a7f7..d857fe6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.RAMQueueEntry.html
@@ -311,1174 +311,1177 @@
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  private IOEngine getIOEngineFromName(String ioEngineName, long capacity)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:"))<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:")) {<a name="line.306"></a>
 <span class="sourceLineNo">307</span>      return new FileIOEngine(ioEngineName.substring(5), capacity);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    else if (ioEngineName.startsWith("offheap"))<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    } else if (ioEngineName.startsWith("offheap")) {<a name="line.308"></a>
 <span class="sourceLineNo">309</span>      return new ByteBufferIOEngine(capacity, true);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    else if (ioEngineName.startsWith("heap"))<a name="line.310"></a>
+<span class="sourceLineNo">310</span>    } else if (ioEngineName.startsWith("heap")) {<a name="line.310"></a>
 <span class="sourceLineNo">311</span>      return new ByteBufferIOEngine(capacity, false);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    else<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw new IllegalArgumentException(<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * Cache the block with the specified name and buffer.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param cacheKey block's cache key<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param buf block buffer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    cacheBlock(cacheKey, buf, false, false);<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>   * Cache the block with the specified name and buffer.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @param cacheKey block's cache key<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param cachedItem block buffer<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @param inMemory if block is in-memory<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param cacheDataInL1<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final boolean cacheDataInL1) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Cache the block to ramCache<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param cacheKey block's cache key<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param cachedItem block buffer<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param inMemory if block is in-memory<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param wait if true, blocking wait when queue is full<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      boolean wait) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (!cacheEnabled) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>    /*<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    RAMQueueEntry re =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    boolean successfulAddition = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (wait) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } catch (InterruptedException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Thread.currentThread().interrupt();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      successfulAddition = bq.offer(re);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (!successfulAddition) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ramCache.remove(cacheKey);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      cacheStats.failInsert();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    } else {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.blockNumber.incrementAndGet();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Get the buffer of the block with the specified key.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param key block's cache key<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @return buffer of specified cache key, or null if not in cache<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 Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      boolean updateCacheMetrics) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (!cacheEnabled) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (re != null) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (updateCacheMetrics) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      re.access(accessCount.incrementAndGet());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return re.getData();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (bucketEntry != null) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      long start = System.nanoTime();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        lock.readLock().lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        // existence here.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          // TODO : change this area - should be removed after server cells and<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // 12295 are available<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int len = bucketEntry.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          long timeTaken = System.nanoTime() - start;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (updateCacheMetrics) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            cacheStats.ioHit(timeTaken);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            bucketEntry.refCount.incrementAndGet();<a name="line.430"></a>
+<span class="sourceLineNo">312</span>    } else if (ioEngineName.startsWith("mmap:")) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FileMmapEngine(ioEngineName.substring(5), capacity);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Cache the block with the specified name and buffer.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param cacheKey block's cache key<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param buf block buffer<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    cacheBlock(cacheKey, buf, false, false);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * Cache the block with the specified name and buffer.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param cacheKey block's cache key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param cachedItem block buffer<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param inMemory if block is in-memory<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param cacheDataInL1<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final boolean cacheDataInL1) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<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>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Cache the block to ramCache<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cacheKey block's cache key<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param cachedItem block buffer<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param inMemory if block is in-memory<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param wait if true, blocking wait when queue is full<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      boolean wait) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    if (!cacheEnabled) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    /*<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    RAMQueueEntry re =<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    boolean successfulAddition = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (wait) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      } catch (InterruptedException e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        Thread.currentThread().interrupt();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      successfulAddition = bq.offer(re);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    if (!successfulAddition) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ramCache.remove(cacheKey);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      cacheStats.failInsert();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } else {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.blockNumber.incrementAndGet();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Get the buffer of the block with the specified key.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param key block's cache key<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return buffer of specified cache key, or null if not in cache<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      boolean updateCacheMetrics) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (!cacheEnabled) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (re != null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (updateCacheMetrics) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      re.access(accessCount.incrementAndGet());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return re.getData();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (bucketEntry != null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      long start = System.nanoTime();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        lock.readLock().lock();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // existence here.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          // TODO : change this area - should be removed after server cells and<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          // 12295 are available<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          int len = bucketEntry.getLength();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          long timeTaken = System.nanoTime() - start;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          if (updateCacheMetrics) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            cacheStats.ioHit(timeTaken);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>          }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            ioErrorStartTime = -1;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          return cachedBlock;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } catch (IOException ioex) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        checkIOErrorIsTolerated();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      } finally {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        lock.readLock().unlock();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.446"></a>
+<span class="sourceLineNo">432</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>            bucketEntry.refCount.incrementAndGet();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            ioErrorStartTime = -1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          return cachedBlock;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      } catch (IOException ioex) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        checkIOErrorIsTolerated();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      } finally {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        lock.readLock().unlock();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return null;<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>  @VisibleForTesting<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (decrementBlockNumber) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      this.blockNumber.decrementAndGet();<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return evictBlock(cacheKey, true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // bucket map<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!cacheEnabled) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return false;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (bucketEntry == null) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (removedBlock != null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        return true;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      } else {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        return false;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      lock.writeLock().lock();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      lock.writeLock().unlock();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return true;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (removedBlock != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.blockNumber.decrementAndGet();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return removedBlock;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (!cacheEnabled) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return false;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    if (bucketEntry == null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (removedBlock != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        return false;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      lock.writeLock().lock();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      int refCount = bucketEntry.refCount.get();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if(refCount == 0) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        } else {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      } else {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        if(!deletedBlock) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          if (LOG.isDebugEnabled()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.533"></a>
-<span class="sourceLineNo">534</span>                + " readers. Can not be freed now");<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          if (LOG.isDebugEnabled()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.539"></a>
-<span class="sourceLineNo">540</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.540"></a>
-<span class="sourceLineNo">541</span>                + " for evicting at a later point");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          bucketEntry.markedForEvict = true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } finally {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      lock.writeLock().unlock();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /*<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  private static class StatisticsThread extends Thread {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    private final BucketCache bucketCache;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      super("BucketCacheStatsThread");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      setDaemon(true);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      this.bucketCache = bucketCache;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    @Override<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public void run() {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bucketCache.logStats();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void logStats() {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    long freeSize = totalSize - usedSize;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    long cacheSize = getRealCacheSize();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    cacheStats.reset();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public long getRealCacheSize() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return this.realCacheSize.get();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private long acceptableSize() {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>  private long singleSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private long multiSize() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        * DEFAULT_MIN_FACTOR);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private long memorySize() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        * DEFAULT_MIN_FACTOR);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * ensure there must be some blocks evicted<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param why Why we are being called<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  private void freeSpace(final String why) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // Ensure only one freeSpace progress at a time<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    try {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      freeInProgress = true;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      long bytesToFreeWithoutExtra = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      // Calculate free byte for each bucketSizeinfo<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        bytesToFreeForBucket[i] = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          if (msgBuffer != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.644"></a>
-<span class="sourceLineNo">645</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (msgBuffer != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.650"></a>
+<span class="sourceLineNo">448</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return null;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @VisibleForTesting<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (decrementBlockNumber) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      this.blockNumber.decrementAndGet();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return evictBlock(cacheKey, true);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  // bucket map<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (!cacheEnabled) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    if (bucketEntry == null) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (removedBlock != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        return true;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        return false;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      lock.writeLock().lock();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      } else {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      lock.writeLock().unlock();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    return true;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (removedBlock != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      this.blockNumber.decrementAndGet();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return removedBlock;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (!cacheEnabled) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (bucketEntry == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      if (removedBlock != null) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        return true;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        return false;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      lock.writeLock().lock();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      int refCount = bucketEntry.refCount.get();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      if(refCount == 0) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        } else {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>          return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        }<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      } else {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if(!deletedBlock) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          if (LOG.isDebugEnabled()) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                + " readers. Can not be freed now");<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          }<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          return false;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.542"></a>
+<span class="sourceLineNo">543</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.543"></a>
+<span class="sourceLineNo">544</span>                + " for evicting at a later point");<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          bucketEntry.markedForEvict = true;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      lock.writeLock().unlock();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    return true;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /*<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private static class StatisticsThread extends Thread {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    private final BucketCache bucketCache;<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      super("BucketCacheStatsThread");<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      setDaemon(true);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      this.bucketCache = bucketCache;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    public void run() {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      bucketCache.logStats();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  public void logStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    long freeSize = totalSize - usedSize;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    long cacheSize = getRealCacheSize();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.581"></a>
+<span class="sourceLineNo">582</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.590"></a>
+<span class="sourceLineNo">591</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    cacheStats.reset();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  public long getRealCacheSize() {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return this.realCacheSize.get();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  private long acceptableSize() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>  private long singleSize() {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private long multiSize() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        * DEFAULT_MIN_FACTOR);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>  private long memorySize() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        * DEFAULT_MIN_FACTOR);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * ensure there must be some blocks evicted<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * @param why Why we are being called<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   */<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  private void freeSpace(final String why) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // Ensure only one freeSpace progress at a time<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      freeInProgress = true;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      long bytesToFreeWithoutExtra = 0;<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Calculate free byte for each bucketSizeinfo<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        bytesToFreeForBucket[i] = 0;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (msgBuffer != null) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.647"></a>
+<span class="sourceLineNo">648</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
 <span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        return;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.665"></a>
+<span class="sourceLineNo">652</span>      if (msgBuffer != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span><a name="line.655"></a>
+<span class="sourceLineNo">656</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      }<a name="line.665"></a>
 <span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // Instantiate priority buckets<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          blockSize, singleSize());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          blockSize, multiSize());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          blockSize, memorySize());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      // group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          case SINGLE: {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            break;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          case MULTI: {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            break;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          case MEMORY: {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            break;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>      bucketQueue.add(bucketSingle);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      bucketQueue.add(bucketMulti);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      bucketQueue.add(bucketMemory);<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>      int remainingBuckets = 3;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      long bytesFreed = 0;<a name="line.701"></a>
+<span class="sourceLineNo">667</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>      // Instantiate priority buckets<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          blockSize, singleSize());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          blockSize, multiSize());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.675"></a>
+<span class="sourceLineNo">676</span>          blockSize, memorySize());<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // group<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          case SINGLE: {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            break;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          case MULTI: {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>            break;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>          case MEMORY: {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>            break;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>      bucketQueue.add(bucketSingle);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      bucketQueue.add(bucketMulti);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      bucketQueue.add(bucketMemory);<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>      BucketEntryGroup bucketGroup;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        long overflow = bucketGroup.overflow();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        if (overflow &gt; 0) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.707"></a>
-<span class="sourceLineNo">708</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        remainingBuckets--;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.715"></a>
-<span class="sourceLineNo">716</span>       * free space<a name="line.716"></a>
-<span class="sourceLineNo">717</span>       */<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      boolean needFreeForExtra = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          needFreeForExtra = true;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (needFreeForExtra) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        bucketQueue.clear();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        remainingBuckets = 2;<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>        bucketQueue.add(bucketSingle);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        bucketQueue.add(bucketMulti);<a name="line.734"></a>
+<span class="sourceLineNo">703</span>      int remainingBuckets = 3;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      long bytesFreed = 0;<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>      BucketEntryGroup bucketGroup;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        long overflow = bucketGroup.overflow();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        if (overflow &gt; 0) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        remainingBuckets--;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>      /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.718"></a>
+<span class="sourceLineNo">719</span>       * free space<a name="line.719"></a>
+<span class="sourceLineNo">720</span>       */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      boolean needFreeForExtra = false;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          needFreeForExtra = true;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          break;<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (needFreeForExtra) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        bucketQueue.clear();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        remainingBuckets = 2;<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>        while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          long bucketBytesToFree = (bytesToFreeWithExtra - bytesFreed) / remainingBuckets;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          remainingBuckets--;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span>      if (LOG.isDebugEnabled()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        long single = bucketSingle.totalSize();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        long multi = bucketMulti.totalSize();<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        long memory = bucketMemory.totalSize();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isDebugEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.debug("Bucket cache free space completed; " + "freed="<a name="line.748"></a>
-<span class="sourceLineNo">749</span>            + StringUtils.byteDesc(bytesFreed) + ", " + "total="<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            + StringUtils.byteDesc(totalSize) + ", " + "single="<a name="line.750"></a>
-<span class="sourceLineNo">751</span>            + StringUtils.byteDesc(single) + ", " + "multi="<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            + StringUtils.byteDesc(multi) + ", " + "memory="<a name="line.752"></a>
-<span class="sourceLineNo">753</span>            + StringUtils.byteDesc(memory));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>    } catch (Throwable t) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      LOG.warn("Failed freeing space", t);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      cacheStats.evict();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      freeInProgress = false;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      freeSpaceLock.unlock();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  // This handles flushing the RAM cache to IOEngine.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  @VisibleForTesting<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  class WriterThread extends HasThread {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    private final BlockingQueue&lt;RAMQueueEntry&gt; inputQueue;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private volatile boolean writerEnabled = true;<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    WriterThread(BlockingQueue&lt;RAMQueueEntry&gt; queue) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      this.inputQueue = queue;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Used for test<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    @VisibleForTesting<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    void disableWriter() {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      this.writerEnabled = false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>    public void run() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      List&lt;RAMQueueEntry&gt; entries = new ArrayList&lt;RAMQueueEntry&gt;();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      try {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        while (cacheEnabled &amp;&amp; writerEnabled) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          try {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>            try {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>              // Blocks<a name="line.788"></a>
-<span class="sourceLineNo">789</span>              entries = getRAMQueueEntries(inputQueue, entries);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            } catch (InterruptedException ie) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>              if (!cacheEnabled) break;<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            doDrain(entries);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          } catch (Exception ioe) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            LOG.error("WriterThread encountered error", ioe);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a name="line.797"

<TRUNCATED>

[48/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html b/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
index 1b54cf8..195ffb2 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[40/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
index 752bb87..3b89a33 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceAudience.Private.html
@@ -3072,13 +3072,20 @@ service.</div>
 </td>
 </tr>
 <tr class="altColor">
+<td class="colFirst"><code>class&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/FileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">FileMmapEngine</a></strong></code>
+<div class="block">IO engine that stores data to a file on the local file system using memory mapping
+ mechanism</div>
+</td>
+</tr>
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/IOEngine.html" title="interface in org.apache.hadoop.hbase.io.hfile.bucket">IOEngine</a></strong></code>
 <div class="block">A class implementing IOEngine interface supports data services for
  <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><code>BucketCache</code></a>.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/io/hfile/bucket/UniqueIndexMap.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">UniqueIndexMap</a>&lt;T&gt;</strong></code>
 <div class="block">Map from type T to int and vice-versa.</div>
@@ -7382,49 +7389,55 @@ service.</div>
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>interface&nbsp;</code></td>
+<td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferAllocator.html" title="interface in org.apache.hadoop.hbase.util">ByteBufferAllocator</a></strong></code>
+<div class="block">Defines the way the ByteBuffers are created</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteBufferArray.html" title="class in org.apache.hadoop.hbase.util">ByteBufferArray</a></strong></code>
 <div class="block">This class manages an array of ByteBuffers with a default size 4MB.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ByteStringer.html" title="class in org.apache.hadoop.hbase.util">ByteStringer</a></strong></code>
 <div class="block">Hack to workaround HBASE-10304 issue that keeps bubbling up when a mapreduce context.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a></strong></code>
 <div class="block">Similar interface as <code>Progressable</code> but returns
  a boolean to support canceling the operation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ChecksumFactory.html" title="class in org.apache.hadoop.hbase.util">ChecksumFactory</a></strong></code>
 <div class="block">Utility class that is used to generate a Checksum object.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util">ChecksumType</a></strong></code>
 <div class="block">Checksum types.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Classes.html" title="class in org.apache.hadoop.hbase.util">Classes</a></strong></code>
 <div class="block">Utilities for class manipulation.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ClassLoaderBase.html" title="class in org.apache.hadoop.hbase.util">ClassLoaderBase</a></strong></code>
 <div class="block">Base class loader that defines couple shared constants used by sub-classes.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ClassSize.html" title="class in org.apache.hadoop.hbase.util">ClassSize</a></strong></code>
 <div class="block">Class for determining the "size" of a class, an attempt to calculate the
@@ -7433,209 +7446,209 @@ service.</div>
  The core of this class is taken from the Derby project</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CollectionBackedScanner.html" title="class in org.apache.hadoop.hbase.util">CollectionBackedScanner</a></strong></code>
 <div class="block">Utility scanner that wraps a sortable collection and serves
  as a KeyValueScanner.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CollectionUtils.html" title="class in org.apache.hadoop.hbase.util">CollectionUtils</a></strong></code>
 <div class="block">Utility methods for dealing with Collections, including treating null collections as empty.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ConcatenatedLists.html" title="class in org.apache.hadoop.hbase.util">ConcatenatedLists</a>&lt;T&gt;</strong></code>
 <div class="block">A collection class that contains multiple sub-lists, which allows us to not copy lists.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ConcurrentIndex.html" title="class in org.apache.hadoop.hbase.util">ConcurrentIndex</a>&lt;K,V&gt;</strong></code>
 <div class="block">A simple concurrent map of sets.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ConnectionCache.html" title="class in org.apache.hadoop.hbase.util">ConnectionCache</a></strong></code>
 <div class="block">A utility to store user specific HConnections in memory.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/CoprocessorClassLoader.html" title="class in org.apache.hadoop.hbase.util">CoprocessorClassLoader</a></strong></code>
 <div class="block">ClassLoader used to load classes for Coprocessor instances.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DefaultEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">DefaultEnvironmentEdge</a></strong></code>
 <div class="block">Default implementation of an environment edge.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DirectMemoryUtils.html" title="class in org.apache.hadoop.hbase.util">DirectMemoryUtils</a></strong></code>
 <div class="block">Utilities for interacting with and monitoring DirectByteBuffer allocations.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DNS.html" title="class in org.apache.hadoop.hbase.util">DNS</a></strong></code>
 <div class="block">Wrapper around Hadoop's DNS class to hide reflection.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DrainBarrier.html" title="class in org.apache.hadoop.hbase.util">DrainBarrier</a></strong></code>
 <div class="block">A simple barrier that can be used by classes that need to wait for some operations to
  finish before stopping/closing/etc.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/DynamicClassLoader.html" title="class in org.apache.hadoop.hbase.util">DynamicClassLoader</a></strong></code>
 <div class="block">This is a class loader that can load classes dynamically from new
  jar files under a configured folder.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/EnvironmentEdge.html" title="interface in org.apache.hadoop.hbase.util">EnvironmentEdge</a></strong></code>
 <div class="block">Has some basic interaction with the environment.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/EnvironmentEdgeManager.html" title="class in org.apache.hadoop.hbase.util">EnvironmentEdgeManager</a></strong></code>
 <div class="block">Manages a singleton instance of the environment edge.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ExceptionUtil.html" title="class in org.apache.hadoop.hbase.util">ExceptionUtil</a></strong></code>
 <div class="block">This class handles the different interruption classes.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ForeignExceptionUtil.html" title="class in org.apache.hadoop.hbase.util">ForeignExceptionUtil</a></strong></code>
 <div class="block">Helper to convert Exceptions and StackTraces from/to protobuf.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSHDFSUtils.html" title="class in org.apache.hadoop.hbase.util">FSHDFSUtils</a></strong></code>
 <div class="block">Implementation for hdfs</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSMapRUtils.html" title="class in org.apache.hadoop.hbase.util">FSMapRUtils</a></strong></code>
 <div class="block"><a href="http://www.mapr.com/">MapR</a> implementation.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSRegionScanner.html" title="class in org.apache.hadoop.hbase.util">FSRegionScanner</a></strong></code>
 <div class="block">Thread that walks over the filesystem, and computes the mappings
  Region -> BestHost and Region -> <code>Map&lt;HostName, fractional-locality-of-region&gt;</code></div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSTableDescriptors.html" title="class in org.apache.hadoop.hbase.util">FSTableDescriptors</a></strong></code>
 <div class="block">Implementation of <a href="../../../../../../org/apache/hadoop/hbase/TableDescriptors.html" title="interface in org.apache.hadoop.hbase"><code>TableDescriptors</code></a> that reads descriptors from the
  passed filesystem.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSUtils.html" title="class in org.apache.hadoop.hbase.util">FSUtils</a></strong></code>
 <div class="block">Utility methods for interacting with the underlying file system.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/FSVisitor.html" title="class in org.apache.hadoop.hbase.util">FSVisitor</a></strong></code>
 <div class="block">Utility methods for interacting with the hbase.root file system.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Hash.html" title="class in org.apache.hadoop.hbase.util">Hash</a></strong></code>
 <div class="block">This class represents a common API for hashing functions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a></strong></code>
 <div class="block">This class encapsulates a byte array and overrides hashCode and equals so
  that it's identity is based on the data rather than the array instance.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HasThread.html" title="class in org.apache.hadoop.hbase.util">HasThread</a></strong></code>
 <div class="block">Abstract class which contains a Thread and delegates the common Thread
  methods to that instance.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HBaseConfTool.html" title="class in org.apache.hadoop.hbase.util">HBaseConfTool</a></strong></code>
 <div class="block">Tool that prints out a configuration.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HBaseFsckRepair.html" title="class in org.apache.hadoop.hbase.util">HBaseFsckRepair</a></strong></code>
 <div class="block">This class contains helper methods that repair parts of hbase's filesystem
  contents.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/HMerge.html" title="class in org.apache.hadoop.hbase.util">HMerge</a></strong></code>
 <div class="block">A non-instantiable class that has a static method capable of compacting
  a table by merging adjacent regions.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IdLock.html" title="class in org.apache.hadoop.hbase.util">IdLock</a></strong></code>
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with a minimal
  memory overhead.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">IdReadWriteLock</a></strong></code>
 <div class="block">Allows multiple concurrent clients to lock on a numeric id with ReentrantReadWriteLock.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IncrementingEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">IncrementingEnvironmentEdge</a></strong></code>
 <div class="block">Uses an incrementing algorithm instead of the default.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/IterableUtils.html" title="class in org.apache.hadoop.hbase.util">IterableUtils</a></strong></code>
 <div class="block">Utility methods for Iterable including null-safe handlers.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JenkinsHash.html" title="class in org.apache.hadoop.hbase.util">JenkinsHash</a></strong></code>
 <div class="block">Produces 32-bit hash for hash table lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JVM.html" title="class in org.apache.hadoop.hbase.util">JVM</a></strong></code>
 <div class="block">This class is a wrapper for the implementation of
@@ -7644,67 +7657,67 @@ service.</div>
  depending on the runtime (vendor) used.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JVMClusterUtil.html" title="class in org.apache.hadoop.hbase.util">JVMClusterUtil</a></strong></code>
 <div class="block">Utility used running a cluster all in the one JVM.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JvmPauseMonitor.html" title="class in org.apache.hadoop.hbase.util">JvmPauseMonitor</a></strong></code>
 <div class="block">Class which sets up a simple thread which runs in a loop sleeping
  for a short interval of time.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/JvmVersion.html" title="class in org.apache.hadoop.hbase.util">JvmVersion</a></strong></code>
 <div class="block">Certain JVM versions are known to be unstable with HBase.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/KeyLocker.html" title="class in org.apache.hadoop.hbase.util">KeyLocker</a>&lt;K&gt;</strong></code>
 <div class="block">A utility class to manage a set of locks.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>interface&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a></strong></code>
 <div class="block">A key range use in split coverage.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ManualEnvironmentEdge.html" title="class in org.apache.hadoop.hbase.util">ManualEnvironmentEdge</a></strong></code>
 <div class="block">An environment edge that uses a manually set value.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MetaUtils.html" title="class in org.apache.hadoop.hbase.util">MetaUtils</a></strong></code>
 <div class="block">Contains utility methods for manipulating HBase meta tables.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Methods.html" title="class in org.apache.hadoop.hbase.util">Methods</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ModifyRegionUtils.html" title="class in org.apache.hadoop.hbase.util">ModifyRegionUtils</a></strong></code>
 <div class="block">Utility methods for interacting with the regions.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MultiHConnection.html" title="class in org.apache.hadoop.hbase.util">MultiHConnection</a></strong></code>
 <div class="block">Provides ability to create multiple HConnection instances and allows to process a batch of
  actions using HConnection.processBatchCallback()</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MunkresAssignment.html" title="class in org.apache.hadoop.hbase.util">MunkresAssignment</a></strong></code>
 <div class="block">Computes the optimal (minimal cost) assignment of jobs to workers (or other
@@ -7715,64 +7728,64 @@ service.</div>
  Problem: An Improved Version of Munkres' Algorithm".</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MurmurHash.html" title="class in org.apache.hadoop.hbase.util">MurmurHash</a></strong></code>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/MurmurHash3.html" title="class in org.apache.hadoop.hbase.util">MurmurHash3</a></strong></code>
 <div class="block">This is a very fast, non-cryptographic hash suitable for general hash-based
  lookup.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a></strong></code>
 <div class="block">This implementation is not smart and just treats nonce group and nonce as random bits.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ObjectIntPair.html" title="class in org.apache.hadoop.hbase.util">ObjectIntPair</a>&lt;T&gt;</strong></code>
 <div class="block">A generic class for pair of an Object and and a primitive int value.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/PoolMap.html" title="class in org.apache.hadoop.hbase.util">PoolMap</a>&lt;K,V&gt;</strong></code>
 <div class="block">The <code>PoolMap</code> maps a key to a collection of values, the elements
  of which are managed by a pool.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.html" title="class in org.apache.hadoop.hbase.util">PrettyPrinter</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ProtoUtil.html" title="class in org.apache.hadoop.hbase.util">ProtoUtil</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ReflectionUtils.html" title="class in org.apache.hadoop.hbase.util">ReflectionUtils</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSizeCalculator</a></strong></code>
 <div class="block">Computes size of each region for given table and given column families.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RegionSplitCalculator.html" title="class in org.apache.hadoop.hbase.util">RegionSplitCalculator</a>&lt;R extends <a href="../../../../../../org/apache/hadoop/hbase/util/KeyRange.html" title="interface in org.apache.hadoop.hbase.util">KeyRange</a>&gt;</strong></code>
 <div class="block">This is a generic region split calculator.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util">RegionSplitter</a></strong></code>
 <div class="block">The <a href="../../../../../../org/apache/hadoop/hbase/util/RegionSplitter.html" title="class in org.apache.hadoop.hbase.util"><code>RegionSplitter</code></a> class provides several utilities to help in the
@@ -7780,74 +7793,74 @@ service.</div>
  instead of having HBase handle that automatically.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounter.html" title="class in org.apache.hadoop.hbase.util">RetryCounter</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/RetryCounterFactory.html" title="class in org.apache.hadoop.hbase.util">RetryCounterFactory</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ServerCommandLine.html" title="class in org.apache.hadoop.hbase.util">ServerCommandLine</a></strong></code>
 <div class="block">Base class for command lines that start up various HBase daemons.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Sleeper.html" title="class in org.apache.hadoop.hbase.util">Sleeper</a></strong></code>
 <div class="block">Sleeper for current thread.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/SortedCopyOnWriteSet.html" title="class in org.apache.hadoop.hbase.util">SortedCopyOnWriteSet</a>&lt;E&gt;</strong></code>
 <div class="block">Simple <a href="http://docs.oracle.com/javase/7/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util"><code>SortedSet</code></a> implementation that uses an internal
  <a href="http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html?is-external=true" title="class or interface in java.util"><code>TreeSet</code></a> to provide ordering.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/StealJobQueue.html" title="class in org.apache.hadoop.hbase.util">StealJobQueue</a>&lt;T&gt;</strong></code>
 <div class="block">This queue allows a ThreadPoolExecutor to steal jobs from another ThreadPoolExecutor.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Strings.html" title="class in org.apache.hadoop.hbase.util">Strings</a></strong></code>
 <div class="block">Utility for Strings.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Threads.html" title="class in org.apache.hadoop.hbase.util">Threads</a></strong></code>
 <div class="block">Thread Utility</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Triple.html" title="class in org.apache.hadoop.hbase.util">Triple</a>&lt;A,B,C&gt;</strong></code>
 <div class="block">Utility class to manage a triple.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/UnsafeAccess.html" title="class in org.apache.hadoop.hbase.util">UnsafeAccess</a></strong></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/WeakObjectPool.html" title="class in org.apache.hadoop.hbase.util">WeakObjectPool</a>&lt;K,V&gt;</strong></code>
 <div class="block">A <code>WeakReference</code> based shared object pool.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/Writables.html" title="class in org.apache.hadoop.hbase.util">Writables</a></strong></code>
 <div class="block">Utility class with methods for manipulating Writable objects</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><strong><a href="../../../../../../org/apache/hadoop/hbase/util/ZKDataMigrator.html" title="class in org.apache.hadoop.hbase.util">ZKDataMigrator</a></strong></code>
 <div class="block">utlity method to migrate zookeeper data across HBase versions.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
index 1a288a4..20f2daa 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/class-use/InterfaceStability.Unstable.html
@@ -136,19 +136,19 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/lib/package-summary.html">org.apache.hadoop.hbase.http.lib</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></td>
 <td class="colLast">
 <div class="block">
- This package provides user-selectable (via configuration) classes that add
- functionality to the web UI.</div>
+ Copied from hadoop source code.<br>
+ See https://issues.apache.org/jira/browse/HADOOP-10232 to know why.</div>
 </td>
 </tr>
 <tr class="rowColor">
-<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/package-summary.html">org.apache.hadoop.hbase.http</a></td>
+<td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/http/lib/package-summary.html">org.apache.hadoop.hbase.http.lib</a></td>
 <td class="colLast">
 <div class="block">
- Copied from hadoop source code.<br>
- See https://issues.apache.org/jira/browse/HADOOP-10232 to know why.</div>
+ This package provides user-selectable (via configuration) classes that add
+ functionality to the web UI.</div>
 </td>
 </tr>
 </tbody>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
index 6117018..dc01766 100644
--- a/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/classification/package-tree.html
@@ -81,11 +81,11 @@
 <h2 title="Annotation Type Hierarchy">Annotation Type Hierarchy</h2>
 <ul>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.LimitedPrivate.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.LimitedPrivate</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
-<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Evolving.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Evolving</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Public.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Public</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 <li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Stable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Stable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceAudience.Private.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceAudience.Private</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
+<li type="circle">org.apache.hadoop.hbase.classification.<a href="../../../../../org/apache/hadoop/hbase/classification/InterfaceStability.Unstable.html" title="annotation in org.apache.hadoop.hbase.classification"><span class="strong">InterfaceStability.Unstable</span></a> (implements java.lang.annotation.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/annotation/Annotation.html?is-external=true" title="class or interface in java.lang.annotation">Annotation</a>)</li>
 </ul>
 </div>
 <!-- ======= START OF BOTTOM NAVBAR ====== -->

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
index 357f586..8a348eb 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html
@@ -785,7 +785,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>createLog</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/AsyncProcess.AsyncRequestFutureImpl.html#line.1388">createLog</a>(int&nbsp;numAttempt,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/AsyncProcess.AsyncRequestFutureImpl.html#line.1395">createLog</a>(int&nbsp;numAttempt,
                int&nbsp;failureCount,
                int&nbsp;replaySize,
                <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn,
@@ -803,7 +803,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>setResult</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1426">setResult</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Action.html" title="class in org.apache.hadoop.hbase.client">Action</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;action,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1433">setResult</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Action.html" title="class in org.apache.hadoop.hbase.client">Action</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;action,
              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;result)</pre>
 <div class="block">Sets the non-error result from a particular action.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>action</code> - Action (request) that the server responded to.</dd><dd><code>result</code> - The result.</dd></dl>
@@ -815,7 +815,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>setError</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1469">setError</a>(int&nbsp;index,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1476">setError</a>(int&nbsp;index,
             <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;row,
             <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;throwable,
             <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server)</pre>
@@ -829,7 +829,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>isActionComplete</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1527">isActionComplete</a>(int&nbsp;index,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1534">isActionComplete</a>(int&nbsp;index,
                        <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;row)</pre>
 <div class="block">Checks if the action is complete; used on error to prevent needless retries.
  Does not synchronize, assuming element index/field accesses are atomic.
@@ -843,7 +843,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>trySetResultSimple</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.ReplicaResultState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1538">trySetResultSimple</a>(int&nbsp;index,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.ReplicaResultState.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.ReplicaResultState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1545">trySetResultSimple</a>(int&nbsp;index,
                                                  <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;row,
                                                  boolean&nbsp;isError,
                                                  <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;result,
@@ -859,7 +859,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>decActionCounter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1573">decActionCounter</a>(int&nbsp;index)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1580">decActionCounter</a>(int&nbsp;index)</pre>
 </li>
 </ul>
 <a name="buildDetailedErrorMsg(java.lang.String, int)">
@@ -868,7 +868,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>buildDetailedErrorMsg</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/AsyncProcess.AsyncRequestFutureImpl.html#line.1585">buildDetailedErrorMsg</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;string,
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/AsyncProcess.AsyncRequestFutureImpl.html#line.1592">buildDetailedErrorMsg</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;string,
                            int&nbsp;index)</pre>
 </li>
 </ul>
@@ -878,7 +878,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilDone</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1607">waitUntilDone</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1614">waitUntilDone</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html#waitUntilDone()">AsyncProcess.AsyncRequestFuture</a></code></strong></div>
 <div class="block">Wait until all tasks are executed, successfully or not.</div>
@@ -895,7 +895,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilDone</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1621">waitUntilDone</a>(long&nbsp;cutoff)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1628">waitUntilDone</a>(long&nbsp;cutoff)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></code></dd></dl>
@@ -907,7 +907,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>hasError</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1650">hasError</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1657">hasError</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html#hasError()">hasError</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html" title="interface in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFuture</a></code></dd>
@@ -920,7 +920,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>getFailedOperations</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1655">getFailedOperations</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;? extends <a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1662">getFailedOperations</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html#getFailedOperations()">getFailedOperations</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html" title="interface in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFuture</a></code></dd>
@@ -933,7 +933,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockList">
 <li class="blockList">
 <h4>getErrors</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedWithDetailsException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1660">getErrors</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedWithDetailsException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html#line.1667">getErrors</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html#getErrors()">getErrors</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFuture.html" title="interface in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFuture</a></code></dd>
@@ -946,7 +946,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.A
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getResults</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/AsyncProcess.AsyncRequestFutureImpl.html#line.1665">getResults</a>()
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/AsyncProcess.AsyncRequestFutureImpl.html#line.1672">getResults</a>()
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
index 7151a74..7db24ad 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
@@ -108,7 +108,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1823">AsyncProcess.Retry</a>
+<pre>private static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1830">AsyncProcess.Retry</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a>&gt;</pre>
 <div class="block">For <code>AsyncRequestFutureImpl#manageError(int, Row, Retry, Throwable, ServerName)</code>. Only
  used to make logging more clear, we don't actually care why we don't retry.</div>
@@ -207,7 +207,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>YES</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1824">YES</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1831">YES</a></pre>
 </li>
 </ul>
 <a name="NO_LOCATION_PROBLEM">
@@ -216,7 +216,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_LOCATION_PROBLEM</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1825">NO_LOCATION_PROBLEM</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1832">NO_LOCATION_PROBLEM</a></pre>
 </li>
 </ul>
 <a name="NO_NOT_RETRIABLE">
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_NOT_RETRIABLE</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1826">NO_NOT_RETRIABLE</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1833">NO_NOT_RETRIABLE</a></pre>
 </li>
 </ul>
 <a name="NO_RETRIES_EXHAUSTED">
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>NO_RETRIES_EXHAUSTED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1827">NO_RETRIES_EXHAUSTED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1834">NO_RETRIES_EXHAUSTED</a></pre>
 </li>
 </ul>
 <a name="NO_OTHER_SUCCEEDED">
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>NO_OTHER_SUCCEEDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1828">NO_OTHER_SUCCEEDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.Retry.html" title="enum in org.apache.hadoop.hbase.client">AsyncProcess.Retry</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html#line.1835">NO_OTHER_SUCCEEDED</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.html b/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.html
index 0efe897..051bbcb 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/AsyncProcess.html
@@ -914,7 +914,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createAsyncRequestFuture</h4>
-<pre>protected&nbsp;&lt;CResult&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFutureImpl</a>&lt;CResult&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1673">createAsyncRequestFuture</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
+<pre>protected&nbsp;&lt;CResult&gt;&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.AsyncRequestFutureImpl.html" title="class in org.apache.hadoop.hbase.client">AsyncProcess.AsyncRequestFutureImpl</a>&lt;CResult&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1680">createAsyncRequestFuture</a>(<a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName,
                                                                               <a href="http://docs.oracle.com/javase/7/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/Action.html" title="class in org.apache.hadoop.hbase.client">Action</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&gt;&nbsp;actions,
                                                                               long&nbsp;nonceGroup,
                                                                               <a href="http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a>&nbsp;pool,
@@ -929,7 +929,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createCallable</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1684">createCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1691">createCallable</a>(<a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;server,
                                       <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/MultiAction.html" title="class in org.apache.hadoop.hbase.client">MultiAction</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;multi)</pre>
 <div class="block">Create a callable. Isolated to be easily overridden in the tests.</div>
@@ -941,7 +941,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createCaller</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCaller.html" title="interface in org.apache.hadoop.hbase.client">RpcRetryingCaller</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/MultiResponse.html" title="class in org.apache.hadoop.hbase.client">MultiResponse</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1693">createCaller</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;callable)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RpcRetryingCaller.html" title="interface in org.apache.hadoop.hbase.client">RpcRetryingCaller</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/MultiResponse.html" title="class in org.apache.hadoop.hbase.client">MultiResponse</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1700">createCaller</a>(<a href="../../../../../org/apache/hadoop/hbase/client/MultiServerCallable.html" title="class in org.apache.hadoop.hbase.client">MultiServerCallable</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;callable)</pre>
 <div class="block">Create a caller. Isolated to be easily overridden in the tests.</div>
 </li>
 </ul>
@@ -951,7 +951,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>waitUntilDone</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1699">waitUntilDone</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1706">waitUntilDone</a>()
              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></code></dd></dl>
@@ -963,7 +963,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForMaximumCurrentTasks</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1704">waitForMaximumCurrentTasks</a>(int&nbsp;max)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1711">waitForMaximumCurrentTasks</a>(int&nbsp;max)
                                  throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <div class="block">Wait until the async does not have more than max tasks in progress.</div>
 <dl><dt><span class="strong">Throws:</span></dt>
@@ -976,7 +976,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>hasError</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1734">hasError</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1741">hasError</a>()</pre>
 <div class="block">Only used w/useGlobalErrors ctor argument, for HTable backward compat.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>Whether there were any errors in any request since the last time
           <a href="../../../../../org/apache/hadoop/hbase/client/AsyncProcess.html#waitForAllPreviousOpsAndReset(java.util.List)"><code>waitForAllPreviousOpsAndReset(List)</code></a> was called, or AP was created.</dd></dl>
@@ -988,7 +988,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForAllPreviousOpsAndReset</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedWithDetailsException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1747">waitForAllPreviousOpsAndReset</a>(<a href="http://docs.oracle.com/javase/7/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/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;failedRows)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RetriesExhaustedWithDetailsException.html" title="class in org.apache.hadoop.hbase.client">RetriesExhaustedWithDetailsException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1754">waitForAllPreviousOpsAndReset</a>(<a href="http://docs.oracle.com/javase/7/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/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&gt;&nbsp;failedRows)
                                                                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <div class="block">Only used w/useGlobalErrors ctor argument, for HTable backward compat.
  Waits for all previous operations to finish, and returns errors and (optionally)
@@ -1007,7 +1007,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>incTaskCounters</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1764">incTaskCounters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;regions,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1771">incTaskCounters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;regions,
                    <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block">increment the tasks counters for a given set of regions. MT safe.</div>
 </li>
@@ -1018,7 +1018,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>decTaskCounters</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1790">decTaskCounters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;regions,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1797">decTaskCounters</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;regions,
                    <a href="../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;sn)</pre>
 <div class="block">Decrements the counters for a given region and the region server. MT Safe.</div>
 </li>
@@ -1029,7 +1029,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>createServerErrorTracker</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.ServerErrorTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1810">createServerErrorTracker</a>()</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/ConnectionImplementation.ServerErrorTracker.html" title="class in org.apache.hadoop.hbase.client">ConnectionImplementation.ServerErrorTracker</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1817">createServerErrorTracker</a>()</pre>
 <div class="block">Creates the server error tracker to use inside process.
  Currently, to preserve the main assumption about current retries, and to work well with
  the retry-limit-based calculation, the calculation is local per Process object.
@@ -1043,7 +1043,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isReplicaGet</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1815">isReplicaGet</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;row)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/AsyncProcess.html#line.1822">isReplicaGet</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Row.html" title="interface in org.apache.hadoop.hbase.client">Row</a>&nbsp;row)</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
index c811cfb..c183a26 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html
@@ -99,7 +99,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.404">HTableMultiplexer.AtomicAverageCounter</a>
+<pre>private static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.393">HTableMultiplexer.AtomicAverageCounter</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Helper to count the average over an interval until reset.</div>
 </li>
@@ -208,7 +208,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>sum</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.405">sum</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.394">sum</a></pre>
 </li>
 </ul>
 <a name="count">
@@ -217,7 +217,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>count</h4>
-<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.406">count</a></pre>
+<pre>private&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.395">count</a></pre>
 </li>
 </ul>
 </li>
@@ -234,7 +234,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableMultiplexer.AtomicAverageCounter</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.408">HTableMultiplexer.AtomicAverageCounter</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.397">HTableMultiplexer.AtomicAverageCounter</a>()</pre>
 </li>
 </ul>
 </li>
@@ -251,7 +251,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getAndReset</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.413">getAndReset</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.402">getAndReset</a>()</pre>
 </li>
 </ul>
 <a name="get()">
@@ -260,7 +260,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.419">get</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.408">get</a>()</pre>
 </li>
 </ul>
 <a name="getComponents()">
@@ -269,7 +269,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getComponents</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.SimpleEntry.html?is-external=true" title="class or interface in java.util">AbstractMap.SimpleEntry</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.426">getComponents</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.SimpleEntry.html?is-external=true" title="class or interface in java.util">AbstractMap.SimpleEntry</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.415">getComponents</a>()</pre>
 </li>
 </ul>
 <a name="reset()">
@@ -278,7 +278,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>reset</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.430">reset</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.419">reset</a>()</pre>
 </li>
 </ul>
 <a name="add(long)">
@@ -287,7 +287,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>add</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.435">add</a>(long&nbsp;value)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.AtomicAverageCounter.html#line.424">add</a>(long&nbsp;value)</pre>
 </li>
 </ul>
 </li>


[02/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
index 2a9e4fe..ba28a63 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
@@ -32,98 +32,158 @@
 <span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.HBaseTestingUtility;<a name="line.24"></a>
 <span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.25"></a>
 <span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.MiniHBaseCluster;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.TableName;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.Waiter;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.junit.AfterClass;<a name="line.32"></a>
-<span class="sourceLineNo">033</span>import org.junit.BeforeClass;<a name="line.33"></a>
-<span class="sourceLineNo">034</span>import org.junit.Test;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import org.junit.experimental.categories.Category;<a name="line.35"></a>
-<span class="sourceLineNo">036</span><a name="line.36"></a>
-<span class="sourceLineNo">037</span>import static org.junit.Assert.assertTrue;<a name="line.37"></a>
-<span class="sourceLineNo">038</span><a name="line.38"></a>
-<span class="sourceLineNo">039</span>@Category({ LargeTests.class, ClientTests.class })<a name="line.39"></a>
-<span class="sourceLineNo">040</span>public class TestHTableMultiplexerFlushCache {<a name="line.40"></a>
-<span class="sourceLineNo">041</span>  private static final Log LOG = LogFactory.getLog(TestHTableMultiplexerFlushCache.class);<a name="line.41"></a>
-<span class="sourceLineNo">042</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private static byte[] QUALIFIER1 = Bytes.toBytes("testQualifier_1");<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private static byte[] QUALIFIER2 = Bytes.toBytes("testQualifier_2");<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private static byte[] VALUE1 = Bytes.toBytes("testValue1");<a name="line.46"></a>
-<span class="sourceLineNo">047</span>  private static byte[] VALUE2 = Bytes.toBytes("testValue2");<a name="line.47"></a>
-<span class="sourceLineNo">048</span>  private static int SLAVES = 3;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>  private static int PER_REGIONSERVER_QUEUE_SIZE = 100000;<a name="line.49"></a>
-<span class="sourceLineNo">050</span><a name="line.50"></a>
-<span class="sourceLineNo">051</span>  /**<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * @throws java.lang.Exception<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   */<a name="line.53"></a>
-<span class="sourceLineNo">054</span>  @BeforeClass<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  public static void setUpBeforeClass() throws Exception {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    TEST_UTIL.startMiniCluster(SLAVES);<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  }<a name="line.57"></a>
-<span class="sourceLineNo">058</span><a name="line.58"></a>
-<span class="sourceLineNo">059</span>  /**<a name="line.59"></a>
-<span class="sourceLineNo">060</span>   * @throws java.lang.Exception<a name="line.60"></a>
-<span class="sourceLineNo">061</span>   */<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  @AfterClass<a name="line.62"></a>
-<span class="sourceLineNo">063</span>  public static void tearDownAfterClass() throws Exception {<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  }<a name="line.65"></a>
-<span class="sourceLineNo">066</span><a name="line.66"></a>
-<span class="sourceLineNo">067</span>  private static void checkExistence(final Table htable, final byte[] row, final byte[] family,<a name="line.67"></a>
-<span class="sourceLineNo">068</span>      final byte[] quality,<a name="line.68"></a>
-<span class="sourceLineNo">069</span>      final byte[] value) throws Exception {<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    // verify that the Get returns the correct result<a name="line.70"></a>
-<span class="sourceLineNo">071</span>    TEST_UTIL.waitFor(30000, new Waiter.Predicate&lt;Exception&gt;() {<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>        Result r;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>        Get get = new Get(row);<a name="line.75"></a>
-<span class="sourceLineNo">076</span>        get.addColumn(family, quality);<a name="line.76"></a>
-<span class="sourceLineNo">077</span>        r = htable.get(get);<a name="line.77"></a>
-<span class="sourceLineNo">078</span>        return r != null &amp;&amp; r.getValue(family, quality) != null<a name="line.78"></a>
-<span class="sourceLineNo">079</span>            &amp;&amp; Bytes.toStringBinary(value).equals(<a name="line.79"></a>
-<span class="sourceLineNo">080</span>            Bytes.toStringBinary(r.getValue(family, quality)));<a name="line.80"></a>
-<span class="sourceLineNo">081</span>      }<a name="line.81"></a>
-<span class="sourceLineNo">082</span>    });<a name="line.82"></a>
-<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
-<span class="sourceLineNo">084</span><a name="line.84"></a>
-<span class="sourceLineNo">085</span>  @Test<a name="line.85"></a>
-<span class="sourceLineNo">086</span>  public void testOnRegionChange() throws Exception {<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    TableName TABLE = TableName.valueOf("testOnRegionChange");<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    final int NUM_REGIONS = 10;<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    Table htable = TEST_UTIL.createTable(TABLE, new byte[][] { FAMILY }, 3,<a name="line.89"></a>
-<span class="sourceLineNo">090</span>      Bytes.toBytes("aaaaa"), Bytes.toBytes("zzzzz"), NUM_REGIONS);<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>    HTableMultiplexer multiplexer = new HTableMultiplexer(TEST_UTIL.getConfiguration(), <a name="line.92"></a>
-<span class="sourceLineNo">093</span>      PER_REGIONSERVER_QUEUE_SIZE);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>    <a name="line.94"></a>
-<span class="sourceLineNo">095</span>    try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(TABLE)) {<a name="line.95"></a>
-<span class="sourceLineNo">096</span>      byte[][] startRows = r.getStartKeys();<a name="line.96"></a>
-<span class="sourceLineNo">097</span>      byte[] row = startRows[1];<a name="line.97"></a>
-<span class="sourceLineNo">098</span>      assertTrue("2nd region should not start with empty row", row != null &amp;&amp; row.length &gt; 0);<a name="line.98"></a>
-<span class="sourceLineNo">099</span><a name="line.99"></a>
-<span class="sourceLineNo">100</span>      Put put = new Put(row).addColumn(FAMILY, QUALIFIER1, VALUE1);<a name="line.100"></a>
-<span class="sourceLineNo">101</span>      assertTrue("multiplexer.put returns", multiplexer.put(TABLE, put));<a name="line.101"></a>
-<span class="sourceLineNo">102</span><a name="line.102"></a>
-<span class="sourceLineNo">103</span>      checkExistence(htable, row, FAMILY, QUALIFIER1, VALUE1);<a name="line.103"></a>
+<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.ServerName;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.TableName;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.Waiter;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.regionserver.HRegionServer;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.testclassification.ClientTests;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.hbase.testclassification.LargeTests;<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.apache.hadoop.hbase.util.Pair;<a name="line.34"></a>
+<span class="sourceLineNo">035</span>import org.junit.AfterClass;<a name="line.35"></a>
+<span class="sourceLineNo">036</span>import org.junit.BeforeClass;<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>import static org.junit.Assert.assertEquals;<a name="line.40"></a>
+<span class="sourceLineNo">041</span>import static org.junit.Assert.assertNotNull;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import static org.junit.Assert.assertTrue;<a name="line.42"></a>
+<span class="sourceLineNo">043</span><a name="line.43"></a>
+<span class="sourceLineNo">044</span>@Category({ LargeTests.class, ClientTests.class })<a name="line.44"></a>
+<span class="sourceLineNo">045</span>public class TestHTableMultiplexerFlushCache {<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private static final Log LOG = LogFactory.getLog(TestHTableMultiplexerFlushCache.class);<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private final static HBaseTestingUtility TEST_UTIL = new HBaseTestingUtility();<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private static byte[] FAMILY = Bytes.toBytes("testFamily");<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  private static byte[] QUALIFIER1 = Bytes.toBytes("testQualifier_1");<a name="line.49"></a>
+<span class="sourceLineNo">050</span>  private static byte[] QUALIFIER2 = Bytes.toBytes("testQualifier_2");<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  private static byte[] VALUE1 = Bytes.toBytes("testValue1");<a name="line.51"></a>
+<span class="sourceLineNo">052</span>  private static byte[] VALUE2 = Bytes.toBytes("testValue2");<a name="line.52"></a>
+<span class="sourceLineNo">053</span>  private static int SLAVES = 3;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  private static int PER_REGIONSERVER_QUEUE_SIZE = 100000;<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>   * @throws java.lang.Exception<a name="line.57"></a>
+<span class="sourceLineNo">058</span>   */<a name="line.58"></a>
+<span class="sourceLineNo">059</span>  @BeforeClass<a name="line.59"></a>
+<span class="sourceLineNo">060</span>  public static void setUpBeforeClass() throws Exception {<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    TEST_UTIL.startMiniCluster(SLAVES);<a name="line.61"></a>
+<span class="sourceLineNo">062</span>  }<a name="line.62"></a>
+<span class="sourceLineNo">063</span><a name="line.63"></a>
+<span class="sourceLineNo">064</span>  /**<a name="line.64"></a>
+<span class="sourceLineNo">065</span>   * @throws java.lang.Exception<a name="line.65"></a>
+<span class="sourceLineNo">066</span>   */<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  @AfterClass<a name="line.67"></a>
+<span class="sourceLineNo">068</span>  public static void tearDownAfterClass() throws Exception {<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    TEST_UTIL.shutdownMiniCluster();<a name="line.69"></a>
+<span class="sourceLineNo">070</span>  }<a name="line.70"></a>
+<span class="sourceLineNo">071</span><a name="line.71"></a>
+<span class="sourceLineNo">072</span>  private static void checkExistence(final Table htable, final byte[] row, final byte[] family,<a name="line.72"></a>
+<span class="sourceLineNo">073</span>      final byte[] quality,<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      final byte[] value) throws Exception {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>    // verify that the Get returns the correct result<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    TEST_UTIL.waitFor(30000, new Waiter.Predicate&lt;Exception&gt;() {<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      @Override<a name="line.77"></a>
+<span class="sourceLineNo">078</span>      public boolean evaluate() throws Exception {<a name="line.78"></a>
+<span class="sourceLineNo">079</span>        Result r;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>        Get get = new Get(row);<a name="line.80"></a>
+<span class="sourceLineNo">081</span>        get.addColumn(family, quality);<a name="line.81"></a>
+<span class="sourceLineNo">082</span>        r = htable.get(get);<a name="line.82"></a>
+<span class="sourceLineNo">083</span>        return r != null &amp;&amp; r.getValue(family, quality) != null<a name="line.83"></a>
+<span class="sourceLineNo">084</span>            &amp;&amp; Bytes.toStringBinary(value).equals(<a name="line.84"></a>
+<span class="sourceLineNo">085</span>            Bytes.toStringBinary(r.getValue(family, quality)));<a name="line.85"></a>
+<span class="sourceLineNo">086</span>      }<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    });<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  @Test<a name="line.90"></a>
+<span class="sourceLineNo">091</span>  public void testOnRegionChange() throws Exception {<a name="line.91"></a>
+<span class="sourceLineNo">092</span>    TableName TABLE = TableName.valueOf("testOnRegionChange");<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    final int NUM_REGIONS = 10;<a name="line.93"></a>
+<span class="sourceLineNo">094</span>    Table htable = TEST_UTIL.createTable(TABLE, new byte[][] { FAMILY }, 3,<a name="line.94"></a>
+<span class="sourceLineNo">095</span>      Bytes.toBytes("aaaaa"), Bytes.toBytes("zzzzz"), NUM_REGIONS);<a name="line.95"></a>
+<span class="sourceLineNo">096</span><a name="line.96"></a>
+<span class="sourceLineNo">097</span>    HTableMultiplexer multiplexer = new HTableMultiplexer(TEST_UTIL.getConfiguration(), <a name="line.97"></a>
+<span class="sourceLineNo">098</span>      PER_REGIONSERVER_QUEUE_SIZE);<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    <a name="line.99"></a>
+<span class="sourceLineNo">100</span>    try (RegionLocator r = TEST_UTIL.getConnection().getRegionLocator(TABLE)) {<a name="line.100"></a>
+<span class="sourceLineNo">101</span>      byte[][] startRows = r.getStartKeys();<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      byte[] row = startRows[1];<a name="line.102"></a>
+<span class="sourceLineNo">103</span>      assertTrue("2nd region should not start with empty row", row != null &amp;&amp; row.length &gt; 0);<a name="line.103"></a>
 <span class="sourceLineNo">104</span><a name="line.104"></a>
-<span class="sourceLineNo">105</span>      // Now let's shutdown the regionserver and let regions moved to other servers.<a name="line.105"></a>
-<span class="sourceLineNo">106</span>      HRegionLocation loc = r.getRegionLocation(row);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>      MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.107"></a>
-<span class="sourceLineNo">108</span>      hbaseCluster.stopRegionServer(loc.getServerName());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      TEST_UTIL.waitUntilAllRegionsAssigned(TABLE);<a name="line.109"></a>
-<span class="sourceLineNo">110</span><a name="line.110"></a>
-<span class="sourceLineNo">111</span>      // put with multiplexer.<a name="line.111"></a>
-<span class="sourceLineNo">112</span>      put = new Put(row).addColumn(FAMILY, QUALIFIER2, VALUE2);<a name="line.112"></a>
-<span class="sourceLineNo">113</span>      assertTrue("multiplexer.put returns", multiplexer.put(TABLE, put));<a name="line.113"></a>
-<span class="sourceLineNo">114</span><a name="line.114"></a>
-<span class="sourceLineNo">115</span>      checkExistence(htable, row, FAMILY, QUALIFIER2, VALUE2);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    }<a name="line.116"></a>
-<span class="sourceLineNo">117</span>  }<a name="line.117"></a>
-<span class="sourceLineNo">118</span>}<a name="line.118"></a>
+<span class="sourceLineNo">105</span>      Put put = new Put(row).addColumn(FAMILY, QUALIFIER1, VALUE1);<a name="line.105"></a>
+<span class="sourceLineNo">106</span>      assertTrue("multiplexer.put returns", multiplexer.put(TABLE, put));<a name="line.106"></a>
+<span class="sourceLineNo">107</span><a name="line.107"></a>
+<span class="sourceLineNo">108</span>      checkExistence(htable, row, FAMILY, QUALIFIER1, VALUE1);<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>      // Now let's shutdown the regionserver and let regions moved to other servers.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>      HRegionLocation loc = r.getRegionLocation(row);<a name="line.111"></a>
+<span class="sourceLineNo">112</span>      MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      hbaseCluster.stopRegionServer(loc.getServerName());<a name="line.113"></a>
+<span class="sourceLineNo">114</span>      TEST_UTIL.waitUntilAllRegionsAssigned(TABLE);<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>      // put with multiplexer.<a name="line.116"></a>
+<span class="sourceLineNo">117</span>      put = new Put(row).addColumn(FAMILY, QUALIFIER2, VALUE2);<a name="line.117"></a>
+<span class="sourceLineNo">118</span>      assertTrue("multiplexer.put returns", multiplexer.put(TABLE, put));<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>      checkExistence(htable, row, FAMILY, QUALIFIER2, VALUE2);<a name="line.120"></a>
+<span class="sourceLineNo">121</span>    }<a name="line.121"></a>
+<span class="sourceLineNo">122</span>  }<a name="line.122"></a>
+<span class="sourceLineNo">123</span><a name="line.123"></a>
+<span class="sourceLineNo">124</span>  @Test<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  public void testOnRegionMove() throws Exception {<a name="line.125"></a>
+<span class="sourceLineNo">126</span>    // This test is doing near exactly the same thing that testOnRegionChange but avoiding the<a name="line.126"></a>
+<span class="sourceLineNo">127</span>    // potential to get a ConnectionClosingException. By moving the region, we can be certain that<a name="line.127"></a>
+<span class="sourceLineNo">128</span>    // the connection is still valid and that the implementation is correctly handling an invalid<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    // Region cache (and not just tearing down the entire connection).<a name="line.129"></a>
+<span class="sourceLineNo">130</span>    TableName TABLE = TableName.valueOf("testOnRegionMove");<a name="line.130"></a>
+<span class="sourceLineNo">131</span>    final int NUM_REGIONS = 10;<a name="line.131"></a>
+<span class="sourceLineNo">132</span>    HTable htable = TEST_UTIL.createTable(TABLE, new byte[][] { FAMILY }, 3,<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      Bytes.toBytes("aaaaa"), Bytes.toBytes("zzzzz"), NUM_REGIONS);<a name="line.133"></a>
+<span class="sourceLineNo">134</span><a name="line.134"></a>
+<span class="sourceLineNo">135</span>    HTableMultiplexer multiplexer = new HTableMultiplexer(TEST_UTIL.getConfiguration(),<a name="line.135"></a>
+<span class="sourceLineNo">136</span>      PER_REGIONSERVER_QUEUE_SIZE);<a name="line.136"></a>
+<span class="sourceLineNo">137</span><a name="line.137"></a>
+<span class="sourceLineNo">138</span>    final RegionLocator regionLocator = TEST_UTIL.getConnection().getRegionLocator(TABLE);<a name="line.138"></a>
+<span class="sourceLineNo">139</span>    Pair&lt;byte[][],byte[][]&gt; startEndRows = regionLocator.getStartEndKeys();<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    byte[] row = startEndRows.getFirst()[1];<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    assertTrue("2nd region should not start with empty row", row != null &amp;&amp; row.length &gt; 0);<a name="line.141"></a>
+<span class="sourceLineNo">142</span><a name="line.142"></a>
+<span class="sourceLineNo">143</span>    Put put = new Put(row).addColumn(FAMILY, QUALIFIER1, VALUE1);<a name="line.143"></a>
+<span class="sourceLineNo">144</span>    assertTrue("multiplexer.put returns", multiplexer.put(TABLE, put));<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>    checkExistence(htable, row, FAMILY, QUALIFIER1, VALUE1);<a name="line.146"></a>
+<span class="sourceLineNo">147</span><a name="line.147"></a>
+<span class="sourceLineNo">148</span>    final HRegionLocation loc = regionLocator.getRegionLocation(row);<a name="line.148"></a>
+<span class="sourceLineNo">149</span>    final MiniHBaseCluster hbaseCluster = TEST_UTIL.getHBaseCluster();<a name="line.149"></a>
+<span class="sourceLineNo">150</span>    // The current server for the region we're writing to<a name="line.150"></a>
+<span class="sourceLineNo">151</span>    final ServerName originalServer = loc.getServerName();<a name="line.151"></a>
+<span class="sourceLineNo">152</span>    ServerName newServer = null;<a name="line.152"></a>
+<span class="sourceLineNo">153</span>    // Find a new server to move that region to<a name="line.153"></a>
+<span class="sourceLineNo">154</span>    for (int i = 0; i &lt; SLAVES; i++) {<a name="line.154"></a>
+<span class="sourceLineNo">155</span>      HRegionServer rs = hbaseCluster.getRegionServer(0);<a name="line.155"></a>
+<span class="sourceLineNo">156</span>      if (!rs.getServerName().equals(originalServer.getServerName())) {<a name="line.156"></a>
+<span class="sourceLineNo">157</span>        newServer = rs.getServerName();<a name="line.157"></a>
+<span class="sourceLineNo">158</span>        break;<a name="line.158"></a>
+<span class="sourceLineNo">159</span>      }<a name="line.159"></a>
+<span class="sourceLineNo">160</span>    }<a name="line.160"></a>
+<span class="sourceLineNo">161</span>    assertNotNull("Did not find a new RegionServer to use", newServer);<a name="line.161"></a>
+<span class="sourceLineNo">162</span><a name="line.162"></a>
+<span class="sourceLineNo">163</span>    // Move the region<a name="line.163"></a>
+<span class="sourceLineNo">164</span>    LOG.info("Moving " + loc.getRegionInfo().getEncodedName() + " from " + originalServer<a name="line.164"></a>
+<span class="sourceLineNo">165</span>        +  " to " + newServer);<a name="line.165"></a>
+<span class="sourceLineNo">166</span>    TEST_UTIL.getHBaseAdmin().move(loc.getRegionInfo().getEncodedNameAsBytes(),<a name="line.166"></a>
+<span class="sourceLineNo">167</span>        Bytes.toBytes(newServer.getServerName()));<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>    TEST_UTIL.waitUntilAllRegionsAssigned(TABLE);<a name="line.169"></a>
+<span class="sourceLineNo">170</span><a name="line.170"></a>
+<span class="sourceLineNo">171</span>    // Send a new Put<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    put = new Put(row).addColumn(FAMILY, QUALIFIER2, VALUE2);<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    assertTrue("multiplexer.put returns", multiplexer.put(TABLE, put));<a name="line.173"></a>
+<span class="sourceLineNo">174</span><a name="line.174"></a>
+<span class="sourceLineNo">175</span>    // We should see the update make it to the new server eventually<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    checkExistence(htable, row, FAMILY, QUALIFIER2, VALUE2);<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  }<a name="line.177"></a>
+<span class="sourceLineNo">178</span>}<a name="line.178"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
index 5a23d24..16c3825 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html
@@ -24,181 +24,64 @@
 <span class="sourceLineNo">016</span> */<a name="line.16"></a>
 <span class="sourceLineNo">017</span>package org.apache.hadoop.hbase.client;<a name="line.17"></a>
 <span class="sourceLineNo">018</span><a name="line.18"></a>
-<span class="sourceLineNo">019</span>import static org.junit.Assert.*;<a name="line.19"></a>
-<span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import org.apache.hadoop.hbase.HConstants;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import org.apache.hadoop.hbase.HRegionInfo;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import org.apache.hadoop.hbase.HRegionLocation;<a name="line.23"></a>
-<span class="sourceLineNo">024</span>import org.apache.hadoop.hbase.TableName;<a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.hadoop.hbase.client.HTableMultiplexer.FlushWorker;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.hadoop.hbase.client.HTableMultiplexer.PutStatus;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.junit.Before;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.junit.Test;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.junit.experimental.categories.Category;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.mockito.invocation.InvocationOnMock;<a name="line.31"></a>
-<span class="sourceLineNo">032</span>import org.mockito.stubbing.Answer;<a name="line.32"></a>
-<span class="sourceLineNo">033</span><a name="line.33"></a>
-<span class="sourceLineNo">034</span>import java.io.IOException;<a name="line.34"></a>
-<span class="sourceLineNo">035</span>import java.util.concurrent.LinkedBlockingQueue;<a name="line.35"></a>
-<span class="sourceLineNo">036</span>import java.util.concurrent.ScheduledExecutorService;<a name="line.36"></a>
-<span class="sourceLineNo">037</span>import java.util.concurrent.TimeUnit;<a name="line.37"></a>
-<span class="sourceLineNo">038</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.38"></a>
-<span class="sourceLineNo">039</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.39"></a>
+<span class="sourceLineNo">019</span>import org.apache.hadoop.hbase.TableName;<a name="line.19"></a>
+<span class="sourceLineNo">020</span>import org.apache.hadoop.hbase.testclassification.SmallTests;<a name="line.20"></a>
+<span class="sourceLineNo">021</span>import org.junit.Before;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import org.junit.Test;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import org.junit.experimental.categories.Category;<a name="line.23"></a>
+<span class="sourceLineNo">024</span><a name="line.24"></a>
+<span class="sourceLineNo">025</span>import java.io.IOException;<a name="line.25"></a>
+<span class="sourceLineNo">026</span><a name="line.26"></a>
+<span class="sourceLineNo">027</span>import static org.mockito.Matchers.any;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import static org.mockito.Matchers.anyInt;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import static org.mockito.Mockito.doCallRealMethod;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import static org.mockito.Mockito.mock;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import static org.mockito.Mockito.times;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import static org.mockito.Mockito.verify;<a name="line.32"></a>
+<span class="sourceLineNo">033</span>import static org.mockito.Mockito.when;<a name="line.33"></a>
+<span class="sourceLineNo">034</span><a name="line.34"></a>
+<span class="sourceLineNo">035</span>@Category(SmallTests.class)<a name="line.35"></a>
+<span class="sourceLineNo">036</span>public class TestHTableMultiplexerViaMocks {<a name="line.36"></a>
+<span class="sourceLineNo">037</span><a name="line.37"></a>
+<span class="sourceLineNo">038</span>  private HTableMultiplexer mockMultiplexer;<a name="line.38"></a>
+<span class="sourceLineNo">039</span>  private ClusterConnection mockConnection;<a name="line.39"></a>
 <span class="sourceLineNo">040</span><a name="line.40"></a>
-<span class="sourceLineNo">041</span>import static java.nio.charset.StandardCharsets.UTF_8;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import static org.mockito.Matchers.any;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import static org.mockito.Matchers.anyBoolean;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import static org.mockito.Matchers.anyInt;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import static org.mockito.Mockito.doCallRealMethod;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import static org.mockito.Mockito.eq;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import static org.mockito.Mockito.mock;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import static org.mockito.Mockito.times;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import static org.mockito.Mockito.verify;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import static org.mockito.Mockito.when;<a name="line.50"></a>
-<span class="sourceLineNo">051</span><a name="line.51"></a>
-<span class="sourceLineNo">052</span>@Category(SmallTests.class)<a name="line.52"></a>
-<span class="sourceLineNo">053</span>public class TestHTableMultiplexerViaMocks {<a name="line.53"></a>
-<span class="sourceLineNo">054</span><a name="line.54"></a>
-<span class="sourceLineNo">055</span>  private static final int NUM_RETRIES = HConstants.DEFAULT_HBASE_CLIENT_RETRIES_NUMBER;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>  private HTableMultiplexer mockMultiplexer;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>  private ClusterConnection mockConnection;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>  private HRegionLocation mockRegionLocation;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>  private HRegionInfo mockRegionInfo;<a name="line.59"></a>
+<span class="sourceLineNo">041</span>  @Before<a name="line.41"></a>
+<span class="sourceLineNo">042</span>  public void setupTest() {<a name="line.42"></a>
+<span class="sourceLineNo">043</span>    mockMultiplexer = mock(HTableMultiplexer.class);<a name="line.43"></a>
+<span class="sourceLineNo">044</span>    mockConnection = mock(ClusterConnection.class);<a name="line.44"></a>
+<span class="sourceLineNo">045</span><a name="line.45"></a>
+<span class="sourceLineNo">046</span>    // Call the real put(TableName, Put, int) method<a name="line.46"></a>
+<span class="sourceLineNo">047</span>    when(mockMultiplexer.put(any(TableName.class), any(Put.class), anyInt())).thenCallRealMethod();<a name="line.47"></a>
+<span class="sourceLineNo">048</span><a name="line.48"></a>
+<span class="sourceLineNo">049</span>    // Return the mocked ClusterConnection<a name="line.49"></a>
+<span class="sourceLineNo">050</span>    when(mockMultiplexer.getConnection()).thenReturn(mockConnection);<a name="line.50"></a>
+<span class="sourceLineNo">051</span>  }<a name="line.51"></a>
+<span class="sourceLineNo">052</span><a name="line.52"></a>
+<span class="sourceLineNo">053</span>  @SuppressWarnings("deprecation")<a name="line.53"></a>
+<span class="sourceLineNo">054</span>  @Test public void testConnectionClosing() throws IOException {<a name="line.54"></a>
+<span class="sourceLineNo">055</span>    doCallRealMethod().when(mockMultiplexer).close();<a name="line.55"></a>
+<span class="sourceLineNo">056</span>    // If the connection is not closed<a name="line.56"></a>
+<span class="sourceLineNo">057</span>    when(mockConnection.isClosed()).thenReturn(false);<a name="line.57"></a>
+<span class="sourceLineNo">058</span><a name="line.58"></a>
+<span class="sourceLineNo">059</span>    mockMultiplexer.close();<a name="line.59"></a>
 <span class="sourceLineNo">060</span><a name="line.60"></a>
-<span class="sourceLineNo">061</span>  private TableName tableName;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>  private Put put;<a name="line.62"></a>
-<span class="sourceLineNo">063</span><a name="line.63"></a>
-<span class="sourceLineNo">064</span>  @Before<a name="line.64"></a>
-<span class="sourceLineNo">065</span>  public void setupTest() {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    mockMultiplexer = mock(HTableMultiplexer.class);<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    mockConnection = mock(ClusterConnection.class);<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    mockRegionLocation = mock(HRegionLocation.class);<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    mockRegionInfo = mock(HRegionInfo.class);<a name="line.69"></a>
+<span class="sourceLineNo">061</span>    // We should close it<a name="line.61"></a>
+<span class="sourceLineNo">062</span>    verify(mockConnection).close();<a name="line.62"></a>
+<span class="sourceLineNo">063</span>  }<a name="line.63"></a>
+<span class="sourceLineNo">064</span><a name="line.64"></a>
+<span class="sourceLineNo">065</span>  @SuppressWarnings("deprecation")<a name="line.65"></a>
+<span class="sourceLineNo">066</span>  @Test public void testClosingAlreadyClosedConnection() throws IOException {<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    doCallRealMethod().when(mockMultiplexer).close();<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    // If the connection is already closed<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    when(mockConnection.isClosed()).thenReturn(true);<a name="line.69"></a>
 <span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>    tableName = TableName.valueOf("my_table");<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    put = new Put(getBytes("row1"));<a name="line.72"></a>
-<span class="sourceLineNo">073</span>    put.addColumn(getBytes("f1"), getBytes("q1"), getBytes("v11"));<a name="line.73"></a>
-<span class="sourceLineNo">074</span>    put.addColumn(getBytes("f1"), getBytes("q2"), getBytes("v12"));<a name="line.74"></a>
-<span class="sourceLineNo">075</span>    put.addColumn(getBytes("f2"), getBytes("q1"), getBytes("v21"));<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>    // Call the real put(TableName, Put, int) method<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    when(mockMultiplexer.put(any(TableName.class), any(Put.class), anyInt())).thenCallRealMethod();<a name="line.78"></a>
-<span class="sourceLineNo">079</span><a name="line.79"></a>
-<span class="sourceLineNo">080</span>    // Return the mocked ClusterConnection<a name="line.80"></a>
-<span class="sourceLineNo">081</span>    when(mockMultiplexer.getConnection()).thenReturn(mockConnection);<a name="line.81"></a>
-<span class="sourceLineNo">082</span><a name="line.82"></a>
-<span class="sourceLineNo">083</span>    // Return the regionInfo from the region location<a name="line.83"></a>
-<span class="sourceLineNo">084</span>    when(mockRegionLocation.getRegionInfo()).thenReturn(mockRegionInfo);<a name="line.84"></a>
-<span class="sourceLineNo">085</span><a name="line.85"></a>
-<span class="sourceLineNo">086</span>    // Make sure this RegionInfo points to our table<a name="line.86"></a>
-<span class="sourceLineNo">087</span>    when(mockRegionInfo.getTable()).thenReturn(tableName);<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>  @Test public void useCacheOnInitialPut() throws Exception {<a name="line.90"></a>
-<span class="sourceLineNo">091</span>    mockMultiplexer.put(tableName, put, NUM_RETRIES);<a name="line.91"></a>
-<span class="sourceLineNo">092</span><a name="line.92"></a>
-<span class="sourceLineNo">093</span>    verify(mockMultiplexer)._put(tableName, put, NUM_RETRIES, false);<a name="line.93"></a>
-<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
-<span class="sourceLineNo">095</span><a name="line.95"></a>
-<span class="sourceLineNo">096</span>  @Test public void nonNullLocationQueuesPut() throws Exception {<a name="line.96"></a>
-<span class="sourceLineNo">097</span>    final LinkedBlockingQueue&lt;PutStatus&gt; queue = new LinkedBlockingQueue&lt;&gt;();<a name="line.97"></a>
-<span class="sourceLineNo">098</span><a name="line.98"></a>
-<span class="sourceLineNo">099</span>    // Call the real method for _put(TableName, Put, int, boolean)<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    when(mockMultiplexer._put(any(TableName.class), any(Put.class), anyInt(), anyBoolean())).thenCallRealMethod();<a name="line.100"></a>
-<span class="sourceLineNo">101</span><a name="line.101"></a>
-<span class="sourceLineNo">102</span>    // Return a region location<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    when(mockConnection.getRegionLocation(tableName, put.getRow(), false)).thenReturn(mockRegionLocation);<a name="line.103"></a>
-<span class="sourceLineNo">104</span>    when(mockMultiplexer.getQueue(mockRegionLocation)).thenReturn(queue);<a name="line.104"></a>
-<span class="sourceLineNo">105</span><a name="line.105"></a>
-<span class="sourceLineNo">106</span>    assertTrue("Put should have been queued", mockMultiplexer.put(tableName, put, NUM_RETRIES));<a name="line.106"></a>
-<span class="sourceLineNo">107</span><a name="line.107"></a>
-<span class="sourceLineNo">108</span>    assertEquals(1, queue.size());<a name="line.108"></a>
-<span class="sourceLineNo">109</span>    final PutStatus ps = queue.take();<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    assertEquals(put, ps.put);<a name="line.110"></a>
-<span class="sourceLineNo">111</span>    assertEquals(mockRegionInfo, ps.regionInfo);<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>  @Test public void ignoreCacheOnRetriedPut() throws Exception {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    FlushWorker mockFlushWorker = mock(FlushWorker.class);<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    ScheduledExecutorService mockExecutor = mock(ScheduledExecutorService.class);<a name="line.116"></a>
-<span class="sourceLineNo">117</span>    final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.117"></a>
-<span class="sourceLineNo">118</span>    final AtomicLong totalFailedPuts = new AtomicLong(0L);<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    final int maxRetryInQueue = 20;<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    final long delay = 100L;<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>    final PutStatus ps = new PutStatus(mockRegionInfo, put, NUM_RETRIES);<a name="line.122"></a>
-<span class="sourceLineNo">123</span><a name="line.123"></a>
-<span class="sourceLineNo">124</span>    // Call the real resubmitFailedPut(PutStatus, HRegionLocation) method<a name="line.124"></a>
-<span class="sourceLineNo">125</span>    when(mockFlushWorker.resubmitFailedPut(any(PutStatus.class), any(HRegionLocation.class))).thenCallRealMethod();<a name="line.125"></a>
-<span class="sourceLineNo">126</span>    // Succeed on the re-submit without caching<a name="line.126"></a>
-<span class="sourceLineNo">127</span>    when(mockMultiplexer._put(tableName, put, NUM_RETRIES - 1, true)).thenReturn(true);<a name="line.127"></a>
-<span class="sourceLineNo">128</span><a name="line.128"></a>
-<span class="sourceLineNo">129</span>    // Stub out the getters for resubmitFailedPut(PutStatus, HRegionLocation)<a name="line.129"></a>
-<span class="sourceLineNo">130</span>    when(mockFlushWorker.getExecutor()).thenReturn(mockExecutor);<a name="line.130"></a>
-<span class="sourceLineNo">131</span>    when(mockFlushWorker.getNextDelay(anyInt())).thenReturn(delay);<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    when(mockFlushWorker.getMultiplexer()).thenReturn(mockMultiplexer);<a name="line.132"></a>
-<span class="sourceLineNo">133</span>    when(mockFlushWorker.getRetryInQueue()).thenReturn(retryInQueue);<a name="line.133"></a>
-<span class="sourceLineNo">134</span>    when(mockFlushWorker.getMaxRetryInQueue()).thenReturn(maxRetryInQueue);<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    when(mockFlushWorker.getTotalFailedPutCount()).thenReturn(totalFailedPuts);<a name="line.135"></a>
-<span class="sourceLineNo">136</span><a name="line.136"></a>
-<span class="sourceLineNo">137</span>    // When a Runnable is scheduled, run that Runnable<a name="line.137"></a>
-<span class="sourceLineNo">138</span>    when(mockExecutor.schedule(any(Runnable.class), eq(delay), eq(TimeUnit.MILLISECONDS))).thenAnswer(<a name="line.138"></a>
-<span class="sourceLineNo">139</span>        new Answer&lt;Void&gt;() {<a name="line.139"></a>
-<span class="sourceLineNo">140</span>          @Override<a name="line.140"></a>
-<span class="sourceLineNo">141</span>          public Void answer(InvocationOnMock invocation) throws Throwable {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>            // Before we run this, should have one retry in progress.<a name="line.142"></a>
-<span class="sourceLineNo">143</span>            assertEquals(1L, retryInQueue.get());<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>            Object[] args = invocation.getArguments();<a name="line.145"></a>
-<span class="sourceLineNo">146</span>            assertEquals(3, args.length);<a name="line.146"></a>
-<span class="sourceLineNo">147</span>            assertTrue("Argument should be an instance of Runnable", args[0] instanceof Runnable);<a name="line.147"></a>
-<span class="sourceLineNo">148</span>            Runnable runnable = (Runnable) args[0];<a name="line.148"></a>
-<span class="sourceLineNo">149</span>            runnable.run();<a name="line.149"></a>
-<span class="sourceLineNo">150</span>            return null;<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><a name="line.153"></a>
-<span class="sourceLineNo">154</span>    // The put should be rescheduled<a name="line.154"></a>
-<span class="sourceLineNo">155</span>    assertTrue("Put should have been rescheduled", mockFlushWorker.resubmitFailedPut(ps, mockRegionLocation));<a name="line.155"></a>
-<span class="sourceLineNo">156</span><a name="line.156"></a>
-<span class="sourceLineNo">157</span>    verify(mockMultiplexer)._put(tableName, put, NUM_RETRIES - 1, true);<a name="line.157"></a>
-<span class="sourceLineNo">158</span>    assertEquals(0L, totalFailedPuts.get());<a name="line.158"></a>
-<span class="sourceLineNo">159</span>    // Net result should be zero (added one before rerunning, subtracted one after running).<a name="line.159"></a>
-<span class="sourceLineNo">160</span>    assertEquals(0L, retryInQueue.get());<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  }<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  @SuppressWarnings("deprecation")<a name="line.163"></a>
-<span class="sourceLineNo">164</span>  @Test public void testConnectionClosing() throws IOException {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>    doCallRealMethod().when(mockMultiplexer).close();<a name="line.165"></a>
-<span class="sourceLineNo">166</span>    // If the connection is not closed<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    when(mockConnection.isClosed()).thenReturn(false);<a name="line.167"></a>
-<span class="sourceLineNo">168</span><a name="line.168"></a>
-<span class="sourceLineNo">169</span>    mockMultiplexer.close();<a name="line.169"></a>
-<span class="sourceLineNo">170</span><a name="line.170"></a>
-<span class="sourceLineNo">171</span>    // We should close it<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    verify(mockConnection).close();<a name="line.172"></a>
-<span class="sourceLineNo">173</span>  }<a name="line.173"></a>
-<span class="sourceLineNo">174</span><a name="line.174"></a>
-<span class="sourceLineNo">175</span>  @SuppressWarnings("deprecation")<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  @Test public void testClosingAlreadyClosedConnection() throws IOException {<a name="line.176"></a>
-<span class="sourceLineNo">177</span>    doCallRealMethod().when(mockMultiplexer).close();<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    // If the connection is already closed<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    when(mockConnection.isClosed()).thenReturn(true);<a name="line.179"></a>
-<span class="sourceLineNo">180</span><a name="line.180"></a>
-<span class="sourceLineNo">181</span>    mockMultiplexer.close();<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>    // We should not close it again<a name="line.183"></a>
-<span class="sourceLineNo">184</span>    verify(mockConnection, times(0)).close();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>  }<a name="line.185"></a>
-<span class="sourceLineNo">186</span><a name="line.186"></a>
-<span class="sourceLineNo">187</span>  /**<a name="line.187"></a>
-<span class="sourceLineNo">188</span>   * @return UTF-8 byte representation for {@code str}<a name="line.188"></a>
-<span class="sourceLineNo">189</span>   */<a name="line.189"></a>
-<span class="sourceLineNo">190</span>  private static byte[] getBytes(String str) {<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    return str.getBytes(UTF_8);<a name="line.191"></a>
-<span class="sourceLineNo">192</span>  }<a name="line.192"></a>
-<span class="sourceLineNo">193</span>}<a name="line.193"></a>
+<span class="sourceLineNo">071</span>    mockMultiplexer.close();<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>    // We should not close it again<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    verify(mockConnection, times(0)).close();<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>
 
 
 


[17/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
index 3a9a7f7..d857fe6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.BucketEntryGroup.html
@@ -311,1174 +311,1177 @@
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  private IOEngine getIOEngineFromName(String ioEngineName, long capacity)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:"))<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:")) {<a name="line.306"></a>
 <span class="sourceLineNo">307</span>      return new FileIOEngine(ioEngineName.substring(5), capacity);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    else if (ioEngineName.startsWith("offheap"))<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    } else if (ioEngineName.startsWith("offheap")) {<a name="line.308"></a>
 <span class="sourceLineNo">309</span>      return new ByteBufferIOEngine(capacity, true);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    else if (ioEngineName.startsWith("heap"))<a name="line.310"></a>
+<span class="sourceLineNo">310</span>    } else if (ioEngineName.startsWith("heap")) {<a name="line.310"></a>
 <span class="sourceLineNo">311</span>      return new ByteBufferIOEngine(capacity, false);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    else<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw new IllegalArgumentException(<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * Cache the block with the specified name and buffer.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param cacheKey block's cache key<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param buf block buffer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    cacheBlock(cacheKey, buf, false, false);<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>   * Cache the block with the specified name and buffer.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @param cacheKey block's cache key<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param cachedItem block buffer<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @param inMemory if block is in-memory<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param cacheDataInL1<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final boolean cacheDataInL1) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Cache the block to ramCache<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param cacheKey block's cache key<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param cachedItem block buffer<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param inMemory if block is in-memory<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param wait if true, blocking wait when queue is full<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      boolean wait) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (!cacheEnabled) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>    /*<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    RAMQueueEntry re =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    boolean successfulAddition = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (wait) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } catch (InterruptedException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Thread.currentThread().interrupt();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      successfulAddition = bq.offer(re);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (!successfulAddition) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ramCache.remove(cacheKey);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      cacheStats.failInsert();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    } else {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.blockNumber.incrementAndGet();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Get the buffer of the block with the specified key.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param key block's cache key<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @return buffer of specified cache key, or null if not in cache<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 Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      boolean updateCacheMetrics) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (!cacheEnabled) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (re != null) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (updateCacheMetrics) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      re.access(accessCount.incrementAndGet());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return re.getData();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (bucketEntry != null) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      long start = System.nanoTime();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        lock.readLock().lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        // existence here.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          // TODO : change this area - should be removed after server cells and<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // 12295 are available<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int len = bucketEntry.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          long timeTaken = System.nanoTime() - start;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (updateCacheMetrics) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            cacheStats.ioHit(timeTaken);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            bucketEntry.refCount.incrementAndGet();<a name="line.430"></a>
+<span class="sourceLineNo">312</span>    } else if (ioEngineName.startsWith("mmap:")) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FileMmapEngine(ioEngineName.substring(5), capacity);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Cache the block with the specified name and buffer.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param cacheKey block's cache key<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param buf block buffer<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    cacheBlock(cacheKey, buf, false, false);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * Cache the block with the specified name and buffer.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param cacheKey block's cache key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param cachedItem block buffer<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param inMemory if block is in-memory<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param cacheDataInL1<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final boolean cacheDataInL1) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<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>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Cache the block to ramCache<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cacheKey block's cache key<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param cachedItem block buffer<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param inMemory if block is in-memory<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param wait if true, blocking wait when queue is full<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      boolean wait) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    if (!cacheEnabled) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    /*<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    RAMQueueEntry re =<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    boolean successfulAddition = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (wait) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      } catch (InterruptedException e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        Thread.currentThread().interrupt();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      successfulAddition = bq.offer(re);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    if (!successfulAddition) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ramCache.remove(cacheKey);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      cacheStats.failInsert();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } else {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.blockNumber.incrementAndGet();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Get the buffer of the block with the specified key.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param key block's cache key<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return buffer of specified cache key, or null if not in cache<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      boolean updateCacheMetrics) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (!cacheEnabled) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (re != null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (updateCacheMetrics) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      re.access(accessCount.incrementAndGet());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return re.getData();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (bucketEntry != null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      long start = System.nanoTime();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        lock.readLock().lock();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // existence here.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          // TODO : change this area - should be removed after server cells and<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          // 12295 are available<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          int len = bucketEntry.getLength();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          long timeTaken = System.nanoTime() - start;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          if (updateCacheMetrics) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            cacheStats.ioHit(timeTaken);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>          }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            ioErrorStartTime = -1;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          return cachedBlock;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } catch (IOException ioex) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        checkIOErrorIsTolerated();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      } finally {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        lock.readLock().unlock();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.446"></a>
+<span class="sourceLineNo">432</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>            bucketEntry.refCount.incrementAndGet();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            ioErrorStartTime = -1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          return cachedBlock;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      } catch (IOException ioex) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        checkIOErrorIsTolerated();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      } finally {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        lock.readLock().unlock();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return null;<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>  @VisibleForTesting<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (decrementBlockNumber) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      this.blockNumber.decrementAndGet();<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return evictBlock(cacheKey, true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // bucket map<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!cacheEnabled) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return false;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (bucketEntry == null) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (removedBlock != null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        return true;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      } else {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        return false;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      lock.writeLock().lock();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      lock.writeLock().unlock();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return true;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (removedBlock != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.blockNumber.decrementAndGet();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return removedBlock;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (!cacheEnabled) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return false;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    if (bucketEntry == null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (removedBlock != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        return false;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      lock.writeLock().lock();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      int refCount = bucketEntry.refCount.get();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if(refCount == 0) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        } else {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      } else {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        if(!deletedBlock) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          if (LOG.isDebugEnabled()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.533"></a>
-<span class="sourceLineNo">534</span>                + " readers. Can not be freed now");<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          if (LOG.isDebugEnabled()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.539"></a>
-<span class="sourceLineNo">540</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.540"></a>
-<span class="sourceLineNo">541</span>                + " for evicting at a later point");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          bucketEntry.markedForEvict = true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } finally {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      lock.writeLock().unlock();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /*<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  private static class StatisticsThread extends Thread {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    private final BucketCache bucketCache;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      super("BucketCacheStatsThread");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      setDaemon(true);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      this.bucketCache = bucketCache;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    @Override<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public void run() {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bucketCache.logStats();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void logStats() {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    long freeSize = totalSize - usedSize;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    long cacheSize = getRealCacheSize();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    cacheStats.reset();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public long getRealCacheSize() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return this.realCacheSize.get();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private long acceptableSize() {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>  private long singleSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private long multiSize() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        * DEFAULT_MIN_FACTOR);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private long memorySize() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        * DEFAULT_MIN_FACTOR);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * ensure there must be some blocks evicted<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param why Why we are being called<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  private void freeSpace(final String why) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // Ensure only one freeSpace progress at a time<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    try {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      freeInProgress = true;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      long bytesToFreeWithoutExtra = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      // Calculate free byte for each bucketSizeinfo<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        bytesToFreeForBucket[i] = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          if (msgBuffer != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.644"></a>
-<span class="sourceLineNo">645</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (msgBuffer != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.650"></a>
+<span class="sourceLineNo">448</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return null;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @VisibleForTesting<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (decrementBlockNumber) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      this.blockNumber.decrementAndGet();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return evictBlock(cacheKey, true);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  // bucket map<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (!cacheEnabled) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    if (bucketEntry == null) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (removedBlock != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        return true;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        return false;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      lock.writeLock().lock();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      } else {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      lock.writeLock().unlock();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    return true;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (removedBlock != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      this.blockNumber.decrementAndGet();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return removedBlock;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (!cacheEnabled) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (bucketEntry == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      if (removedBlock != null) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        return true;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        return false;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      lock.writeLock().lock();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      int refCount = bucketEntry.refCount.get();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      if(refCount == 0) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        } else {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>          return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        }<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      } else {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if(!deletedBlock) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          if (LOG.isDebugEnabled()) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                + " readers. Can not be freed now");<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          }<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          return false;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.542"></a>
+<span class="sourceLineNo">543</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.543"></a>
+<span class="sourceLineNo">544</span>                + " for evicting at a later point");<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          bucketEntry.markedForEvict = true;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      lock.writeLock().unlock();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    return true;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /*<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private static class StatisticsThread extends Thread {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    private final BucketCache bucketCache;<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      super("BucketCacheStatsThread");<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      setDaemon(true);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      this.bucketCache = bucketCache;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    public void run() {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      bucketCache.logStats();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  public void logStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    long freeSize = totalSize - usedSize;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    long cacheSize = getRealCacheSize();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.581"></a>
+<span class="sourceLineNo">582</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.590"></a>
+<span class="sourceLineNo">591</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    cacheStats.reset();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  public long getRealCacheSize() {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return this.realCacheSize.get();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  private long acceptableSize() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>  private long singleSize() {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private long multiSize() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        * DEFAULT_MIN_FACTOR);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>  private long memorySize() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        * DEFAULT_MIN_FACTOR);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * ensure there must be some blocks evicted<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * @param why Why we are being called<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   */<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  private void freeSpace(final String why) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // Ensure only one freeSpace progress at a time<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      freeInProgress = true;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      long bytesToFreeWithoutExtra = 0;<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Calculate free byte for each bucketSizeinfo<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        bytesToFreeForBucket[i] = 0;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (msgBuffer != null) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.647"></a>
+<span class="sourceLineNo">648</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
 <span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        return;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.665"></a>
+<span class="sourceLineNo">652</span>      if (msgBuffer != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span><a name="line.655"></a>
+<span class="sourceLineNo">656</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      }<a name="line.665"></a>
 <span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // Instantiate priority buckets<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          blockSize, singleSize());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          blockSize, multiSize());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          blockSize, memorySize());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      // group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          case SINGLE: {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            break;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          case MULTI: {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            break;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          case MEMORY: {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            break;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>      bucketQueue.add(bucketSingle);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      bucketQueue.add(bucketMulti);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      bucketQueue.add(bucketMemory);<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>      int remainingBuckets = 3;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      long bytesFreed = 0;<a name="line.701"></a>
+<span class="sourceLineNo">667</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>      // Instantiate priority buckets<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          blockSize, singleSize());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          blockSize, multiSize());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.675"></a>
+<span class="sourceLineNo">676</span>          blockSize, memorySize());<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // group<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          case SINGLE: {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            break;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          case MULTI: {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>            break;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>          case MEMORY: {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>            break;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>      bucketQueue.add(bucketSingle);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      bucketQueue.add(bucketMulti);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      bucketQueue.add(bucketMemory);<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>      BucketEntryGroup bucketGroup;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        long overflow = bucketGroup.overflow();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        if (overflow &gt; 0) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.707"></a>
-<span class="sourceLineNo">708</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        remainingBuckets--;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.715"></a>
-<span class="sourceLineNo">716</span>       * free space<a name="line.716"></a>
-<span class="sourceLineNo">717</span>       */<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      boolean needFreeForExtra = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          needFreeForExtra = true;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (needFreeForExtra) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        bucketQueue.clear();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        remainingBuckets = 2;<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>        bucketQueue.add(bucketSingle);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        bucketQueue.add(bucketMulti);<a name="line.734"></a>
+<span class="sourceLineNo">703</span>      int remainingBuckets = 3;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      long bytesFreed = 0;<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>      BucketEntryGroup bucketGroup;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        long overflow = bucketGroup.overflow();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        if (overflow &gt; 0) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        remainingBuckets--;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>      /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.718"></a>
+<span class="sourceLineNo">719</span>       * free space<a name="line.719"></a>
+<span class="sourceLineNo">720</span>       */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      boolean needFreeForExtra = false;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          needFreeForExtra = true;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          break;<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (needFreeForExtra) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        bucketQueue.clear();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        remainingBuckets = 2;<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>        while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          long bucketBytesToFree = (bytesToFreeWithExtra - bytesFreed) / remainingBuckets;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          remainingBuckets--;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span>      if (LOG.isDebugEnabled()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        long single = bucketSingle.totalSize();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        long multi = bucketMulti.totalSize();<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        long memory = bucketMemory.totalSize();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isDebugEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.debug("Bucket cache free space completed; " + "freed="<a name="line.748"></a>
-<span class="sourceLineNo">749</span>            + StringUtils.byteDesc(bytesFreed) + ", " + "total="<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            + StringUtils.byteDesc(totalSize) + ", " + "single="<a name="line.750"></a>
-<span class="sourceLineNo">751</span>            + StringUtils.byteDesc(single) + ", " + "multi="<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            + StringUtils.byteDesc(multi) + ", " + "memory="<a name="line.752"></a>
-<span class="sourceLineNo">753</span>            + StringUtils.byteDesc(memory));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>    } catch (Throwable t) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      LOG.warn("Failed freeing space", t);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      cacheStats.evict();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      freeInProgress = false;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      freeSpaceLock.unlock();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  // This handles flushing the RAM cache to IOEngine.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  @VisibleForTesting<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  class WriterThread extends HasThread {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    private final BlockingQueue&lt;RAMQueueEntry&gt; inputQueue;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private volatile boolean writerEnabled = true;<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    WriterThread(BlockingQueue&lt;RAMQueueEntry&gt; queue) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      this.inputQueue = queue;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Used for test<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    @VisibleForTesting<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    void disableWriter() {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      this.writerEnabled = false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>    public void run() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      List&lt;RAMQueueEntry&gt; entries = new ArrayList&lt;RAMQueueEntry&gt;();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      try {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        while (cacheEnabled &amp;&amp; writerEnabled) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          try {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>            try {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>              // Blocks<a name="line.788"></a>
-<span class="sourceLineNo">789</span>              entries = getRAMQueueEntries(inputQueue, entries);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            } catch (InterruptedException ie) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>              if (!cacheEnabled) break;<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            doDrain(entries);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          } catch (Exception ioe) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            LOG.error("WriterThread encountered error", ioe);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a 

<TRUNCATED>

[04/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-info.html b/hbase-spark/dependency-info.html
index 6f017fb..1141688 100644
--- a/hbase-spark/dependency-info.html
+++ b/hbase-spark/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/dependency-management.html b/hbase-spark/dependency-management.html
index a8a12a4..cd20fdc 100644
--- a/hbase-spark/dependency-management.html
+++ b/hbase-spark/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/distribution-management.html b/hbase-spark/distribution-management.html
index 513b993..06896ce 100644
--- a/hbase-spark/distribution-management.html
+++ b/hbase-spark/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/index.html
----------------------------------------------------------------------
diff --git a/hbase-spark/index.html b/hbase-spark/index.html
index 169d06d..39ba13c 100644
--- a/hbase-spark/index.html
+++ b/hbase-spark/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/integration.html
----------------------------------------------------------------------
diff --git a/hbase-spark/integration.html b/hbase-spark/integration.html
index 2319166..844f163 100644
--- a/hbase-spark/integration.html
+++ b/hbase-spark/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-spark/issue-tracking.html b/hbase-spark/issue-tracking.html
index 9017dbd..443e3d6 100644
--- a/hbase-spark/issue-tracking.html
+++ b/hbase-spark/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/license.html
----------------------------------------------------------------------
diff --git a/hbase-spark/license.html b/hbase-spark/license.html
index 341dabd..be1da49 100644
--- a/hbase-spark/license.html
+++ b/hbase-spark/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-spark/mail-lists.html b/hbase-spark/mail-lists.html
index e077b93..5513bb7 100644
--- a/hbase-spark/mail-lists.html
+++ b/hbase-spark/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugin-management.html b/hbase-spark/plugin-management.html
index f0d01f5..16d91e8 100644
--- a/hbase-spark/plugin-management.html
+++ b/hbase-spark/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-spark/plugins.html b/hbase-spark/plugins.html
index 5f57ef3..7b06df8 100644
--- a/hbase-spark/plugins.html
+++ b/hbase-spark/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-info.html b/hbase-spark/project-info.html
index 114175c..e78e52a 100644
--- a/hbase-spark/project-info.html
+++ b/hbase-spark/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-reports.html b/hbase-spark/project-reports.html
index f5934af..4e60f2e 100644
--- a/hbase-spark/project-reports.html
+++ b/hbase-spark/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-spark/project-summary.html b/hbase-spark/project-summary.html
index 23c0f0e..dc55af3 100644
--- a/hbase-spark/project-summary.html
+++ b/hbase-spark/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-spark/source-repository.html b/hbase-spark/source-repository.html
index fe8982b..4ff0eea 100644
--- a/hbase-spark/source-repository.html
+++ b/hbase-spark/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-spark/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-spark/team-list.html b/hbase-spark/team-list.html
index 542e196..64727e1 100644
--- a/hbase-spark/team-list.html
+++ b/hbase-spark/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Spark">Apache HBase - Spark</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/index.html
----------------------------------------------------------------------
diff --git a/index.html b/index.html
index f50eb88..488c54f 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -422,7 +422,7 @@ Apache HBase is an open-source, distributed, versioned, non-relational database
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/integration.html
----------------------------------------------------------------------
diff --git a/integration.html b/integration.html
index 14e1496..1715bde 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Continuous Integration</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/issue-tracking.html
----------------------------------------------------------------------
diff --git a/issue-tracking.html b/issue-tracking.html
index 90430a1..39af680 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Issue Tracking</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -287,7 +287,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/license.html
----------------------------------------------------------------------
diff --git a/license.html b/license.html
index d24fd51..b7b5c4a 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project License</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -490,7 +490,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/mail-lists.html
----------------------------------------------------------------------
diff --git a/mail-lists.html b/mail-lists.html
index 3e6694d..1c31557 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/metrics.html
----------------------------------------------------------------------
diff --git a/metrics.html b/metrics.html
index acbe33b..4d8e13a 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) Metrics
@@ -458,7 +458,7 @@ export HBASE_REGIONSERVER_OPTS=&quot;$HBASE_JMX_OPTS -Dcom.sun.management.jmxrem
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/modules.html
----------------------------------------------------------------------
diff --git a/modules.html b/modules.html
index cea7a47..2ebaa2b 100644
--- a/modules.html
+++ b/modules.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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Modules</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -375,7 +375,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/old_news.html
----------------------------------------------------------------------
diff --git a/old_news.html b/old_news.html
index 76c245b..17837b0 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Old Apache HBase (TM) News
@@ -413,7 +413,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/plugin-management.html
----------------------------------------------------------------------
diff --git a/plugin-management.html b/plugin-management.html
index eb6fb58..b40d920 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -423,7 +423,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/plugins.html
----------------------------------------------------------------------
diff --git a/plugins.html b/plugins.html
index 314c61d..89e1400 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Build Plugins</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -366,7 +366,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/poweredbyhbase.html
----------------------------------------------------------------------
diff --git a/poweredbyhbase.html b/poweredbyhbase.html
index 8a860eb..ff14efc 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -768,7 +768,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/project-info.html
----------------------------------------------------------------------
diff --git a/project-info.html b/project-info.html
index c1ed7fd..991de9a 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -340,7 +340,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/project-reports.html
----------------------------------------------------------------------
diff --git a/project-reports.html b/project-reports.html
index c5394f8..22d0d3e 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -310,7 +310,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/project-summary.html
----------------------------------------------------------------------
diff --git a/project-summary.html b/project-summary.html
index dec2703..271bee7 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -330,7 +330,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/pseudo-distributed.html
----------------------------------------------------------------------
diff --git a/pseudo-distributed.html b/pseudo-distributed.html
index eaf0c0d..bb4997f 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
 Running Apache HBase (TM) in pseudo-distributed mode
@@ -307,7 +307,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/replication.html
----------------------------------------------------------------------
diff --git a/replication.html b/replication.html
index c86afa1..c78c5a2 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Apache HBase (TM) Replication
@@ -302,7 +302,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/resources.html
----------------------------------------------------------------------
diff --git a/resources.html b/resources.html
index 40bedf2..90cef41 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -324,7 +324,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/source-repository.html
----------------------------------------------------------------------
diff --git a/source-repository.html b/source-repository.html
index 26f5f73..2522ce6 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Source Repository</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -298,7 +298,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/sponsors.html
----------------------------------------------------------------------
diff --git a/sponsors.html b/sponsors.html
index 48c5959..f430cc5 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -332,7 +332,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/supportingprojects.html
----------------------------------------------------------------------
diff --git a/supportingprojects.html b/supportingprojects.html
index 11c1578..d5807c7 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <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" />
@@ -519,7 +519,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/team-list.html
----------------------------------------------------------------------
diff --git a/team-list.html b/team-list.html
index e516db6..3569497 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Team list</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -785,7 +785,7 @@ window.onLoad = init();
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/allclasses-frame.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-frame.html b/testdevapidocs/allclasses-frame.html
index a3978f5..4b93505 100644
--- a/testdevapidocs/allclasses-frame.html
+++ b/testdevapidocs/allclasses-frame.html
@@ -759,6 +759,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions" target="classFrame">TestFIFOCompactionPolicy</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestFileIOEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/io/TestFileLink.html" title="class in org.apache.hadoop.hbase.io" target="classFrame">TestFileLink</a></li>
+<li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket" target="classFrame">TestFileMmapEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestFilter.OldTestFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html" title="class in org.apache.hadoop.hbase.filter" target="classFrame">TestFilter.SlowScanFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/allclasses-noframe.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/allclasses-noframe.html b/testdevapidocs/allclasses-noframe.html
index 4de184e..5b7ef83 100644
--- a/testdevapidocs/allclasses-noframe.html
+++ b/testdevapidocs/allclasses-noframe.html
@@ -759,6 +759,7 @@
 <li><a href="org/apache/hadoop/hbase/regionserver/compactions/TestFIFOCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">TestFIFOCompactionPolicy</a></li>
 <li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestFileIOEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestFileIOEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/io/TestFileLink.html" title="class in org.apache.hadoop.hbase.io">TestFileLink</a></li>
+<li><a href="org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestFileMmapEngine</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestFilter.html" title="class in org.apache.hadoop.hbase.filter">TestFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestFilter.OldTestFilter.html" title="class in org.apache.hadoop.hbase.filter">TestFilter.OldTestFilter</a></li>
 <li><a href="org/apache/hadoop/hbase/filter/TestFilter.SlowScanFilter.html" title="class in org.apache.hadoop.hbase.filter">TestFilter.SlowScanFilter</a></li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/constant-values.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/constant-values.html b/testdevapidocs/constant-values.html
index 0c6e984..4f3bec3 100644
--- a/testdevapidocs/constant-values.html
+++ b/testdevapidocs/constant-values.html
@@ -2837,25 +2837,6 @@
 </li>
 <li class="blockList">
 <table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
-<caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></span><span class="tabEnd">&nbsp;</span></caption>
-<tr>
-<th class="colFirst" scope="col">Modifier and Type</th>
-<th scope="col">Constant Field</th>
-<th class="colLast" scope="col">Value</th>
-</tr>
-<tbody>
-<tr class="altColor">
-<td class="colFirst"><a name="org.apache.hadoop.hbase.client.TestHTableMultiplexerViaMocks.NUM_RETRIES">
-<!--   -->
-</a><code>private&nbsp;static&nbsp;final&nbsp;int</code></td>
-<td><code><a href="org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#NUM_RETRIES">NUM_RETRIES</a></code></td>
-<td class="colLast"><code>31</code></td>
-</tr>
-</tbody>
-</table>
-</li>
-<li class="blockList">
-<table border="0" cellpadding="3" cellspacing="0" summary="Constant Field Values table, listing constant fields, and values">
 <caption><span>org.apache.hadoop.hbase.client.<a href="org/apache/hadoop/hbase/client/TestLeaseRenewal.html" title="class in org.apache.hadoop.hbase.client">TestLeaseRenewal</a></span><span class="tabEnd">&nbsp;</span></caption>
 <tr>
 <th class="colFirst" scope="col">Modifier and Type</th>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/index-all.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/index-all.html b/testdevapidocs/index-all.html
index f1501cb..b8fc361 100644
--- a/testdevapidocs/index-all.html
+++ b/testdevapidocs/index-all.html
@@ -9691,8 +9691,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html#getBulkLoadWALEdit()">getBulkLoadWALEdit()</a></span> - Method in class org.apache.hadoop.hbase.replication.regionserver.<a href="./org/apache/hadoop/hbase/replication/regionserver/TestReplicationSourceManager.html" title="class in org.apache.hadoop.hbase.replication.regionserver">TestReplicationSourceManager</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#getBytes(java.lang.String)">getBytes(String)</a></span> - Static method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#getCaching()">getCaching()</a></span> - Method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/ClassTestFinder.html#getCategoryAnnotations(java.lang.Class)">getCategoryAnnotations(Class&lt;?&gt;)</a></span> - Static method in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/ClassTestFinder.html" title="class in org.apache.hadoop.hbase">ClassTestFinder</a></dt>
@@ -13150,8 +13148,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestIdReadWriteLock.html#idOwner">idOwner</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestIdReadWriteLock.html" title="class in org.apache.hadoop.hbase.util">TestIdReadWriteLock</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#ignoreCacheOnRetriedPut()">ignoreCacheOnRetriedPut()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/LoadTestTool.html#ignoreConflicts">ignoreConflicts</a></span> - Variable in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/LoadTestTool.html" title="class in org.apache.hadoop.hbase.util">LoadTestTool</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.html#ignoredFamily">ignoredFamily</a></span> - Variable in class org.apache.hadoop.hbase.coprocessor.<a href="./org/apache/hadoop/hbase/coprocessor/SampleRegionWALObserver.html" title="class in org.apache.hadoop.hbase.coprocessor">SampleRegionWALObserver</a></dt>
@@ -17547,10 +17543,6 @@
 <dd>
 <div class="block">Creates mock of region with given name and size.</div>
 </dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#mockRegionInfo">mockRegionInfo</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#mockRegionLocation">mockRegionLocation</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html#mockRegionLocator(java.lang.String...)">mockRegionLocator(String...)</a></span> - Method in class org.apache.hadoop.hbase.util.<a href="./org/apache/hadoop/hbase/util/TestRegionSizeCalculator.html" title="class in org.apache.hadoop.hbase.util">TestRegionSizeCalculator</a></dt>
 <dd>
 <div class="block">Makes some table with given region names.</div>
@@ -18432,8 +18424,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/rest/TestScannerResource.html#NONEXISTENT_TABLE">NONEXISTENT_TABLE</a></span> - Static variable in class org.apache.hadoop.hbase.rest.<a href="./org/apache/hadoop/hbase/rest/TestScannerResource.html" title="class in org.apache.hadoop.hbase.rest">TestScannerResource</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#nonNullLocationQueuesPut()">nonNullLocationQueuesPut()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html#noOfTags">noOfTags</a></span> - Variable in class org.apache.hadoop.hbase.<a href="./org/apache/hadoop/hbase/PerformanceEvaluation.TestOptions.html" title="class in org.apache.hadoop.hbase">PerformanceEvaluation.TestOptions</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/rest/PerformanceEvaluation.html#noOfTags">noOfTags</a></span> - Variable in class org.apache.hadoop.hbase.rest.<a href="./org/apache/hadoop/hbase/rest/PerformanceEvaluation.html" title="class in org.apache.hadoop.hbase.rest">PerformanceEvaluation</a></dt>
@@ -18660,8 +18650,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.html#NUM_REPLICA_COUNT_KEY">NUM_REPLICA_COUNT_KEY</a></span> - Static variable in class org.apache.hadoop.hbase.mapreduce.<a href="./org/apache/hadoop/hbase/mapreduce/IntegrationTestBulkLoad.html" title="class in org.apache.hadoop.hbase.mapreduce">IntegrationTestBulkLoad</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#NUM_RETRIES">NUM_RETRIES</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestSizeFailures.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/encoding/TestEncodedSeekers.html#NUM_ROWS">NUM_ROWS</a></span> - Static variable in class org.apache.hadoop.hbase.io.encoding.<a href="./org/apache/hadoop/hbase/io/encoding/TestEncodedSeekers.html" title="class in org.apache.hadoop.hbase.io.encoding">TestEncodedSeekers</a></dt>
@@ -21553,8 +21541,6 @@
 <dd>
 <div class="block"><span class="strong">Deprecated.</span></div>
 &nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#put">put</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html#put(org.apache.hadoop.hbase.client.Table,%20byte[],%20java.lang.Integer[],%20java.lang.Integer[],%20java.lang.Long[])">put(Table, byte[], Integer[], Integer[], Long[])</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestMultipleTimestamps.html" title="class in org.apache.hadoop.hbase.client">TestMultipleTimestamps</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestPutDotHas.html#put">put</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestPutDotHas.html" title="class in org.apache.hadoop.hbase.client">TestPutDotHas</a></dt>
@@ -28923,8 +28909,6 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestCloneSnapshotFromClient.html#tableName">tableName</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestCloneSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestCloneSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#tableName">tableName</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.html#tableName">tableName</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestRestoreSnapshotFromClient.html" title="class in org.apache.hadoop.hbase.client">TestRestoreSnapshotFromClient</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestSizeFailures.html#TABLENAME">TABLENAME</a></span> - Static variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestSizeFailures.html" title="class in org.apache.hadoop.hbase.client">TestSizeFailures</a></dt>
@@ -34952,6 +34936,14 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/TestFileLink.html#TestFileLink()">TestFileLink()</a></span> - Constructor for class org.apache.hadoop.hbase.io.<a href="./org/apache/hadoop/hbase/io/TestFileLink.html" title="class in org.apache.hadoop.hbase.io">TestFileLink</a></dt>
 <dd>&nbsp;</dd>
+<dt><a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket"><span class="strong">TestFileMmapEngine</span></a> - Class in <a href="./org/apache/hadoop/hbase/io/hfile/bucket/package-summary.html">org.apache.hadoop.hbase.io.hfile.bucket</a></dt>
+<dd>
+<div class="block">Basic test for <code>FileMmapEngine</code></div>
+</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html#TestFileMmapEngine()">TestFileMmapEngine()</a></span> - Constructor for class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestFileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html#testFileMmapEngine()">testFileMmapEngine()</a></span> - Method in class org.apache.hadoop.hbase.io.hfile.bucket.<a href="./org/apache/hadoop/hbase/io/hfile/bucket/TestFileMmapEngine.html" title="class in org.apache.hadoop.hbase.io.hfile.bucket">TestFileMmapEngine</a></dt>
+<dd>&nbsp;</dd>
 <dt><a href="./org/apache/hadoop/hbase/filter/TestFilter.html" title="class in org.apache.hadoop.hbase.filter"><span class="strong">TestFilter</span></a> - Class in <a href="./org/apache/hadoop/hbase/filter/package-summary.html">org.apache.hadoop.hbase.filter</a></dt>
 <dd>
 <div class="block">Test filters at the HRegion doorstep.</div>
@@ -36873,6 +36865,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/rest/TestScannersWithFilters.html#testInclusiveStopFilter()">testInclusiveStopFilter()</a></span> - Method in class org.apache.hadoop.hbase.rest.<a href="./org/apache/hadoop/hbase/rest/TestScannersWithFilters.html" title="class in org.apache.hadoop.hbase.rest">TestScannersWithFilters</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/TestFilter.html#testInclusiveStopFilterWithReverseScan()">testInclusiveStopFilterWithReverseScan()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TestFilter.html" title="class in org.apache.hadoop.hbase.filter">TestFilter</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html#testIncompleteMetaTableReplicaInformation()">testIncompleteMetaTableReplicaInformation()</a></span> - Method in class org.apache.hadoop.hbase.master.<a href="./org/apache/hadoop/hbase/master/TestMasterOperationsForRegionReplicas.html" title="class in org.apache.hadoop.hbase.master">TestMasterOperationsForRegionReplicas</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/filter/TestParseFilter.html#testIncorrectComparatorType()">testIncorrectComparatorType()</a></span> - Method in class org.apache.hadoop.hbase.filter.<a href="./org/apache/hadoop/hbase/filter/TestParseFilter.html" title="class in org.apache.hadoop.hbase.filter">TestParseFilter</a></dt>
@@ -39768,6 +39762,8 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#testOnRegionChange()">testOnRegionChange()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerFlushCache</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#testOnRegionMove()">testOnRegionMove()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerFlushCache</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestProcedureFuture.html#testOnServerWithNoProcedureSupport()">testOnServerWithNoProcedureSupport()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestProcedureFuture.html" title="class in org.apache.hadoop.hbase.client">TestProcedureFuture</a></dt>
 <dd>
 <div class="block">When a new client with procedure support tries to ask an old-master without proc-support
@@ -47473,8 +47469,6 @@
 </dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/io/hfile/TestHFileSeek.html#USE_PREAD">USE_PREAD</a></span> - Static variable in class org.apache.hadoop.hbase.io.hfile.<a href="./org/apache/hadoop/hbase/io/hfile/TestHFileSeek.html" title="class in org.apache.hadoop.hbase.io.hfile">TestHFileSeek</a></dt>
 <dd>&nbsp;</dd>
-<dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html#useCacheOnInitialPut()">useCacheOnInitialPut()</a></span> - Method in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestHTableMultiplexerViaMocks.html" title="class in org.apache.hadoop.hbase.client">TestHTableMultiplexerViaMocks</a></dt>
-<dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/client/TestAsyncProcess.MyConnectionImpl2.html#usedRegions">usedRegions</a></span> - Variable in class org.apache.hadoop.hbase.client.<a href="./org/apache/hadoop/hbase/client/TestAsyncProcess.MyConnectionImpl2.html" title="class in org.apache.hadoop.hbase.client">TestAsyncProcess.MyConnectionImpl2</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="strong"><a href="./org/apache/hadoop/hbase/regionserver/TestTags.html#useFilter">useFilter</a></span> - Static variable in class org.apache.hadoop.hbase.regionserver.<a href="./org/apache/hadoop/hbase/regionserver/TestTags.html" title="class in org.apache.hadoop.hbase.regionserver">TestTags</a></dt>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
----------------------------------------------------------------------
diff --git a/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html b/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
index 9555c45..50cc830 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html
@@ -95,7 +95,7 @@
 <li class="blockList">
 <hr>
 <br>
-<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.40">TestHTableMultiplexerFlushCache</a>
+<pre>public class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.45">TestHTableMultiplexerFlushCache</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -203,6 +203,10 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#testOnRegionChange()">testOnRegionChange</a></strong>()</code>&nbsp;</td>
 </tr>
+<tr class="altColor">
+<td class="colFirst"><code>void</code></td>
+<td class="colLast"><code><strong><a href="../../../../../org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#testOnRegionMove()">testOnRegionMove</a></strong>()</code>&nbsp;</td>
+</tr>
 </table>
 <ul class="blockList">
 <li class="blockList"><a name="methods_inherited_from_class_java.lang.Object">
@@ -231,7 +235,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.41">LOG</a></pre>
+<pre>private static final&nbsp;org.apache.commons.logging.Log <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.46">LOG</a></pre>
 </li>
 </ul>
 <a name="TEST_UTIL">
@@ -240,7 +244,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>TEST_UTIL</h4>
-<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.42">TEST_UTIL</a></pre>
+<pre>private static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/HBaseTestingUtility.html" title="class in org.apache.hadoop.hbase">HBaseTestingUtility</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.47">TEST_UTIL</a></pre>
 </li>
 </ul>
 <a name="FAMILY">
@@ -249,7 +253,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>FAMILY</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.43">FAMILY</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.48">FAMILY</a></pre>
 </li>
 </ul>
 <a name="QUALIFIER1">
@@ -258,7 +262,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIER1</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.44">QUALIFIER1</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.49">QUALIFIER1</a></pre>
 </li>
 </ul>
 <a name="QUALIFIER2">
@@ -267,7 +271,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>QUALIFIER2</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.45">QUALIFIER2</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.50">QUALIFIER2</a></pre>
 </li>
 </ul>
 <a name="VALUE1">
@@ -276,7 +280,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>VALUE1</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.46">VALUE1</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.51">VALUE1</a></pre>
 </li>
 </ul>
 <a name="VALUE2">
@@ -285,7 +289,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>VALUE2</h4>
-<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.47">VALUE2</a></pre>
+<pre>private static&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.52">VALUE2</a></pre>
 </li>
 </ul>
 <a name="SLAVES">
@@ -294,7 +298,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>SLAVES</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.48">SLAVES</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.53">SLAVES</a></pre>
 </li>
 </ul>
 <a name="PER_REGIONSERVER_QUEUE_SIZE">
@@ -303,7 +307,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>PER_REGIONSERVER_QUEUE_SIZE</h4>
-<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.49">PER_REGIONSERVER_QUEUE_SIZE</a></pre>
+<pre>private static&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.54">PER_REGIONSERVER_QUEUE_SIZE</a></pre>
 </li>
 </ul>
 </li>
@@ -320,7 +324,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TestHTableMultiplexerFlushCache</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.40">TestHTableMultiplexerFlushCache</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.45">TestHTableMultiplexerFlushCache</a>()</pre>
 </li>
 </ul>
 </li>
@@ -337,7 +341,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>setUpBeforeClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.55">setUpBeforeClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.60">setUpBeforeClass</a>()
                              throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -349,7 +353,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>tearDownAfterClass</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.63">tearDownAfterClass</a>()
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.68">tearDownAfterClass</a>()
                                throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></code></dd></dl>
@@ -361,7 +365,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>checkExistence</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.67">checkExistence</a>(org.apache.hadoop.hbase.client.Table&nbsp;htable,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.72">checkExistence</a>(org.apache.hadoop.hbase.client.Table&nbsp;htable,
                   byte[]&nbsp;row,
                   byte[]&nbsp;family,
                   byte[]&nbsp;quality,
@@ -374,15 +378,27 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <a name="testOnRegionChange()">
 <!--   -->
 </a>
-<ul class="blockListLast">
+<ul class="blockList">
 <li class="blockList">
 <h4>testOnRegionChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.86">testOnRegionChange</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.91">testOnRegionChange</a>()
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/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="testOnRegionMove()">
+<!--   -->
+</a>
+<ul class="blockListLast">
+<li class="blockList">
+<h4>testOnRegionMove</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/TestHTableMultiplexerFlushCache.html#line.125">testOnRegionMove</a>()
+                      throws <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
+<dl><dt><span class="strong">Throws:</span></dt>
+<dd><code><a href="http://docs.oracle.com/javase/7/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>


[25/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.ServerErrorTracker createServerErrorTracker() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    return new ConnectionImplementation.ServerErrorTracker(<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>        this.server

<TRUNCATED>

[50/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apache_hbase_reference_guide.pdf
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 5b9dfff..03b536a 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.6, based on Prawn 1.2.1)
 /Producer (Apache HBase Team)
-/CreationDate (D:20160222154025+00'00')
-/ModDate (D:20160222154025+00'00')
+/CreationDate (D:20160223152349+00'00')
+/ModDate (D:20160223152349+00'00')
 >>
 endobj
 2 0 obj
 << /Type /Catalog
 /Pages 3 0 R
 /Names 25 0 R
-/Outlines 3935 0 R
-/PageLabels 4137 0 R
+/Outlines 3940 0 R
+/PageLabels 4142 0 R
 /PageMode /UseOutlines
 /ViewerPreferences [/FitWindow]
 >>
@@ -22,7 +22,7 @@ endobj
 3 0 obj
 << /Type /Pages
 /Count 648
-/Kids [7 0 R 13 0 R 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 39 0 R 43 0 R 47 0 R 58 0 R 62 0 R 64 0 R 66 0 R 68 0 R 75 0 R 78 0 R 80 0 R 85 0 R 88 0 R 90 0 R 92 0 R 101 0 R 106 0 R 111 0 R 113 0 R 129 0 R 134 0 R 141 0 R 144 0 R 147 0 R 156 0 R 167 0 R 183 0 R 187 0 R 191 0 R 193 0 R 197 0 R 203 0 R 205 0 R 207 0 R 209 0 R 211 0 R 214 0 R 220 0 R 222 0 R 224 0 R 226 0 R 228 0 R 230 0 R 232 0 R 234 0 R 238 0 R 242 0 R 244 0 R 246 0 R 248 0 R 250 0 R 252 0 R 254 0 R 256 0 R 259 0 R 264 0 R 266 0 R 268 0 R 270 0 R 275 0 R 279 0 R 282 0 R 287 0 R 290 0 R 294 0 R 309 0 R 320 0 R 327 0 R 337 0 R 348 0 R 353 0 R 355 0 R 357 0 R 367 0 R 372 0 R 375 0 R 380 0 R 384 0 R 395 0 R 407 0 R 422 0 R 428 0 R 430 0 R 432 0 R 439 0 R 450 0 R 461 0 R 472 0 R 475 0 R 478 0 R 482 0 R 486 0 R 489 0 R 492 0 R 494 0 R 497 0 R 501 0 R 503 0 R 507 0 R 516 0 R 518 0 R 524 0 R 526 0 R 530 0 R 538 0 R 540 0 R 543 0 R 546 0 R 549 0 R 552 0 R 567 0 R 574 0 R 581 0 R 592 0 R 599 0 R 607 0 R 615 0 R 618 0 R 622 0 R 625 0
  R 637 0 R 645 0 R 651 0 R 656 0 R 660 0 R 662 0 R 677 0 R 689 0 R 695 0 R 702 0 R 705 0 R 713 0 R 721 0 R 726 0 R 731 0 R 736 0 R 738 0 R 740 0 R 742 0 R 750 0 R 759 0 R 763 0 R 770 0 R 778 0 R 784 0 R 788 0 R 795 0 R 799 0 R 804 0 R 812 0 R 814 0 R 818 0 R 829 0 R 834 0 R 836 0 R 839 0 R 843 0 R 849 0 R 852 0 R 864 0 R 868 0 R 873 0 R 881 0 R 886 0 R 890 0 R 894 0 R 896 0 R 899 0 R 901 0 R 905 0 R 907 0 R 910 0 R 915 0 R 919 0 R 924 0 R 928 0 R 935 0 R 939 0 R 944 0 R 957 0 R 962 0 R 966 0 R 971 0 R 973 0 R 982 0 R 985 0 R 990 0 R 993 0 R 1002 0 R 1005 0 R 1011 0 R 1018 0 R 1021 0 R 1023 0 R 1032 0 R 1034 0 R 1036 0 R 1039 0 R 1041 0 R 1043 0 R 1045 0 R 1047 0 R 1049 0 R 1052 0 R 1055 0 R 1060 0 R 1063 0 R 1065 0 R 1067 0 R 1069 0 R 1074 0 R 1083 0 R 1086 0 R 1088 0 R 1090 0 R 1095 0 R 1097 0 R 1100 0 R 1102 0 R 1104 0 R 1106 0 R 1109 0 R 1115 0 R 1120 0 R 1127 0 R 1132 0 R 1146 0 R 1157 0 R 1161 0 R 1174 0 R 1183 0 R 1199 0 R 1203 0 R 1213 0 R 1226 0 R 1229 0 R 1241 0 R 1250 0 R 
 1258 0 R 1262 0 R 1271 0 R 1276 0 R 1280 0 R 1286 0 R 1292 0 R 1299 0 R 1307 0 R 1309 0 R 1320 0 R 1322 0 R 1327 0 R 1331 0 R 1336 0 R 1346 0 R 1352 0 R 1358 0 R 1360 0 R 1362 0 R 1374 0 R 1381 0 R 1391 0 R 1396 0 R 1410 0 R 1418 0 R 1422 0 R 1431 0 R 1439 0 R 1447 0 R 1453 0 R 1457 0 R 1460 0 R 1462 0 R 1471 0 R 1474 0 R 1479 0 R 1485 0 R 1488 0 R 1491 0 R 1493 0 R 1502 0 R 1509 0 R 1515 0 R 1520 0 R 1524 0 R 1527 0 R 1533 0 R 1538 0 R 1543 0 R 1545 0 R 1547 0 R 1550 0 R 1552 0 R 1561 0 R 1564 0 R 1570 0 R 1577 0 R 1581 0 R 1586 0 R 1589 0 R 1591 0 R 1596 0 R 1599 0 R 1601 0 R 1603 0 R 1605 0 R 1612 0 R 1623 0 R 1628 0 R 1635 0 R 1638 0 R 1640 0 R 1642 0 R 1644 0 R 1647 0 R 1649 0 R 1651 0 R 1653 0 R 1657 0 R 1661 0 R 1670 0 R 1672 0 R 1674 0 R 1676 0 R 1678 0 R 1684 0 R 1686 0 R 1691 0 R 1693 0 R 1695 0 R 1702 0 R 1707 0 R 1712 0 R 1716 0 R 1719 0 R 1722 0 R 1726 0 R 1728 0 R 1731 0 R 1733 0 R 1735 0 R 1737 0 R 1741 0 R 1743 0 R 1747 0 R 1749 0 R 1751 0 R 1753 0 R 1755 0 R 1760 0 
 R 1762 0 R 1764 0 R 1772 0 R 1782 0 R 1785 0 R 1800 0 R 1815 0 R 1819 0 R 1824 0 R 1827 0 R 1830 0 R 1835 0 R 1837 0 R 1844 0 R 1846 0 R 1849 0 R 1851 0 R 1853 0 R 1855 0 R 1857 0 R 1861 0 R 1863 0 R 1872 0 R 1879 0 R 1885 0 R 1897 0 R 1911 0 R 1922 0 R 1942 0 R 1944 0 R 1946 0 R 1950 0 R 1967 0 R 1974 0 R 1981 0 R 1990 0 R 1995 0 R 2005 0 R 2015 0 R 2020 0 R 2029 0 R 2042 0 R 2059 0 R 2069 0 R 2072 0 R 2081 0 R 2096 0 R 2103 0 R 2106 0 R 2111 0 R 2116 0 R 2126 0 R 2134 0 R 2137 0 R 2139 0 R 2143 0 R 2156 0 R 2164 0 R 2170 0 R 2174 0 R 2177 0 R 2179 0 R 2181 0 R 2183 0 R 2185 0 R 2190 0 R 2192 0 R 2202 0 R 2212 0 R 2219 0 R 2231 0 R 2236 0 R 2240 0 R 2253 0 R 2260 0 R 2266 0 R 2268 0 R 2279 0 R 2286 0 R 2297 0 R 2301 0 R 2310 0 R 2316 0 R 2326 0 R 2334 0 R 2342 0 R 2348 0 R 2353 0 R 2357 0 R 2359 0 R 2366 0 R 2370 0 R 2374 0 R 2380 0 R 2387 0 R 2392 0 R 2396 0 R 2406 0 R 2411 0 R 2416 0 R 2429 0 R 2436 0 R 2440 0 R 2445 0 R 2452 0 R 2456 0 R 2461 0 R 2469 0 R 2475 0 R 2477 0 R 2484 
 0 R 2491 0 R 2498 0 R 2503 0 R 2511 0 R 2519 0 R 2521 0 R 2530 0 R 2536 0 R 2539 0 R 2549 0 R 2553 0 R 2558 0 R 2560 0 R 2569 0 R 2573 0 R 2577 0 R 2579 0 R 2581 0 R 2590 0 R 2596 0 R 2603 0 R 2605 0 R 2611 0 R 2615 0 R 2617 0 R 2624 0 R 2627 0 R 2632 0 R 2637 0 R 2641 0 R 2643 0 R 2648 0 R 2651 0 R 2660 0 R 2662 0 R 2665 0 R 2668 0 R 2670 0 R 2683 0 R 2688 0 R 2693 0 R 2699 0 R 2704 0 R 2719 0 R 2733 0 R 2737 0 R 2752 0 R 2758 0 R 2762 0 R 2778 0 R 2780 0 R 2787 0 R 2796 0 R 2800 0 R 2807 0 R 2814 0 R 2824 0 R 2831 0 R 2838 0 R 2843 0 R 2848 0 R 2850 0 R 2855 0 R 2858 0 R 2864 0 R 2872 0 R 2880 0 R 2886 0 R 2891 0 R 2900 0 R 2908 0 R 2914 0 R 2922 0 R 2927 0 R 2931 0 R 2938 0 R 2942 0 R 2947 0 R 2955 0 R 2957 0 R 2959 0 R 2965 0 R 2967 0 R 2977 0 R 2983 0 R 2988 0 R 2994 0 R 3004 0 R 3011 0 R 3025 0 R 3030 0 R 3041 0 R 3053 0 R 3060 0 R 3062 0 R 3064 0 R 3069 0 R 3086 0 R 3091 0 R 3095 0 R 3098 0 R 3103 0 R 3105 0 R 3109 0 R 3111 0 R 3115 0 R 3119 0 R 3123 0 R 3128 0 R 3135 0 R 314
 1 0 R 3145 0 R 3148 0 R 3150 0 R 3153 0 R 3156 0 R 3160 0 R 3168 0 R 3177 0 R 3181 0 R 3186 0 R 3193 0 R 3195 0 R 3204 0 R 3209 0 R 3213 0 R 3219 0 R 3224 0 R 3228 0 R 3233 0 R 3237 0 R 3248 0 R 3261 0 R 3280 0 R 3286 0 R 3289 0 R 3292 0 R 3297 0 R 3302 0 R 3307 0 R 3309 0 R 3311 0 R 3313 0 R 3315 0 R 3317 0 R 3326 0 R 3330 0 R 3338 0 R 3341 0 R 3343 0 R 3350 0 R 3357 0 R 3362 0 R 3365 0 R 3367 0 R 3369 0 R 3371 0 R 3374 0 R 3381 0 R 3388 0 R 3398 0 R 3403 0 R 3406 0 R 3409 0 R 3413 0 R 3417 0 R 3421 0 R 3436 0 R 3440 0 R 3463 0 R 3467 0 R 3471 0 R 3479 0 R 3487 0 R 3496 0 R 3498 0 R 3501 0 R 3504 0 R 3520 0 R 3526 0 R 3533 0 R]
+/Kids [7 0 R 13 0 R 15 0 R 17 0 R 19 0 R 21 0 R 23 0 R 39 0 R 43 0 R 47 0 R 58 0 R 62 0 R 64 0 R 66 0 R 68 0 R 75 0 R 78 0 R 80 0 R 85 0 R 88 0 R 90 0 R 92 0 R 101 0 R 107 0 R 112 0 R 114 0 R 130 0 R 135 0 R 142 0 R 145 0 R 148 0 R 157 0 R 168 0 R 184 0 R 188 0 R 192 0 R 194 0 R 198 0 R 204 0 R 206 0 R 208 0 R 210 0 R 212 0 R 215 0 R 221 0 R 223 0 R 225 0 R 227 0 R 229 0 R 231 0 R 233 0 R 235 0 R 239 0 R 243 0 R 245 0 R 247 0 R 249 0 R 251 0 R 253 0 R 255 0 R 257 0 R 260 0 R 265 0 R 267 0 R 269 0 R 271 0 R 276 0 R 280 0 R 283 0 R 288 0 R 291 0 R 295 0 R 310 0 R 321 0 R 328 0 R 338 0 R 349 0 R 354 0 R 356 0 R 358 0 R 369 0 R 374 0 R 377 0 R 382 0 R 386 0 R 397 0 R 409 0 R 424 0 R 430 0 R 432 0 R 434 0 R 441 0 R 452 0 R 463 0 R 474 0 R 477 0 R 480 0 R 484 0 R 488 0 R 491 0 R 494 0 R 496 0 R 499 0 R 503 0 R 505 0 R 509 0 R 518 0 R 520 0 R 526 0 R 528 0 R 532 0 R 540 0 R 542 0 R 545 0 R 548 0 R 551 0 R 554 0 R 569 0 R 576 0 R 583 0 R 594 0 R 601 0 R 609 0 R 617 0 R 620 0 R 624 0 R 627 0
  R 639 0 R 647 0 R 653 0 R 658 0 R 662 0 R 664 0 R 679 0 R 691 0 R 697 0 R 704 0 R 707 0 R 715 0 R 723 0 R 728 0 R 733 0 R 738 0 R 740 0 R 742 0 R 744 0 R 752 0 R 761 0 R 765 0 R 772 0 R 780 0 R 786 0 R 790 0 R 797 0 R 801 0 R 806 0 R 814 0 R 816 0 R 820 0 R 831 0 R 836 0 R 838 0 R 841 0 R 845 0 R 851 0 R 854 0 R 866 0 R 870 0 R 875 0 R 883 0 R 888 0 R 892 0 R 896 0 R 898 0 R 901 0 R 903 0 R 907 0 R 909 0 R 912 0 R 917 0 R 921 0 R 926 0 R 930 0 R 937 0 R 941 0 R 946 0 R 959 0 R 964 0 R 968 0 R 973 0 R 975 0 R 984 0 R 987 0 R 992 0 R 995 0 R 1004 0 R 1007 0 R 1013 0 R 1020 0 R 1023 0 R 1025 0 R 1034 0 R 1036 0 R 1038 0 R 1041 0 R 1043 0 R 1045 0 R 1047 0 R 1049 0 R 1051 0 R 1054 0 R 1057 0 R 1062 0 R 1065 0 R 1067 0 R 1069 0 R 1071 0 R 1076 0 R 1085 0 R 1088 0 R 1090 0 R 1092 0 R 1097 0 R 1099 0 R 1102 0 R 1104 0 R 1106 0 R 1108 0 R 1111 0 R 1117 0 R 1122 0 R 1129 0 R 1134 0 R 1148 0 R 1159 0 R 1163 0 R 1176 0 R 1185 0 R 1201 0 R 1205 0 R 1215 0 R 1228 0 R 1231 0 R 1243 0 R 1252 0 R 
 1260 0 R 1264 0 R 1273 0 R 1278 0 R 1282 0 R 1288 0 R 1294 0 R 1301 0 R 1309 0 R 1311 0 R 1322 0 R 1324 0 R 1329 0 R 1333 0 R 1338 0 R 1348 0 R 1354 0 R 1360 0 R 1362 0 R 1364 0 R 1377 0 R 1384 0 R 1393 0 R 1399 0 R 1413 0 R 1421 0 R 1425 0 R 1434 0 R 1442 0 R 1450 0 R 1456 0 R 1460 0 R 1463 0 R 1465 0 R 1474 0 R 1477 0 R 1483 0 R 1489 0 R 1492 0 R 1495 0 R 1497 0 R 1505 0 R 1512 0 R 1518 0 R 1523 0 R 1527 0 R 1530 0 R 1536 0 R 1541 0 R 1546 0 R 1548 0 R 1550 0 R 1553 0 R 1555 0 R 1564 0 R 1567 0 R 1573 0 R 1580 0 R 1584 0 R 1589 0 R 1592 0 R 1594 0 R 1599 0 R 1602 0 R 1604 0 R 1606 0 R 1608 0 R 1615 0 R 1625 0 R 1630 0 R 1637 0 R 1641 0 R 1643 0 R 1645 0 R 1647 0 R 1650 0 R 1652 0 R 1654 0 R 1656 0 R 1660 0 R 1664 0 R 1673 0 R 1675 0 R 1677 0 R 1679 0 R 1681 0 R 1687 0 R 1689 0 R 1694 0 R 1696 0 R 1698 0 R 1705 0 R 1710 0 R 1714 0 R 1718 0 R 1721 0 R 1724 0 R 1728 0 R 1730 0 R 1733 0 R 1735 0 R 1737 0 R 1739 0 R 1743 0 R 1745 0 R 1749 0 R 1751 0 R 1753 0 R 1755 0 R 1757 0 R 1762 0 
 R 1764 0 R 1766 0 R 1774 0 R 1784 0 R 1787 0 R 1802 0 R 1817 0 R 1821 0 R 1826 0 R 1829 0 R 1832 0 R 1837 0 R 1839 0 R 1847 0 R 1849 0 R 1852 0 R 1854 0 R 1856 0 R 1858 0 R 1860 0 R 1864 0 R 1866 0 R 1875 0 R 1882 0 R 1888 0 R 1900 0 R 1914 0 R 1925 0 R 1945 0 R 1947 0 R 1949 0 R 1953 0 R 1970 0 R 1977 0 R 1984 0 R 1993 0 R 1998 0 R 2008 0 R 2018 0 R 2023 0 R 2032 0 R 2045 0 R 2062 0 R 2072 0 R 2075 0 R 2084 0 R 2099 0 R 2106 0 R 2109 0 R 2114 0 R 2119 0 R 2129 0 R 2137 0 R 2140 0 R 2142 0 R 2146 0 R 2159 0 R 2167 0 R 2173 0 R 2177 0 R 2180 0 R 2182 0 R 2184 0 R 2186 0 R 2188 0 R 2193 0 R 2195 0 R 2205 0 R 2215 0 R 2222 0 R 2234 0 R 2239 0 R 2243 0 R 2256 0 R 2263 0 R 2269 0 R 2271 0 R 2282 0 R 2289 0 R 2300 0 R 2304 0 R 2313 0 R 2319 0 R 2329 0 R 2337 0 R 2345 0 R 2351 0 R 2356 0 R 2360 0 R 2362 0 R 2369 0 R 2373 0 R 2377 0 R 2383 0 R 2390 0 R 2395 0 R 2399 0 R 2409 0 R 2414 0 R 2419 0 R 2432 0 R 2439 0 R 2443 0 R 2448 0 R 2455 0 R 2459 0 R 2464 0 R 2472 0 R 2478 0 R 2480 0 R 2487 
 0 R 2494 0 R 2501 0 R 2506 0 R 2514 0 R 2522 0 R 2524 0 R 2533 0 R 2538 0 R 2541 0 R 2551 0 R 2555 0 R 2560 0 R 2562 0 R 2572 0 R 2576 0 R 2580 0 R 2582 0 R 2584 0 R 2593 0 R 2599 0 R 2606 0 R 2608 0 R 2614 0 R 2618 0 R 2620 0 R 2627 0 R 2630 0 R 2635 0 R 2640 0 R 2644 0 R 2646 0 R 2651 0 R 2654 0 R 2663 0 R 2665 0 R 2668 0 R 2671 0 R 2673 0 R 2686 0 R 2691 0 R 2696 0 R 2702 0 R 2707 0 R 2722 0 R 2737 0 R 2741 0 R 2755 0 R 2761 0 R 2765 0 R 2781 0 R 2783 0 R 2790 0 R 2799 0 R 2803 0 R 2810 0 R 2817 0 R 2827 0 R 2833 0 R 2840 0 R 2845 0 R 2850 0 R 2852 0 R 2857 0 R 2860 0 R 2866 0 R 2874 0 R 2882 0 R 2888 0 R 2893 0 R 2902 0 R 2910 0 R 2916 0 R 2924 0 R 2929 0 R 2933 0 R 2940 0 R 2944 0 R 2949 0 R 2958 0 R 2960 0 R 2962 0 R 2968 0 R 2970 0 R 2980 0 R 2986 0 R 2991 0 R 2997 0 R 3007 0 R 3015 0 R 3028 0 R 3033 0 R 3044 0 R 3057 0 R 3064 0 R 3066 0 R 3068 0 R 3073 0 R 3090 0 R 3095 0 R 3099 0 R 3102 0 R 3107 0 R 3109 0 R 3113 0 R 3115 0 R 3119 0 R 3123 0 R 3127 0 R 3132 0 R 3139 0 R 314
 5 0 R 3149 0 R 3152 0 R 3154 0 R 3157 0 R 3160 0 R 3164 0 R 3172 0 R 3181 0 R 3185 0 R 3190 0 R 3197 0 R 3199 0 R 3208 0 R 3213 0 R 3217 0 R 3223 0 R 3228 0 R 3232 0 R 3237 0 R 3241 0 R 3252 0 R 3265 0 R 3284 0 R 3290 0 R 3293 0 R 3296 0 R 3301 0 R 3306 0 R 3311 0 R 3313 0 R 3315 0 R 3317 0 R 3319 0 R 3321 0 R 3330 0 R 3334 0 R 3341 0 R 3344 0 R 3346 0 R 3353 0 R 3360 0 R 3365 0 R 3368 0 R 3370 0 R 3372 0 R 3374 0 R 3377 0 R 3384 0 R 3391 0 R 3400 0 R 3405 0 R 3408 0 R 3411 0 R 3415 0 R 3419 0 R 3423 0 R 3439 0 R 3443 0 R 3466 0 R 3470 0 R 3474 0 R 3482 0 R 3490 0 R 3499 0 R 3501 0 R 3504 0 R 3507 0 R 3525 0 R 3531 0 R 3538 0 R]
 >>
 endobj
 4 0 obj
@@ -180,22 +180,22 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAA+NotoSerif-Bold
 /Subtype /TrueType
-/FontDescriptor 4139 0 R
+/FontDescriptor 4144 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4141 0 R
-/ToUnicode 4140 0 R
+/Widths 4146 0 R
+/ToUnicode 4145 0 R
 >>
 endobj
 11 0 obj
 << /Type /Font
 /BaseFont /AAAAAB+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4143 0 R
+/FontDescriptor 4148 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4145 0 R
-/ToUnicode 4144 0 R
+/Widths 4150 0 R
+/ToUnicode 4149 0 R
 >>
 endobj
 12 0 obj
@@ -17779,7 +17779,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3535 0 R 3536 0 R 3537 0 R 3538 0 R 3539 0 R 3540 0 R 3541 0 R 3542 0 R 3543 0 R 3544 0 R 3545 0 R 3546 0 R 3547 0 R 3548 0 R 3549 0 R 3550 0 R 3551 0 R 3552 0 R 3553 0 R 3554 0 R 3555 0 R 3556 0 R 3557 0 R 3558 0 R 3559 0 R 3560 0 R 3561 0 R 3562 0 R 3563 0 R 3564 0 R 3565 0 R 3566 0 R 3567 0 R 3568 0 R 3569 0 R 3570 0 R 3571 0 R 3572 0 R 3573 0 R 3574 0 R 3575 0 R 3576 0 R 3577 0 R 3578 0 R 3579 0 R 3580 0 R 3581 0 R 3582 0 R 3583 0 R 3584 0 R 3585 0 R 3586 0 R 3587 0 R 3588 0 R 3589 0 R 3590 0 R 3591 0 R 3592 0 R 3593 0 R 3594 0 R 3595 0 R 3596 0 R 3597 0 R 3598 0 R 3599 0 R 3600 0 R 3601 0 R 3602 0 R 3603 0 R 3604 0 R 3605 0 R 3606 0 R 3607 0 R 3608 0 R 3609 0 R 3610 0 R 3611 0 R 3612 0 R 3613 0 R 3614 0 R 3615 0 R 3616 0 R 3617 0 R 3618 0 R]
+/Annots [3540 0 R 3541 0 R 3542 0 R 3543 0 R 3544 0 R 3545 0 R 3546 0 R 3547 0 R 3548 0 R 3549 0 R 3550 0 R 3551 0 R 3552 0 R 3553 0 R 3554 0 R 3555 0 R 3556 0 R 3557 0 R 3558 0 R 3559 0 R 3560 0 R 3561 0 R 3562 0 R 3563 0 R 3564 0 R 3565 0 R 3566 0 R 3567 0 R 3568 0 R 3569 0 R 3570 0 R 3571 0 R 3572 0 R 3573 0 R 3574 0 R 3575 0 R 3576 0 R 3577 0 R 3578 0 R 3579 0 R 3580 0 R 3581 0 R 3582 0 R 3583 0 R 3584 0 R 3585 0 R 3586 0 R 3587 0 R 3588 0 R 3589 0 R 3590 0 R 3591 0 R 3592 0 R 3593 0 R 3594 0 R 3595 0 R 3596 0 R 3597 0 R 3598 0 R 3599 0 R 3600 0 R 3601 0 R 3602 0 R 3603 0 R 3604 0 R 3605 0 R 3606 0 R 3607 0 R 3608 0 R 3609 0 R 3610 0 R 3611 0 R 3612 0 R 3613 0 R 3614 0 R 3615 0 R 3616 0 R 3617 0 R 3618 0 R 3619 0 R 3620 0 R 3621 0 R 3622 0 R 3623 0 R]
 >>
 endobj
 14 0 obj
@@ -34939,7 +34939,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3619 0 R 3620 0 R 3621 0 R 3622 0 R 3623 0 R 3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3642 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3652 0 R 3653 0 R 3654 0 R 3655 0 R 3656 0 R 3657 0 R 3658 0 R 3659 0 R 3660 0 R 3661 0 R 3662 0 R 3663 0 R 3664 0 R 3665 0 R 3666 0 R 3667 0 R 3668 0 R 3669 0 R 3670 0 R 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3686 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R 3696 0 R 3697 0 R 3698 0 R 3699 0 R 3700 0 R 3701 0 R 3702 0 R 3703 0 R 3704 0 R 3705 0 R 3706 0 R]
+/Annots [3624 0 R 3625 0 R 3626 0 R 3627 0 R 3628 0 R 3629 0 R 3630 0 R 3631 0 R 3632 0 R 3633 0 R 3634 0 R 3635 0 R 3636 0 R 3637 0 R 3638 0 R 3639 0 R 3640 0 R 3641 0 R 3642 0 R 3643 0 R 3644 0 R 3645 0 R 3646 0 R 3647 0 R 3648 0 R 3649 0 R 3650 0 R 3651 0 R 3652 0 R 3653 0 R 3654 0 R 3655 0 R 3656 0 R 3657 0 R 3658 0 R 3659 0 R 3660 0 R 3661 0 R 3662 0 R 3663 0 R 3664 0 R 3665 0 R 3666 0 R 3667 0 R 3668 0 R 3669 0 R 3670 0 R 3671 0 R 3672 0 R 3673 0 R 3674 0 R 3675 0 R 3676 0 R 3677 0 R 3678 0 R 3679 0 R 3680 0 R 3681 0 R 3682 0 R 3683 0 R 3684 0 R 3685 0 R 3686 0 R 3687 0 R 3688 0 R 3689 0 R 3690 0 R 3691 0 R 3692 0 R 3693 0 R 3694 0 R 3695 0 R 3696 0 R 3697 0 R 3698 0 R 3699 0 R 3700 0 R 3701 0 R 3702 0 R 3703 0 R 3704 0 R 3705 0 R 3706 0 R 3707 0 R 3708 0 R 3709 0 R 3710 0 R 3711 0 R]
 >>
 endobj
 16 0 obj
@@ -53747,7 +53747,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3707 0 R 3708 0 R 3709 0 R 3710 0 R 3711 0 R 3712 0 R 3713 0 R 3714 0 R 3715 0 R 3716 0 R 3717 0 R 3718 0 R 3719 0 R 3720 0 R 3721 0 R 3722 0 R 3723 0 R 3724 0 R 3725 0 R 3726 0 R 3727 0 R 3728 0 R 3729 0 R 3730 0 R 3731 0 R 3732 0 R 3733 0 R 3734 0 R 3735 0 R 3736 0 R 3737 0 R 3738 0 R 3739 0 R 3740 0 R 3741 0 R 3742 0 R 3743 0 R 3744 0 R 3745 0 R 3746 0 R 3747 0 R 3748 0 R 3749 0 R 3750 0 R 3751 0 R 3752 0 R 3753 0 R 3754 0 R 3755 0 R 3756 0 R 3757 0 R 3758 0 R 3759 0 R 3760 0 R 3761 0 R 3762 0 R 3763 0 R 3764 0 R 3765 0 R 3766 0 R 3767 0 R 3768 0 R 3769 0 R 3770 0 R 3771 0 R 3772 0 R 3773 0 R 3774 0 R 3775 0 R 3776 0 R 3777 0 R 3778 0 R 3779 0 R 3780 0 R 3781 0 R 3782 0 R 3783 0 R 3784 0 R 3785 0 R 3786 0 R 3787 0 R 3788 0 R 3789 0 R 3790 0 R 3791 0 R 3792 0 R 3793 0 R 3794 0 R]
+/Annots [3712 0 R 3713 0 R 3714 0 R 3715 0 R 3716 0 R 3717 0 R 3718 0 R 3719 0 R 3720 0 R 3721 0 R 3722 0 R 3723 0 R 3724 0 R 3725 0 R 3726 0 R 3727 0 R 3728 0 R 3729 0 R 3730 0 R 3731 0 R 3732 0 R 3733 0 R 3734 0 R 3735 0 R 3736 0 R 3737 0 R 3738 0 R 3739 0 R 3740 0 R 3741 0 R 3742 0 R 3743 0 R 3744 0 R 3745 0 R 3746 0 R 3747 0 R 3748 0 R 3749 0 R 3750 0 R 3751 0 R 3752 0 R 3753 0 R 3754 0 R 3755 0 R 3756 0 R 3757 0 R 3758 0 R 3759 0 R 3760 0 R 3761 0 R 3762 0 R 3763 0 R 3764 0 R 3765 0 R 3766 0 R 3767 0 R 3768 0 R 3769 0 R 3770 0 R 3771 0 R 3772 0 R 3773 0 R 3774 0 R 3775 0 R 3776 0 R 3777 0 R 3778 0 R 3779 0 R 3780 0 R 3781 0 R 3782 0 R 3783 0 R 3784 0 R 3785 0 R 3786 0 R 3787 0 R 3788 0 R 3789 0 R 3790 0 R 3791 0 R 3792 0 R 3793 0 R 3794 0 R 3795 0 R 3796 0 R 3797 0 R 3798 0 R 3799 0 R]
 >>
 endobj
 18 0 obj
@@ -71318,7 +71318,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3795 0 R 3796 0 R 3797 0 R 3798 0 R 3799 0 R 3800 0 R 3801 0 R 3802 0 R 3803 0 R 3804 0 R 3805 0 R 3806 0 R 3807 0 R 3808 0 R 3809 0 R 3810 0 R 3811 0 R 3812 0 R 3813 0 R 3814 0 R 3815 0 R 3816 0 R 3817 0 R 3818 0 R 3819 0 R 3820 0 R 3821 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R 3837 0 R 3838 0 R 3839 0 R 3840 0 R 3841 0 R 3842 0 R 3843 0 R 3844 0 R 3845 0 R 3846 0 R 3847 0 R 3848 0 R 3849 0 R 3850 0 R 3851 0 R 3852 0 R 3853 0 R 3854 0 R 3855 0 R 3856 0 R 3857 0 R 3858 0 R 3859 0 R 3860 0 R 3861 0 R 3862 0 R 3863 0 R 3864 0 R 3865 0 R 3866 0 R 3867 0 R 3868 0 R 3869 0 R 3870 0 R 3871 0 R 3872 0 R 3873 0 R 3874 0 R 3875 0 R 3876 0 R 3877 0 R 3878 0 R 3879 0 R 3880 0 R 3881 0 R 3882 0 R 3883 0 R 3884 0 R]
+/Annots [3800 0 R 3801 0 R 3802 0 R 3803 0 R 3804 0 R 3805 0 R 3806 0 R 3807 0 R 3808 0 R 3809 0 R 3810 0 R 3811 0 R 3812 0 R 3813 0 R 3814 0 R 3815 0 R 3816 0 R 3817 0 R 3818 0 R 3819 0 R 3820 0 R 3821 0 R 3822 0 R 3823 0 R 3824 0 R 3825 0 R 3826 0 R 3827 0 R 3828 0 R 3829 0 R 3830 0 R 3831 0 R 3832 0 R 3833 0 R 3834 0 R 3835 0 R 3836 0 R 3837 0 R 3838 0 R 3839 0 R 3840 0 R 3841 0 R 3842 0 R 3843 0 R 3844 0 R 3845 0 R 3846 0 R 3847 0 R 3848 0 R 3849 0 R 3850 0 R 3851 0 R 3852 0 R 3853 0 R 3854 0 R 3855 0 R 3856 0 R 3857 0 R 3858 0 R 3859 0 R 3860 0 R 3861 0 R 3862 0 R 3863 0 R 3864 0 R 3865 0 R 3866 0 R 3867 0 R 3868 0 R 3869 0 R 3870 0 R 3871 0 R 3872 0 R 3873 0 R 3874 0 R 3875 0 R 3876 0 R 3877 0 R 3878 0 R 3879 0 R 3880 0 R 3881 0 R 3882 0 R 3883 0 R 3884 0 R 3885 0 R 3886 0 R 3887 0 R 3888 0 R 3889 0 R]
 >>
 endobj
 20 0 obj
@@ -80698,7 +80698,7 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [3885 0 R 3886 0 R 3887 0 R 3888 0 R 3889 0 R 3890 0 R 3891 0 R 3892 0 R 3893 0 R 3894 0 R 3895 0 R 3896 0 R 3897 0 R 3898 0 R 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R]
+/Annots [3890 0 R 3891 0 R 3892 0 R 3893 0 R 3894 0 R 3895 0 R 3896 0 R 3897 0 R 3898 0 R 3899 0 R 3900 0 R 3901 0 R 3902 0 R 3903 0 R 3904 0 R 3905 0 R 3906 0 R 3907 0 R 3908 0 R 3909 0 R 3910 0 R 3911 0 R 3912 0 R 3913 0 R 3914 0 R 3915 0 R 3916 0 R 3917 0 R 3918 0 R 3919 0 R 3920 0 R 3921 0 R 3922 0 R 3923 0 R 3924 0 R 3925 0 R 3926 0 R 3927 0 R 3928 0 R 3929 0 R 3930 0 R 3931 0 R 3932 0 R 3933 0 R 3934 0 R 3935 0 R 3936 0 R 3937 0 R 3938 0 R 3939 0 R]
 >>
 endobj
 22 0 obj
@@ -81480,7 +81480,7 @@ endobj
 >>
 endobj
 26 0 obj
-<< /Kids [1190 0 R 2489 0 R 1191 0 R 2034 0 R 3300 0 R]
+<< /Kids [1192 0 R 2492 0 R 3523 0 R 1193 0 R 2037 0 R 3304 0 R]
 >>
 endobj
 27 0 obj
@@ -81531,11 +81531,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAC+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4147 0 R
+/FontDescriptor 4152 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4149 0 R
-/ToUnicode 4148 0 R
+/Widths 4154 0 R
+/ToUnicode 4153 0 R
 >>
 endobj
 32 0 obj
@@ -81561,11 +81561,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAD+NotoSerif
 /Subtype /TrueType
-/FontDescriptor 4151 0 R
+/FontDescriptor 4156 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4153 0 R
-/ToUnicode 4152 0 R
+/Widths 4158 0 R
+/ToUnicode 4157 0 R
 >>
 endobj
 35 0 obj
@@ -81982,11 +81982,11 @@ endobj
 << /Type /Font
 /BaseFont /AAAAAE+NotoSerif-Italic
 /Subtype /TrueType
-/FontDescriptor 4155 0 R
+/FontDescriptor 4160 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4157 0 R
-/ToUnicode 4156 0 R
+/Widths 4162 0 R
+/ToUnicode 4161 0 R
 >>
 endobj
 41 0 obj
@@ -94498,7 +94498,7 @@ endobj
 [92 0 R /XYZ 0 115.2400000000001 null]
 endobj
 100 0 obj
-<< /Length 2571
+<< /Length 2744
 >>
 stream
 q
@@ -94601,12 +94601,27 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-7.390 Tw
+1.293 Tw
 
 BT
 48.24000000000001 713.226 Td
 /F1.0 10.5 Tf
-[<74657374696e6720616e64206465706c6f> 20.01953125 <796d656e7420676f657320736d6f6f74686c79> 89.84375 <2c20616e642070726576656e742064617461206c6f73732e2046> 40.0390625 <616d696c696172697a6520796f757273656c662077697468>] TJ
+[<74657374696e6720616e64206465706c6f> 20.01953125 <796d656e7420676f657320736d6f6f74686c79> 89.84375 <2c20616e642070726576656e742064617461206c6f73732e2046> 40.0390625 <616d696c696172697a6520796f757273656c66207769746820>] TJ
+ET
+
+
+0.000 Tw
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.259 0.545 0.792 scn
+0.259 0.545 0.792 SCN
+
+1.293 Tw
+
+BT
+500.70584810697113 713.226 Td
+/F1.0 10.5 Tf
+<537570706f727420616e64> Tj
 ET
 
 
@@ -94619,7 +94634,7 @@ ET
 BT
 48.24000000000001 697.446 Td
 /F1.0 10.5 Tf
-<5b68626173655f737570706f727465645f7465737465645f646566696e6974696f6e735d> Tj
+[<54> 29.78515625 <657374696e67204578706563746174696f6e73>] TJ
 ET
 
 0.000 0.000 0.000 SCN
@@ -94628,7 +94643,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-234.38400000000001 697.446 Td
+150.932255859375 697.446 Td
 /F1.0 10.5 Tf
 <2061732077656c6c2e> Tj
 ET
@@ -94674,7 +94689,7 @@ endobj
 /Font << /F1.0 11 0 R
 >>
 >>
-/Annots [102 0 R 103 0 R 104 0 R]
+/Annots [102 0 R 103 0 R 104 0 R 105 0 R]
 >>
 endobj
 102 0 obj
@@ -94697,11 +94712,19 @@ endobj
 << /Border [0 0 0]
 /Dest (#hbase_supported_tested_definitions)
 /Subtype /Link
-/Rect [48.24000000000001 694.38 234.38400000000001 708.6600000000001]
+/Rect [500.70584810697113 710.16 563.76 724.44]
 /Type /Annot
 >>
 endobj
 105 0 obj
+<< /Border [0 0 0]
+/Dest (#hbase_supported_tested_definitions)
+/Subtype /Link
+/Rect [48.24000000000001 694.38 150.932255859375 708.6600000000001]
+/Type /Annot
+>>
+endobj
+106 0 obj
 << /Length 15298
 >>
 stream
@@ -95536,11 +95559,11 @@ Q
 
 endstream
 endobj
-106 0 obj
+107 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 105 0 R
+/Contents 106 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -95548,13 +95571,13 @@ endobj
 /F3.0 31 0 R
 >>
 >>
-/Annots [108 0 R 109 0 R]
+/Annots [109 0 R 110 0 R]
 >>
 endobj
-107 0 obj
-[106 0 R /XYZ 0 792.0 null]
-endobj
 108 0 obj
+[107 0 R /XYZ 0 792.0 null]
+endobj
+109 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -95565,7 +95588,7 @@ endobj
 /Type /Annot
 >>
 endobj
-109 0 obj
+110 0 obj
 << /Border [0 0 0]
 /Dest (#security)
 /Subtype /Link
@@ -95573,7 +95596,7 @@ endobj
 /Type /Annot
 >>
 endobj
-110 0 obj
+111 0 obj
 << /Length 3945
 >>
 stream
@@ -95824,11 +95847,11 @@ Q
 
 endstream
 endobj
-111 0 obj
+112 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 110 0 R
+/Contents 111 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F4.0 40 0 R
@@ -95838,7 +95861,7 @@ endobj
 >>
 >>
 endobj
-112 0 obj
+113 0 obj
 << /Length 24329
 >>
 stream
@@ -97514,11 +97537,11 @@ Q
 
 endstream
 endobj
-113 0 obj
+114 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 112 0 R
+/Contents 113 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -97526,13 +97549,13 @@ endobj
 /F3.0 31 0 R
 >>
 >>
-/Annots [115 0 R 116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R]
+/Annots [116 0 R 117 0 R 118 0 R 119 0 R 120 0 R 121 0 R 122 0 R 123 0 R 124 0 R 125 0 R 126 0 R 127 0 R 128 0 R]
 >>
 endobj
-114 0 obj
-[113 0 R /XYZ 0 792.0 null]
-endobj
 115 0 obj
+[114 0 R /XYZ 0 792.0 null]
+endobj
+116 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97543,7 +97566,7 @@ endobj
 /Type /Annot
 >>
 endobj
-116 0 obj
+117 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97554,7 +97577,7 @@ endobj
 /Type /Annot
 >>
 endobj
-117 0 obj
+118 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97565,7 +97588,7 @@ endobj
 /Type /Annot
 >>
 endobj
-118 0 obj
+119 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97576,7 +97599,7 @@ endobj
 /Type /Annot
 >>
 endobj
-119 0 obj
+120 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97587,7 +97610,7 @@ endobj
 /Type /Annot
 >>
 endobj
-120 0 obj
+121 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97598,7 +97621,7 @@ endobj
 /Type /Annot
 >>
 endobj
-121 0 obj
+122 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97609,7 +97632,7 @@ endobj
 /Type /Annot
 >>
 endobj
-122 0 obj
+123 0 obj
 << /Border [0 0 0]
 /Dest (#passwordless.ssh.quickstart)
 /Subtype /Link
@@ -97617,7 +97640,7 @@ endobj
 /Type /Annot
 >>
 endobj
-123 0 obj
+124 0 obj
 << /Border [0 0 0]
 /Dest (#passwordless.ssh.quickstart)
 /Subtype /Link
@@ -97625,7 +97648,7 @@ endobj
 /Type /Annot
 >>
 endobj
-124 0 obj
+125 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97636,7 +97659,7 @@ endobj
 /Type /Annot
 >>
 endobj
-125 0 obj
+126 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97647,7 +97670,7 @@ endobj
 /Type /Annot
 >>
 endobj
-126 0 obj
+127 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -97658,7 +97681,7 @@ endobj
 /Type /Annot
 >>
 endobj
-127 0 obj
+128 0 obj
 << /Border [0 0 0]
 /Dest (#loopback.ip)
 /Subtype /Link
@@ -97666,7 +97689,7 @@ endobj
 /Type /Annot
 >>
 endobj
-128 0 obj
+129 0 obj
 << /Length 17115
 >>
 stream
@@ -98537,21 +98560,21 @@ Q
 
 endstream
 endobj
-129 0 obj
+130 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 128 0 R
+/Contents 129 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 40 0 R
 /F1.0 11 0 R
 /F3.0 31 0 R
 >>
 >>
-/Annots [130 0 R 131 0 R 132 0 R]
+/Annots [131 0 R 132 0 R 133 0 R]
 >>
 endobj
-130 0 obj
+131 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -98562,7 +98585,7 @@ endobj
 /Type /Annot
 >>
 endobj
-131 0 obj
+132 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -98573,7 +98596,7 @@ endobj
 /Type /Annot
 >>
 endobj
-132 0 obj
+133 0 obj
 << /Border [0 0 0]
 /Dest (#trouble.rs.runtime.filehandles)
 /Subtype /Link
@@ -98581,7 +98604,7 @@ endobj
 /Type /Annot
 >>
 endobj
-133 0 obj
+134 0 obj
 << /Length 13539
 >>
 stream
@@ -99281,11 +99304,11 @@ Q
 
 endstream
 endobj
-134 0 obj
+135 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 133 0 R
+/Contents 134 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F4.0 40 0 R
@@ -99293,10 +99316,10 @@ endobj
 /F2.0 10 0 R
 >>
 >>
-/Annots [135 0 R 137 0 R 138 0 R 139 0 R]
+/Annots [136 0 R 138 0 R 139 0 R 140 0 R]
 >>
 endobj
-135 0 obj
+136 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -99307,10 +99330,10 @@ endobj
 /Type /Annot
 >>
 endobj
-136 0 obj
-[134 0 R /XYZ 0 281.27000000000004 null]
-endobj
 137 0 obj
+[135 0 R /XYZ 0 281.27000000000004 null]
+endobj
+138 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -99321,7 +99344,7 @@ endobj
 /Type /Annot
 >>
 endobj
-138 0 obj
+139 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -99332,7 +99355,7 @@ endobj
 /Type /Annot
 >>
 endobj
-139 0 obj
+140 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -99343,7 +99366,7 @@ endobj
 /Type /Annot
 >>
 endobj
-140 0 obj
+141 0 obj
 << /Length 47374
 >>
 stream
@@ -102944,21 +102967,21 @@ Q
 
 endstream
 endobj
-141 0 obj
+142 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 140 0 R
+/Contents 141 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F2.0 10 0 R
 /F4.0 40 0 R
 >>
 >>
-/Annots [142 0 R]
+/Annots [143 0 R]
 >>
 endobj
-142 0 obj
+143 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -102969,7 +102992,7 @@ endobj
 /Type /Annot
 >>
 endobj
-143 0 obj
+144 0 obj
 << /Length 61420
 >>
 stream
@@ -107269,11 +107292,11 @@ Q
 
 endstream
 endobj
-144 0 obj
+145 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 143 0 R
+/Contents 144 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F4.0 40 0 R
@@ -107283,10 +107306,10 @@ endobj
 >>
 >>
 endobj
-145 0 obj
-[144 0 R /XYZ 0 614.76 null]
-endobj
 146 0 obj
+[145 0 R /XYZ 0 614.76 null]
+endobj
+147 0 obj
 << /Length 14699
 >>
 stream
@@ -108066,11 +108089,11 @@ Q
 
 endstream
 endobj
-147 0 obj
+148 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 146 0 R
+/Contents 147 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -108079,16 +108102,16 @@ endobj
 /F4.0 40 0 R
 >>
 >>
-/Annots [150 0 R 151 0 R 153 0 R 154 0 R]
+/Annots [151 0 R 152 0 R 154 0 R 155 0 R]
 >>
 endobj
-148 0 obj
-[147 0 R /XYZ 0 567.26 null]
-endobj
 149 0 obj
-[147 0 R /XYZ 0 475.6400000000001 null]
+[148 0 R /XYZ 0 567.26 null]
 endobj
 150 0 obj
+[148 0 R /XYZ 0 475.6400000000001 null]
+endobj
+151 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -108099,7 +108122,7 @@ endobj
 /Type /Annot
 >>
 endobj
-151 0 obj
+152 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -108110,10 +108133,10 @@ endobj
 /Type /Annot
 >>
 endobj
-152 0 obj
-[147 0 R /XYZ 0 352.46000000000004 null]
-endobj
 153 0 obj
+[148 0 R /XYZ 0 352.46000000000004 null]
+endobj
+154 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -108124,7 +108147,7 @@ endobj
 /Type /Annot
 >>
 endobj
-154 0 obj
+155 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -108135,7 +108158,7 @@ endobj
 /Type /Annot
 >>
 endobj
-155 0 obj
+156 0 obj
 << /Length 15380
 >>
 stream
@@ -108965,11 +108988,11 @@ Q
 
 endstream
 endobj
-156 0 obj
+157 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 155 0 R
+/Contents 156 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F4.0 40 0 R
@@ -108977,13 +109000,13 @@ endobj
 /F2.0 10 0 R
 >>
 >>
-/Annots [158 0 R 160 0 R 161 0 R 163 0 R 164 0 R 165 0 R]
+/Annots [159 0 R 161 0 R 162 0 R 164 0 R 165 0 R 166 0 R]
 >>
 endobj
-157 0 obj
-[156 0 R /XYZ 0 713.19 null]
-endobj
 158 0 obj
+[157 0 R /XYZ 0 713.19 null]
+endobj
+159 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.secure.configuration)
 /Subtype /Link
@@ -108991,10 +109014,10 @@ endobj
 /Type /Annot
 >>
 endobj
-159 0 obj
-[156 0 R /XYZ 0 621.5700000000002 null]
-endobj
 160 0 obj
+[157 0 R /XYZ 0 621.5700000000002 null]
+endobj
+161 0 obj
 << /Border [0 0 0]
 /Dest (#casestudies.max.transfer.threads)
 /Subtype /Link
@@ -109002,7 +109025,7 @@ endobj
 /Type /Annot
 >>
 endobj
-161 0 obj
+162 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -109013,10 +109036,10 @@ endobj
 /Type /Annot
 >>
 endobj
-162 0 obj
-[156 0 R /XYZ 0 229.13000000000028 null]
-endobj
 163 0 obj
+[157 0 R /XYZ 0 229.13000000000028 null]
+endobj
+164 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -109027,7 +109050,7 @@ endobj
 /Type /Annot
 >>
 endobj
-164 0 obj
+165 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -109038,7 +109061,7 @@ endobj
 /Type /Annot
 >>
 endobj
-165 0 obj
+166 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -109049,7 +109072,7 @@ endobj
 /Type /Annot
 >>
 endobj
-166 0 obj
+167 0 obj
 << /Length 15947
 >>
 stream
@@ -109971,11 +109994,11 @@ Q
 
 endstream
 endobj
-167 0 obj
+168 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 166 0 R
+/Contents 167 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -109984,23 +110007,23 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [171 0 R 172 0 R 174 0 R 176 0 R 177 0 R 179 0 R 180 0 R]
+/Annots [172 0 R 173 0 R 175 0 R 177 0 R 178 0 R 180 0 R 181 0 R]
 >>
 endobj
-168 0 obj
-[167 0 R /XYZ 0 792.0 null]
-endobj
 169 0 obj
-<< /Limits [(acid) (api-before-hbase-1-0-0)]
-/Names [(acid) 626 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3009 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3012 0 R (add.metrics) 3007 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3234 0 R (adding.new.node) 2556 0 R (administration) 1037 0 R (administration-2) 1061 0 R (administration-3) 1091 0 R (amazon-ec2) 3271 0 R (api-as-of-hbase-1-0-0) 1140 0 R (api-before-hbase-1-0-0) 1142 0 R]
->>
+[168 0 R /XYZ 0 792.0 null]
 endobj
 170 0 obj
-<< /Limits [(hadoop.security) (hbase.env.sh)]
-/Names [(hadoop.security) 157 0 R (hadoop2.hbase_0.94) 145 0 R (handling-of-errors-during-log-splitting) 1310 0 R (hardware) 2400 0 R (hbase-and-hdfs) 2354 0 R (hbase-as-a-mapreduce-job-data-source-and-data-sink) 853 0 R (hbase-hot-spot-region) 2403 0 R (hbase-in-action) 3277 0 R (hbase-managed-zookeeper-configuration) 3142 0 R (hbase-metrics) 2561 0 R (hbase-reference-guide-style-guide-and-cheat-sheet) 3200 0 R (hbase-region-with-non-local-data) 2404 0 R (hbase.accesscontrol.configuration) 1015 0 R (hbase.archetypes.development) 3082 0 R (hbase.client.api.surface) 376 0 R (hbase.commit.msg.format) 3182 0 R (hbase.encryption.server) 1080 0 R (hbase.env.sh) 271 0 R]
+<< /Limits [(acid) (arch.bulk.load)]
+/Names [(acid) 628 0 R (add-metric-name-and-function-to-hadoop-compat-interface) 3012 0 R (add-the-implementation-to-both-hadoop-1-and-hadoop-2-compat-modules) 3016 0 R (add.metrics) 3010 0 R (adding-a-new-chapter-to-the-hbase-reference-guide) 3238 0 R (adding.new.node) 2558 0 R (administration) 1039 0 R (administration-2) 1063 0 R (administration-3) 1093 0 R (amazon-ec2) 3275 0 R (api-as-of-hbase-1-0-0) 1142 0 R (api-before-hbase-1-0-0) 1144 0 R (appendix) 3188 0 R (appendix_acl_matrix) 3307 0 R (appendix_contributing_to_documentation) 3191 0 R (arch.bulk.load) 1498 0 R]
 >>
 endobj
 171 0 obj
+<< /Limits [(hadoop.security) (hbase.env.sh)]
+/Names [(hadoop.security) 158 0 R (hadoop2.hbase_0.94) 146 0 R (handling-of-errors-during-log-splitting) 1312 0 R (hardware) 2403 0 R (hbase-and-hdfs) 2357 0 R (hbase-as-a-mapreduce-job-data-source-and-data-sink) 855 0 R (hbase-hot-spot-region) 2406 0 R (hbase-in-action) 3281 0 R (hbase-managed-zookeeper-configuration) 3146 0 R (hbase-reference-guide-style-guide-and-cheat-sheet) 3204 0 R (hbase-region-with-non-local-data) 2407 0 R (hbase.accesscontrol.configuration) 1017 0 R (hbase.archetypes.development) 3086 0 R (hbase.client.api.surface) 378 0 R (hbase.commit.msg.format) 3186 0 R (hbase.encryption.server) 1082 0 R (hbase.env.sh) 272 0 R]
+>>
+endobj
+172 0 obj
 << /Border [0 0 0]
 /Dest (#standalone)
 /Subtype /Link
@@ -110008,7 +110031,7 @@ endobj
 /Type /Annot
 >>
 endobj
-172 0 obj
+173 0 obj
 << /Border [0 0 0]
 /Dest (#distributed)
 /Subtype /Link
@@ -110016,10 +110039,10 @@ endobj
 /Type /Annot
 >>
 endobj
-173 0 obj
-[167 0 R /XYZ 0 586.8599999999999 null]
-endobj
 174 0 obj
+[168 0 R /XYZ 0 586.8599999999999 null]
+endobj
+175 0 obj
 << /Border [0 0 0]
 /Dest (#quickstart)
 /Subtype /Link
@@ -110027,10 +110050,10 @@ endobj
 /Type /Annot
 >>
 endobj
-175 0 obj
-[167 0 R /XYZ 0 471.65999999999997 null]
-endobj
 176 0 obj
+[168 0 R /XYZ 0 471.65999999999997 null]
+endobj
+177 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -110041,7 +110064,7 @@ endobj
 /Type /Annot
 >>
 endobj
-177 0 obj
+178 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -110052,10 +110075,10 @@ endobj
 /Type /Annot
 >>
 endobj
-178 0 obj
-[167 0 R /XYZ 0 297.1199999999999 null]
-endobj
 179 0 obj
+[168 0 R /XYZ 0 297.1199999999999 null]
+endobj
+180 0 obj
 << /Border [0 0 0]
 /Dest (#quickstart)
 /Subtype /Link
@@ -110063,7 +110086,7 @@ endobj
 /Type /Annot
 >>
 endobj
-180 0 obj
+181 0 obj
 << /Border [0 0 0]
 /Dest (#quickstart_pseudo)
 /Subtype /Link
@@ -110071,10 +110094,10 @@ endobj
 /Type /Annot
 >>
 endobj
-181 0 obj
-[167 0 R /XYZ 0 143.15999999999985 null]
-endobj
 182 0 obj
+[168 0 R /XYZ 0 143.15999999999985 null]
+endobj
+183 0 obj
 << /Length 6327
 >>
 stream
@@ -110443,21 +110466,21 @@ Q
 
 endstream
 endobj
-183 0 obj
+184 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 182 0 R
+/Contents 183 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
 /F4.0 40 0 R
 >>
 >>
-/Annots [184 0 R 185 0 R]
+/Annots [185 0 R 186 0 R]
 >>
 endobj
-184 0 obj
+185 0 obj
 << /Border [0 0 0]
 /Dest (#quickstart_fully_distributed)
 /Subtype /Link
@@ -110465,7 +110488,7 @@ endobj
 /Type /Annot
 >>
 endobj
-185 0 obj
+186 0 obj
 << /Border [0 0 0]
 /Dest (#zookeeper)
 /Subtype /Link
@@ -110473,7 +110496,7 @@ endobj
 /Type /Annot
 >>
 endobj
-186 0 obj
+187 0 obj
 << /Length 21370
 >>
 stream
@@ -111823,21 +111846,21 @@ Q
 
 endstream
 endobj
-187 0 obj
+188 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 186 0 R
+/Contents 187 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F4.0 40 0 R
 /F1.0 11 0 R
 /F3.0 31 0 R
 >>
 >>
-/Annots [188 0 R 189 0 R]
+/Annots [189 0 R 190 0 R]
 >>
 endobj
-188 0 obj
+189 0 obj
 << /Border [0 0 0]
 /Dest (#config.files)
 /Subtype /Link
@@ -111845,7 +111868,7 @@ endobj
 /Type /Annot
 >>
 endobj
-189 0 obj
+190 0 obj
 << /Border [0 0 0]
 /Dest (#quickstart_fully_distributed)
 /Subtype /Link
@@ -111853,7 +111876,7 @@ endobj
 /Type /Annot
 >>
 endobj
-190 0 obj
+191 0 obj
 << /Length 6259
 >>
 stream
@@ -112270,11 +112293,11 @@ Q
 
 endstream
 endobj
-191 0 obj
+192 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 190 0 R
+/Contents 191 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -112283,7 +112306,7 @@ endobj
 >>
 >>
 endobj
-192 0 obj
+193 0 obj
 << /Length 12573
 >>
 stream
@@ -112955,11 +112978,11 @@ Q
 
 endstream
 endobj
-193 0 obj
+194 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 192 0 R
+/Contents 193 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -112967,13 +112990,13 @@ endobj
 /F3.0 31 0 R
 >>
 >>
-/Annots [195 0 R]
+/Annots [196 0 R]
 >>
 endobj
-194 0 obj
-[193 0 R /XYZ 0 792.0 null]
-endobj
 195 0 obj
+[194 0 R /XYZ 0 792.0 null]
+endobj
+196 0 obj
 << /Border [0 0 0]
 /Dest (#shell_exercises)
 /Subtype /Link
@@ -112981,7 +113004,7 @@ endobj
 /Type /Annot
 >>
 endobj
-196 0 obj
+197 0 obj
 << /Length 12538
 >>
 stream
@@ -113677,11 +113700,11 @@ Q
 
 endstream
 endobj
-197 0 obj
+198 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 196 0 R
+/Contents 197 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F4.0 40 0 R
@@ -113690,16 +113713,16 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [200 0 R]
+/Annots [201 0 R]
 >>
 endobj
-198 0 obj
-[197 0 R /XYZ 0 792.0 null]
-endobj
 199 0 obj
-[197 0 R /XYZ 0 712.0799999999999 null]
+[198 0 R /XYZ 0 792.0 null]
 endobj
 200 0 obj
+[198 0 R /XYZ 0 712.0799999999999 null]
+endobj
+201 0 obj
 << /Border [0 0 0]
 /Dest (#hbase_default_configurations)
 /Subtype /Link
@@ -113707,10 +113730,10 @@ endobj
 /Type /Annot
 >>
 endobj
-201 0 obj
-[197 0 R /XYZ 0 509.76 null]
-endobj
 202 0 obj
+[198 0 R /XYZ 0 509.76 null]
+endobj
+203 0 obj
 << /Length 9913
 >>
 stream
@@ -114188,11 +114211,11 @@ Q
 
 endstream
 endobj
-203 0 obj
+204 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 202 0 R
+/Contents 203 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -114200,7 +114223,7 @@ endobj
 >>
 >>
 endobj
-204 0 obj
+205 0 obj
 << /Length 9190
 >>
 stream
@@ -114651,11 +114674,11 @@ Q
 
 endstream
 endobj
-205 0 obj
+206 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 204 0 R
+/Contents 205 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -114663,7 +114686,7 @@ endobj
 >>
 >>
 endobj
-206 0 obj
+207 0 obj
 << /Length 12782
 >>
 stream
@@ -115229,11 +115252,11 @@ Q
 
 endstream
 endobj
-207 0 obj
+208 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 206 0 R
+/Contents 207 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -115241,7 +115264,7 @@ endobj
 >>
 >>
 endobj
-208 0 obj
+209 0 obj
 << /Length 9744
 >>
 stream
@@ -115700,11 +115723,11 @@ Q
 
 endstream
 endobj
-209 0 obj
+210 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 208 0 R
+/Contents 209 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -115712,7 +115735,7 @@ endobj
 >>
 >>
 endobj
-210 0 obj
+211 0 obj
 << /Length 11994
 >>
 stream
@@ -116251,20 +116274,20 @@ Q
 
 endstream
 endobj
-211 0 obj
+212 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 210 0 R
+/Contents 211 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
 >>
 >>
-/Annots [212 0 R]
+/Annots [213 0 R]
 >>
 endobj
-212 0 obj
+213 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -116275,7 +116298,7 @@ endobj
 /Type /Annot
 >>
 endobj
-213 0 obj
+214 0 obj
 << /Length 9801
 >>
 stream
@@ -116748,20 +116771,20 @@ Q
 
 endstream
 endobj
-214 0 obj
+215 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 213 0 R
+/Contents 214 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
 >>
 >>
-/Annots [215 0 R 216 0 R 217 0 R 218 0 R]
+/Annots [216 0 R 217 0 R 218 0 R 219 0 R]
 >>
 endobj
-215 0 obj
+216 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -116772,7 +116795,7 @@ endobj
 /Type /Annot
 >>
 endobj
-216 0 obj
+217 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -116783,7 +116806,7 @@ endobj
 /Type /Annot
 >>
 endobj
-217 0 obj
+218 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -116794,7 +116817,7 @@ endobj
 /Type /Annot
 >>
 endobj
-218 0 obj
+219 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -116805,7 +116828,7 @@ endobj
 /Type /Annot
 >>
 endobj
-219 0 obj
+220 0 obj
 << /Length 10665
 >>
 stream
@@ -117295,11 +117318,11 @@ Q
 
 endstream
 endobj
-220 0 obj
+221 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 219 0 R
+/Contents 220 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -117308,7 +117331,7 @@ endobj
 >>
 >>
 endobj
-221 0 obj
+222 0 obj
 << /Length 10517
 >>
 stream
@@ -117809,11 +117832,11 @@ Q
 
 endstream
 endobj
-222 0 obj
+223 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 221 0 R
+/Contents 222 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -117821,7 +117844,7 @@ endobj
 >>
 >>
 endobj
-223 0 obj
+224 0 obj
 << /Length 9825
 >>
 stream
@@ -118295,11 +118318,11 @@ Q
 
 endstream
 endobj
-224 0 obj
+225 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 223 0 R
+/Contents 224 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -118307,7 +118330,7 @@ endobj
 >>
 >>
 endobj
-225 0 obj
+226 0 obj
 << /Length 11186
 >>
 stream
@@ -118831,11 +118854,11 @@ Q
 
 endstream
 endobj
-226 0 obj
+227 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 225 0 R
+/Contents 226 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -118843,7 +118866,7 @@ endobj
 >>
 >>
 endobj
-227 0 obj
+228 0 obj
 << /Length 11045
 >>
 stream
@@ -119367,11 +119390,11 @@ Q
 
 endstream
 endobj
-228 0 obj
+229 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 227 0 R
+/Contents 228 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -119379,7 +119402,7 @@ endobj
 >>
 >>
 endobj
-229 0 obj
+230 0 obj
 << /Length 12956
 >>
 stream
@@ -119957,11 +119980,11 @@ Q
 
 endstream
 endobj
-230 0 obj
+231 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 229 0 R
+/Contents 230 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -119969,7 +119992,7 @@ endobj
 >>
 >>
 endobj
-231 0 obj
+232 0 obj
 << /Length 9872
 >>
 stream
@@ -120447,11 +120470,11 @@ Q
 
 endstream
 endobj
-232 0 obj
+233 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 231 0 R
+/Contents 232 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -120459,7 +120482,7 @@ endobj
 >>
 >>
 endobj
-233 0 obj
+234 0 obj
 << /Length 9813
 >>
 stream
@@ -120959,20 +120982,20 @@ Q
 
 endstream
 endobj
-234 0 obj
+235 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 233 0 R
+/Contents 234 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
 >>
 >>
-/Annots [235 0 R 236 0 R]
+/Annots [236 0 R 237 0 R]
 >>
 endobj
-235 0 obj
+236 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -120983,7 +121006,7 @@ endobj
 /Type /Annot
 >>
 endobj
-236 0 obj
+237 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -120994,7 +121017,7 @@ endobj
 /Type /Annot
 >>
 endobj
-237 0 obj
+238 0 obj
 << /Length 10464
 >>
 stream
@@ -121498,20 +121521,20 @@ Q
 
 endstream
 endobj
-238 0 obj
+239 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 237 0 R
+/Contents 238 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
 >>
 >>
-/Annots [239 0 R 240 0 R]
+/Annots [240 0 R 241 0 R]
 >>
 endobj
-239 0 obj
+240 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -121522,7 +121545,7 @@ endobj
 /Type /Annot
 >>
 endobj
-240 0 obj
+241 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -121533,7 +121556,7 @@ endobj
 /Type /Annot
 >>
 endobj
-241 0 obj
+242 0 obj
 << /Length 9043
 >>
 stream
@@ -121977,11 +122000,11 @@ Q
 
 endstream
 endobj
-242 0 obj
+243 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 241 0 R
+/Contents 242 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -121989,7 +122012,7 @@ endobj
 >>
 >>
 endobj
-243 0 obj
+244 0 obj
 << /Length 10945
 >>
 stream
@@ -122494,11 +122517,11 @@ Q
 
 endstream
 endobj
-244 0 obj
+245 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 243 0 R
+/Contents 244 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -122506,7 +122529,7 @@ endobj
 >>
 >>
 endobj
-245 0 obj
+246 0 obj
 << /Length 9728
 >>
 stream
@@ -122965,11 +122988,11 @@ Q
 
 endstream
 endobj
-246 0 obj
+247 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 245 0 R
+/Contents 246 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -122977,7 +123000,7 @@ endobj
 >>
 >>
 endobj
-247 0 obj
+248 0 obj
 << /Length 9827
 >>
 stream
@@ -123451,11 +123474,11 @@ Q
 
 endstream
 endobj
-248 0 obj
+249 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 247 0 R
+/Contents 248 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -123463,7 +123486,7 @@ endobj
 >>
 >>
 endobj
-249 0 obj
+250 0 obj
 << /Length 9168
 >>
 stream
@@ -123910,11 +123933,11 @@ Q
 
 endstream
 endobj
-250 0 obj
+251 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 249 0 R
+/Contents 250 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -123922,7 +123945,7 @@ endobj
 >>
 >>
 endobj
-251 0 obj
+252 0 obj
 << /Length 10254
 >>
 stream
@@ -124396,11 +124419,11 @@ Q
 
 endstream
 endobj
-252 0 obj
+253 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 251 0 R
+/Contents 252 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -124408,7 +124431,7 @@ endobj
 >>
 >>
 endobj
-253 0 obj
+254 0 obj
 << /Length 11311
 >>
 stream
@@ -124913,11 +124936,11 @@ Q
 
 endstream
 endobj
-254 0 obj
+255 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 253 0 R
+/Contents 254 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -124925,7 +124948,7 @@ endobj
 >>
 >>
 endobj
-255 0 obj
+256 0 obj
 << /Length 9144
 >>
 stream
@@ -125368,20 +125391,20 @@ Q
 
 endstream
 endobj
-256 0 obj
+257 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 255 0 R
+/Contents 256 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
 >>
 >>
-/Annots [257 0 R]
+/Annots [258 0 R]
 >>
 endobj
-257 0 obj
+258 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -125392,7 +125415,7 @@ endobj
 /Type /Annot
 >>
 endobj
-258 0 obj
+259 0 obj
 << /Length 11293
 >>
 stream
@@ -125916,20 +125939,20 @@ Q
 
 endstream
 endobj
-259 0 obj
+260 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 258 0 R
+/Contents 259 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
 >>
 >>
-/Annots [260 0 R 261 0 R 262 0 R]
+/Annots [261 0 R 262 0 R 263 0 R]
 >>
 endobj
-260 0 obj
+261 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -125940,7 +125963,7 @@ endobj
 /Type /Annot
 >>
 endobj
-261 0 obj
+262 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -125951,7 +125974,7 @@ endobj
 /Type /Annot
 >>
 endobj
-262 0 obj
+263 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -125962,7 +125985,7 @@ endobj
 /Type /Annot
 >>
 endobj
-263 0 obj
+264 0 obj
 << /Length 11716
 >>
 stream
@@ -126486,11 +126509,11 @@ Q
 
 endstream
 endobj
-264 0 obj
+265 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 263 0 R
+/Contents 264 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -126498,7 +126521,7 @@ endobj
 >>
 >>
 endobj
-265 0 obj
+266 0 obj
 << /Length 9936
 >>
 stream
@@ -126976,11 +126999,11 @@ Q
 
 endstream
 endobj
-266 0 obj
+267 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 265 0 R
+/Contents 266 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -126988,7 +127011,7 @@ endobj
 >>
 >>
 endobj
-267 0 obj
+268 0 obj
 << /Length 9494
 >>
 stream
@@ -127447,11 +127470,11 @@ Q
 
 endstream
 endobj
-268 0 obj
+269 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 267 0 R
+/Contents 268 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -127459,7 +127482,7 @@ endobj
 >>
 >>
 endobj
-269 0 obj
+270 0 obj
 << /Length 11932
 >>
 stream
@@ -128075,11 +128098,11 @@ Q
 
 endstream
 endobj
-270 0 obj
+271 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 269 0 R
+/Contents 270 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -128089,16 +128112,16 @@ endobj
 >>
 >>
 endobj
-271 0 obj
-[270 0 R /XYZ 0 552.6600000000001 null]
-endobj
 272 0 obj
-[270 0 R /XYZ 0 393.9000000000002 null]
+[271 0 R /XYZ 0 552.6600000000001 null]
 endobj
 273 0 obj
-[270 0 R /XYZ 0 266.70000000000016 null]
+[271 0 R /XYZ 0 393.9000000000002 null]
 endobj
 274 0 obj
+[271 0 R /XYZ 0 266.70000000000016 null]
+endobj
+275 0 obj
 << /Length 35689
 >>
 stream
@@ -130517,11 +130540,11 @@ Q
 
 endstream
 endobj
-275 0 obj
+276 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 274 0 R
+/Contents 275 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -130529,13 +130552,13 @@ endobj
 /F2.0 10 0 R
 >>
 >>
-/Annots [277 0 R]
+/Annots [278 0 R]
 >>
 endobj
-276 0 obj
-[275 0 R /XYZ 0 309.57000000000016 null]
-endobj
 277 0 obj
+[276 0 R /XYZ 0 309.57000000000016 null]
+endobj
+278 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -130546,7 +130569,7 @@ endobj
 /Type /Annot
 >>
 endobj
-278 0 obj
+279 0 obj
 << /Length 911
 >>
 stream
@@ -130620,19 +130643,19 @@ Q
 
 endstream
 endobj
-279 0 obj
+280 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 278 0 R
+/Contents 279 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 >>
 >>
-/Annots [280 0 R]
+/Annots [281 0 R]
 >>
 endobj
-280 0 obj
+281 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -130643,7 +130666,7 @@ endobj
 /Type /Annot
 >>
 endobj
-281 0 obj
+282 0 obj
 << /Length 8021
 >>
 stream
@@ -131222,11 +131245,11 @@ Q
 
 endstream
 endobj
-282 0 obj
+283 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 281 0 R
+/Contents 282 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -131237,16 +131260,16 @@ endobj
 >>
 >>
 endobj
-283 0 obj
-[282 0 R /XYZ 0 792.0 null]
-endobj
 284 0 obj
-[282 0 R /XYZ 0 712.0799999999999 null]
+[283 0 R /XYZ 0 792.0 null]
 endobj
 285 0 obj
-[282 0 R /XYZ 0 537.5400000000001 null]
+[283 0 R /XYZ 0 712.0799999999999 null]
 endobj
 286 0 obj
+[283 0 R /XYZ 0 537.5400000000001 null]
+endobj
+287 0 obj
 << /Length 15515
 >>
 stream
@@ -132229,11 +132252,11 @@ Q
 
 endstream
 endobj
-287 0 obj
+288 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 286 0 R
+/Contents 287 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F2.0 10 0 R
@@ -132243,10 +132266,10 @@ endobj
 >>
 >>
 endobj
-288 0 obj
-[287 0 R /XYZ 0 265.05999999999983 null]
-endobj
 289 0 obj
+[288 0 R /XYZ 0 265.05999999999983 null]
+endobj
+290 0 obj
 << /Length 7187
 >>
 stream
@@ -132663,11 +132686,11 @@ Q
 
 endstream
 endobj
-290 0 obj
+291 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 289 0 R
+/Contents 290 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F2.0 10 0 R
@@ -132677,15 +132700,15 @@ endobj
 >>
 >>
 endobj
-291 0 obj
-[290 0 R /XYZ 0 589.34 null]
-endobj
 292 0 obj
-<< /Limits [(jdo) (keysize.attributes)]
-/Names [(jdo) 1662 0 R (jira) 2772 0 R (jmx_config) 349 0 R (joins) 623 0 R (junit) 3092 0 R (jvm) 1898 0 R (jython) 1687 0 R (jython-code-examples) 1689 0 R (keeping-track-of-logs) 2633 0 R (keysize) 674 0 R (keysize.attributes) 684 0 R]
->>
+[291 0 R /XYZ 0 589.34 null]
 endobj
 293 0 obj
+<< /Limits [(jdo) (keysize.cf)]
+/Names [(jdo) 1665 0 R (jira) 2776 0 R (jmx_config) 350 0 R (joins) 625 0 R (junit) 3096 0 R (jvm) 1901 0 R (jython) 1690 0 R (jython-code-examples) 1692 0 R (keeping-track-of-logs) 2636 0 R (keysize) 676 0 R (keysize.attributes) 686 0 R (keysize.cf) 684 0 R]
+>>
+endobj
+294 0 obj
 << /Length 12975
 >>
 stream
@@ -133306,11 +133329,11 @@ Q
 
 endstream
 endobj
-294 0 obj
+295 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 293 0 R
+/Contents 294 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -133319,16 +133342,16 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [297 0 R 298 0 R 300 0 R 301 0 R 302 0 R 304 0 R]
+/Annots [298 0 R 299 0 R 301 0 R 302 0 R 303 0 R 305 0 R]
 >>
 endobj
-295 0 obj
-[294 0 R /XYZ 0 792.0 null]
-endobj
 296 0 obj
-[294 0 R /XYZ 0 668.52 null]
+[295 0 R /XYZ 0 792.0 null]
 endobj
 297 0 obj
+[295 0 R /XYZ 0 668.52 null]
+endobj
+298 0 obj
 << /Border [0 0 0]
 /Dest (#os)
 /Subtype /Link
@@ -133336,7 +133359,7 @@ endobj
 /Type /Annot
 >>
 endobj
-298 0 obj
+299 0 obj
 << /Border [0 0 0]
 /Dest (#hadoop)
 /Subtype /Link
@@ -133344,10 +133367,10 @@ endobj
 /Type /Annot
 >>
 endobj
-299 0 obj
-[294 0 R /XYZ 0 600.6600000000001 null]
-endobj
 300 0 obj
+[295 0 R /XYZ 0 600.6600000000001 null]
+endobj
+301 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -133358,7 +133381,7 @@ endobj
 /Type /Annot
 >>
 endobj
-301 0 obj
+302 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -133369,7 +133392,7 @@ endobj
 /Type /Annot
 >>
 endobj
-302 0 obj
+303 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -133380,10 +133403,10 @@ endobj
 /Type /Annot
 >>
 endobj
-303 0 obj
-[294 0 R /XYZ 0 461.7000000000002 null]
-endobj
 304 0 obj
+[295 0 R /XYZ 0 461.7000000000002 null]
+endobj
+305 0 obj
 << /Border [0 0 0]
 /Dest (#fail.fast.expired.active.master)
 /Subtype /Link
@@ -133391,16 +133414,16 @@ endobj
 /Type /Annot
 >>
 endobj
-305 0 obj
-[294 0 R /XYZ 0 354.3000000000002 null]
-endobj
 306 0 obj
-[294 0 R /XYZ 0 314.22000000000014 null]
+[295 0 R /XYZ 0 354.3000000000002 null]
 endobj
 307 0 obj
-[294 0 R /XYZ 0 281.9400000000001 null]
+[295 0 R /XYZ 0 314.22000000000014 null]
 endobj
 308 0 obj
+[295 0 R /XYZ 0 281.9400000000001 null]
+endobj
+309 0 obj
 << /Length 13276
 >>
 stream
@@ -134011,11 +134034,11 @@ Q
 
 endstream
 endobj
-309 0 obj
+310 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 308 0 R
+/Contents 309 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F2.0 10 0 R
@@ -134024,13 +134047,13 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [311 0 R 315 0 R]
+/Annots [312 0 R 316 0 R]
 >>
 endobj
-310 0 obj
-[309 0 R /XYZ 0 713.19 null]
-endobj
 311 0 obj
+[310 0 R /XYZ 0 713.19 null]
+endobj
+312 0 obj
 << /Border [0 0 0]
 /Dest (#zookeeper)
 /Subtype /Link
@@ -134038,16 +134061,16 @@ endobj
 /Type /Annot
 >>
 endobj
-312 0 obj
-[309 0 R /XYZ 0 657.0300000000002 null]
-endobj
 313 0 obj
-[309 0 R /XYZ 0 624.7500000000003 null]
+[310 0 R /XYZ 0 657.0300000000002 null]
 endobj
 314 0 obj
-[309 0 R /XYZ 0 537.0300000000004 null]
+[310 0 R /XYZ 0 624.7500000000003 null]
 endobj
 315 0 obj
+[310 0 R /XYZ 0 537.0300000000004 null]
+endobj
+316 0 obj
 << /Border [0 0 0]
 /Dest (#rpc.logging)
 /Subtype /Link
@@ -134055,18 +134078,18 @@ endobj
 /Type /Annot
 >>
 endobj
-316 0 obj
-[309 0 R /XYZ 0 204.2700000000005 null]
-endobj
 317 0 obj
-<< /Limits [(connection-setup) (datamodel)]
-/Names [(connection-setup) 3518 0 R (constraints) 760 0 R (contributing-to-documentation-or-other-strings) 3191 0 R (coprocessor-implementation-overview) 1776 0 R (coprocessor-overview) 1773 0 R (coprocessors) 1238 0 R (copytable) 2473 0 R (count) 513 0 R (counters) 718 0 R (cp) 1765 0 R (cp_analogies) 1775 0 R (cp_example) 1838 0 R (cp_loading) 1816 0 R (creating-a-table-with-region-replication) 1554 0 R (current-limitations) 609 0 R (custom-split-policies) 1370 0 R (data-model-operations) 553 0 R (data.block.encoding.enable) 3372 0 R (data.blocks.in.fscache) 1265 0 R (datamodel) 514 0 R]
->>
+[310 0 R /XYZ 0 204.2700000000005 null]
 endobj
 318 0 obj
-[309 0 R /XYZ 0 112.65000000000046 null]
+<< /Limits [(connection-setup) (cp)]
+/Names [(connection-setup) 3521 0 R (constraints) 762 0 R (contributing-to-documentation-or-other-strings) 3195 0 R (coprocessor-implementation-overview) 1778 0 R (coprocessor-overview) 1775 0 R (coprocessors) 1240 0 R (copy.table) 2476 0 R (count) 515 0 R (counters) 720 0 R (cp) 1767 0 R]
+>>
 endobj
 319 0 obj
+[310 0 R /XYZ 0 112.65000000000046 null]
+endobj
+320 0 obj
 << /Length 16158
 >>
 stream
@@ -134909,11 +134932,11 @@ Q
 
 endstream
 endobj
-320 0 obj
+321 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 319 0 R
+/Contents 320 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F2.0 10 0 R
@@ -134921,10 +134944,10 @@ endobj
 /F3.0 31 0 R
 >>
 >>
-/Annots [321 0 R 323 0 R 325 0 R]
+/Annots [322 0 R 324 0 R 326 0 R]
 >>
 endobj
-321 0 obj
+322 0 obj
 << /Border [0 0 0]
 /Dest (#compression)
 /Subtype /Link
@@ -134932,10 +134955,10 @@ endobj
 /Type /Annot
 >>
 endobj
-322 0 obj
-[320 0 R /XYZ 0 701.19 null]
-endobj
 323 0 obj
+[321 0 R /XYZ 0 701.19 null]
+endobj
+324 0 obj
 << /Border [0 0 0]
 /Dest (#wal)
 /Subtype /Link
@@ -134943,10 +134966,10 @@ endobj
 /Type /Annot
 >>
 endobj
-324 0 obj
-[320 0 R /XYZ 0 487.1100000000001 null]
-endobj
 325 0 obj
+[321 0 R /XYZ 0 487.1100000000001 null]
+endobj
+326 0 obj
 << /Border [0 0 0]
 /Dest (#manual_region_splitting_decisions)
 /Subtype /Link
@@ -134954,7 +134977,7 @@ endobj
 /Type /Annot
 >>
 endobj
-326 0 obj
+327 0 obj
 << /Length 12971
 >>
 stream
@@ -135647,11 +135670,11 @@ Q
 
 endstream
 endobj
-327 0 obj
+328 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 326 0 R
+/Contents 327 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -135659,13 +135682,13 @@ endobj
 /F4.0 40 0 R
 >>
 >>
-/Annots [329 0 R 330 0 R 331 0 R 335 0 R]
+/Annots [330 0 R 331 0 R 332 0 R 336 0 R]
 >>
 endobj
-328 0 obj
-[327 0 R /XYZ 0 574.9499999999999 null]
-endobj
 329 0 obj
+[328 0 R /XYZ 0 574.9499999999999 null]
+endobj
+330 0 obj
 << /Border [0 0 0]
 /Dest (#compaction.parameters)
 /Subtype /Link
@@ -135673,7 +135696,7 @@ endobj
 /Type /Annot
 >>
 endobj
-330 0 obj
+331 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -135684,7 +135707,7 @@ endobj
 /Type /Annot
 >>
 endobj
-331 0 obj
+332 0 obj
 << /Border [0 0 0]
 /Dest (#compaction)
 /Subtype /Link
@@ -135692,16 +135715,16 @@ endobj
 /Type /Annot
 >>
 endobj
-332 0 obj
-[327 0 R /XYZ 0 333.8700000000001 null]
-endobj
 333 0 obj
-[327 0 R /XYZ 0 226.47000000000008 null]
+[328 0 R /XYZ 0 333.8700000000001 null]
 endobj
 334 0 obj
-[327 0 R /XYZ 0 186.39000000000007 null]
+[328 0 R /XYZ 0 226.47000000000008 null]
 endobj
 335 0 obj
+[328 0 R /XYZ 0 186.39000000000007 null]
+endobj
+336 0 obj
 << /Border [0 0 0]
 /Dest (#master.processes.loadbalancer)
 /Subtype /Link
@@ -135709,7 +135732,7 @@ endobj
 /Type /Annot
 >>
 endobj
-336 0 obj
+337 0 obj
 << /Length 16712
 >>
 stream
@@ -136649,11 +136672,11 @@ Q
 
 endstream
 endobj
-337 0 obj
+338 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 336 0 R
+/Contents 337 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -136661,21 +136684,21 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [341 0 R 342 0 R 343 0 R 345 0 R 346 0 R]
+/Annots [342 0 R 343 0 R 344 0 R 346 0 R 347 0 R]
 >>
 endobj
-338 0 obj
-[337 0 R /XYZ 0 792.0 null]
-endobj
 339 0 obj
-[337 0 R /XYZ 0 635.2200000000001 null]
+[338 0 R /XYZ 0 792.0 null]
 endobj
 340 0 obj
-<< /Limits [(recommended.configurations.hdfs) (regionserver.arch.processes.memstore)]
-/Names [(recommended.configurations.hdfs) 312 0 R (recommended_configurations.zk) 306 0 R (region-overlap-repairs) 3290 0 R (region-replication-for-meta-table-s-region) 1535 0 R (regions.arch) 1337 0 R (regions.arch.assignment) 1348 0 R (regions.arch.assignment.failover) 1350 0 R (regions.arch.assignment.startup) 1349 0 R (regions.arch.balancer) 1353 0 R (regions.arch.locality) 1363 0 R (regions.arch.states) 1355 0 R (regionserver.arch) 1230 0 R (regionserver.arch.api) 1232 0 R (regionserver.arch.processes) 1233 0 R (regionserver.arch.processes.compactsplit) 1234 0 R (regionserver.arch.processes.log) 1237 0 R (regionserver.arch.processes.majorcompact) 1235 0 R (regionserver.arch.processes.memstore) 1236 0 R]
->>
+[338 0 R /XYZ 0 635.2200000000001 null]
 endobj
 341 0 obj
+<< /Limits [(recommended_configurations) (regionserver.arch.processes.memstore)]
+/Names [(recommended_configurations) 306 0 R (recommended_configurations.zk) 307 0 R (region-overlap-repairs) 3294 0 R (region-replication-for-meta-table-s-region) 1538 0 R (regions.arch) 1339 0 R (regions.arch.assignment) 1350 0 R (regions.arch.assignment.failover) 1352 0 R (regions.arch.assignment.startup) 1351 0 R (regions.arch.balancer) 1355 0 R (regions.arch.locality) 1365 0 R (regions.arch.states) 1357 0 R (regionserver.arch) 1232 0 R (regionserver.arch.api) 1234 0 R (regionserver.arch.processes) 1235 0 R (regionserver.arch.processes.compactsplit) 1236 0 R (regionserver.arch.processes.log) 1239 0 R (regionserver.arch.processes.majorcompact) 1237 0 R (regionserver.arch.processes.memstore) 1238 0 R]
+>>
+endobj
+342 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -136686,7 +136709,7 @@ endobj
 /Type /Annot
 >>
 endobj
-342 0 obj
+343 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -136697,7 +136720,7 @@ endobj
 /Type /Annot
 >>
 endobj
-343 0 obj
+344 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -136708,10 +136731,10 @@ endobj
 /Type /Annot
 >>
 endobj
-344 0 obj
-[337 0 R /XYZ 0 512.0400000000003 null]
-endobj
 345 0 obj
+[338 0 R /XYZ 0 512.0400000000003 null]
+endobj
+346 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -136722,7 +136745,7 @@ endobj
 /Type /Annot
 >>
 endobj
-346 0 obj
+347 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -136733,7 +136756,7 @@ endobj
 /Type /Annot
 >>
 endobj
-347 0 obj
+348 0 obj
 << /Length 20833
 >>
 stream
@@ -138074,24 +138097,24 @@ Q
 
 endstream
 endobj
-348 0 obj
+349 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 347 0 R
+/Contents 348 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F2.0 10 0 R
 /F1.0 11 0 R
 >>
 >>
-/Annots [350 0 R 351 0 R]
+/Annots [351 0 R 352 0 R]
 >>
 endobj
-349 0 obj
-[348 0 R /XYZ 0 206.0999999999998 null]
-endobj
 350 0 obj
+[349 0 R /XYZ 0 206.0999999999998 null]
+endobj
+351 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -138102,7 +138125,7 @@ endobj
 /Type /Annot
 >>
 endobj
-351 0 obj
+352 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -138113,7 +138136,7 @@ endobj
 /Type /Annot
 >>
 endobj
-352 0 obj
+353 0 obj
 << /Length 13768
 >>
 stream
@@ -138889,11 +138912,11 @@ Q
 
 endstream
 endobj
-353 0 obj
+354 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 352 0 R
+/Contents 353 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F4.0 40 0 R
@@ -138903,7 +138926,7 @@ endobj
 >>
 >>
 endobj
-354 0 obj
+355 0 obj
 << /Length 12791
 >>
 stream
@@ -139542,11 +139565,11 @@ Q
 
 endstream
 endobj
-355 0 obj
+356 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 354 0 R
+/Contents 355 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -139556,8 +139579,8 @@ endobj
 >>
 >>
 endobj
-356 0 obj
-<< /Length 9283
+357 0 obj
+<< /Length 9460
 >>
 stream
 q
@@ -139985,7 +140008,7 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-10.133 Tw
+2.429 Tw
 
 BT
 48.240000000000016 392.8559999999999 Td
@@ -140000,10 +140023,10 @@ ET
 0.259 0.545 0.792 scn
 0.259 0.545 0.792 SCN
 
-10.133 Tw
+2.429 Tw
 
 BT
-97.67423502604169 392.8559999999999 Td
+89.97005593039773 392.8559999999999 Td
 /F1.0 10.5 Tf
 [<41706163686520484261736520436f6e6669677572> 20.01953125 <6174696f6e>] TJ
 ET
@@ -140015,10 +140038,10 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-10.133 Tw
+2.429 Tw
 
 BT
-261.29600000000005 392.8559999999999 Td
+238.1834627130682 392.8559999999999 Td
 /F1.0 10.5 Tf
 <2c20696e20706172746963756c617220> Tj
 ET
@@ -140030,10 +140053,10 @@ ET
 0.259 0.545 0.792 scn
 0.259 0.545 0.792 SCN
 
-10.133 Tw
+2.429 Tw
 
 BT
-362.85270507812504 392.8559999999999 Td
+316.62763050426133 392.8559999999999 Td
 /F1.0 10.5 Tf
 <4861646f6f70> Tj
 ET
@@ -140045,12 +140068,27 @@ ET
 0.200 0.200 0.200 scn
 0.200 0.200 0.200 SCN
 
-10.133 Tw
+2.429 Tw
+
+BT
+355.8346305042613 392.8559999999999 Td
+/F1.0 10.5 Tf
+[<2e2046> 40.0390625 <616d696c696172697a6520796f757273656c66207769746820>] TJ
+ET
+
+
+0.000 Tw
+0.000 0.000 0.000 SCN
+0.000 0.000 0.000 scn
+0.259 0.545 0.792 scn
+0.259 0.545 0.792 SCN
+
+2.429 Tw
 
 BT
-402.05970507812503 392.8559999999999 Td
+499.5704440696022 392.8559999999999 Td
 /F1.0 10.5 Tf
-[<2e2046> 40.0390625 <616d696c696172697a6520796f757273656c662077697468>] TJ
+<537570706f727420616e64> Tj
 ET
 
 
@@ -140063,7 +140101,7 @@ ET
 BT
 48.240000000000016 377.0759999999999 Td
 /F1.0 10.5 Tf
-<5b68626173655f737570706f727465645f7465737465645f646566696e6974696f6e735d> Tj
+[<54> 29.78515625 <657374696e67204578706563746174696f6e73>] TJ
 ET
 
 0.000 0.000 0.000 SCN
@@ -140072,7 +140110,7 @@ ET
 0.200 0.200 0.200 SCN
 
 BT
-234.38400000000001 377.0759999999999 Td
+150.93225585937503 377.0759999999999 Td
 /F1.0 10.5 Tf
 <2e> Tj
 ET
@@ -140109,11 +140147,11 @@ Q
 
 endstream
 endobj
-357 0 obj
+358 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 356 0 R
+/Contents 357 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -140121,13 +140159,13 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [359 0 R 360 0 R 362 0 R 363 0 R 364 0 R 365 0 R]
+/Annots [360 0 R 361 0 R 363 0 R 364 0 R 365 0 R 366 0 R 367 0 R]
 >>
 endobj
-358 0 obj
-[357 0 R /XYZ 0 792.0 null]
-endobj
 359 0 obj
+[358 0 R /XYZ 0 792.0 null]
+endobj
+360 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -140138,7 +140176,7 @@ endobj
 /Type /Annot
 >>
 endobj
-360 0 obj
+361 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -140149,45 +140187,53 @@ endobj
 /Type /Annot
 >>
 endobj
-361 0 obj
-[357 0 R /XYZ 0 546.06 null]
-endobj
 362 0 obj
+[358 0 R /XYZ 0 546.06 null]
+endobj
+363 0 obj
 << /Border [0 0 0]
 /Dest (#configuration)
 /Subtype /Link
-/Rect [97.67423502604169 389.7899999999999 261.29600000000005 404.0699999999999]
+/Rect [89.97005593039773 389.7899999999999 238.1834627130682 404.0699999999999]
 /Type /Annot
 >>
 endobj
-363 0 obj
+364 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
 /URI (http://hadoop.apache.org)
 >>
 /Subtype /Link
-/Rect [362.85270507812504 389.7899999999999 402.05970507812503 404.0699999999999]
+/Rect [316.62763050426133 389.7899999999999 355.8346305042613 404.0699999999999]
 /Type /Annot
 >>
 endobj
-364 0 obj
+365 0 obj
 << /Border [0 0 0]
 /Dest (#hadoop)
 /Subtype /Link
-/Rect [362.85270507812504 389.7899999999999 402.05970507812503 404.0699999999999]
+/Rect [316.62763050426133 389.7899999999999 355.8346305042613 404.0699999999999]
 /Type /Annot
 >>
 endobj
-365 0 obj
+366 0 obj
 << /Border [0 0 0]
 /Dest (#hbase_supported_tested_definitions)
 /Subtype /Link
-/Rect [48.240000000000016 374.00999999999993 234.38400000000001 388.2899999999999]
+/Rect [499.5704440696022 389.7899999999999 563.76 404.0699999999999]
 /Type /Annot
 >>
 endobj
-366 0 obj
+367 0 obj
+<< /Border [0 0 0]
+/Dest (#hbase_supported_tested_definitions)
+/Subtype /Link
+/Rect [48.240000000000016 374.00999999999993 150.93225585937503 388.2899999999999]
+/Type /Annot
+>>
+endobj
+368 0 obj
 << /Length 10676
 >>
 stream
@@ -140729,26 +140775,26 @@ Q
 
 endstream
 endobj
-367 0 obj
+369 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 366 0 R
+/Contents 368 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
 >>
 >>
-/Annots [370 0 R]
+/Annots [372 0 R]
 >>
 endobj
-368 0 obj
-[367 0 R /XYZ 0 792.0 null]
+370 0 obj
+[369 0 R /XYZ 0 792.0 null]
 endobj
-369 0 obj
-[367 0 R /XYZ 0 649.9799999999999 null]
+371 0 obj
+[369 0 R /XYZ 0 649.9799999999999 null]
 endobj
-370 0 obj
+372 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -140759,7 +140805,7 @@ endobj
 /Type /Annot
 >>
 endobj
-371 0 obj
+373 0 obj
 << /Length 14569
 >>
 stream
@@ -141547,21 +141593,21 @@ Q
 
 endstream
 endobj
-372 0 obj
+374 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 371 0 R
+/Contents 373 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
 /F4.0 40 0 R
 >>
 >>
-/Annots [373 0 R]
+/Annots [375 0 R]
 >>
 endobj
-373 0 obj
+375 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -141572,7 +141618,7 @@ endobj
 /Type /Annot
 >>
 endobj
-374 0 obj
+376 0 obj
 << /Length 26847
 >>
 stream
@@ -143536,24 +143582,24 @@ Q
 
 endstream
 endobj
-375 0 obj
+377 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 374 0 R
+/Contents 376 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F2.0 10 0 R
 /F4.0 40 0 R
 >>
 >>
-/Annots [377 0 R 378 0 R]
+/Annots [379 0 R 380 0 R]
 >>
 endobj
-376 0 obj
-[375 0 R /XYZ 0 288.0 null]
+378 0 obj
+[377 0 R /XYZ 0 288.0 null]
 endobj
-377 0 obj
+379 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -143564,7 +143610,7 @@ endobj
 /Type /Annot
 >>
 endobj
-378 0 obj
+380 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -143575,7 +143621,7 @@ endobj
 /Type /Annot
 >>
 endobj
-379 0 obj
+381 0 obj
 << /Length 13294
 >>
 stream
@@ -144161,24 +144207,24 @@ Q
 
 endstream
 endobj
-380 0 obj
+382 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 379 0 R
+/Contents 381 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F4.0 40 0 R
 /F2.0 10 0 R
 >>
 >>
-/Annots [382 0 R]
+/Annots [384 0 R]
 >>
 endobj
-381 0 obj
-[380 0 R /XYZ 0 476.05000000000007 null]
+383 0 obj
+[382 0 R /XYZ 0 476.05000000000007 null]
 endobj
-382 0 obj
+384 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -144189,7 +144235,7 @@ endobj
 /Type /Annot
 >>
 endobj
-383 0 obj
+385 0 obj
 << /Length 10069
 >>
 stream
@@ -144686,24 +144732,24 @@ Q
 
 endstream
 endobj
-384 0 obj
+386 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 383 0 R
+/Contents 385 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
 /F3.0 31 0 R
 >>
 >>
-/Annots [386 0 R 387 0 R 388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R]
+/Annots [388 0 R 389 0 R 390 0 R 391 0 R 392 0 R 393 0 R 394 0 R 395 0 R]
 >>
 endobj
-385 0 obj
-[384 0 R /XYZ 0 792.0 null]
+387 0 obj
+[386 0 R /XYZ 0 792.0 null]
 endobj
-386 0 obj
+388 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.rolling.restart)
 /Subtype /Link
@@ -144711,7 +144757,7 @@ endobj
 /Type /Annot
 >>
 endobj
-387 0 obj
+389 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.rolling.restart)
 /Subtype /Link
@@ -144719,7 +144765,7 @@ endobj
 /Type /Annot
 >>
 endobj
-388 0 obj
+390 0 obj
 << /Border [0 0 0]
 /Dest (#rolling)
 /Subtype /Link
@@ -144727,7 +144773,7 @@ endobj
 /Type /Annot
 >>
 endobj
-389 0 obj
+391 0 obj
 << /Border [0 0 0]
 /Dest (#rolling)
 /Subtype /Link
@@ -144735,7 +144781,7 @@ endobj
 /Type /Annot
 >>
 endobj
-390 0 obj
+392 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.rolling.upgrade)
 /Subtype /Link
@@ -144743,7 +144789,7 @@ endobj
 /Type /Annot
 >>
 endobj
-391 0 obj
+393 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.rolling.upgrade)
 /Subtype /Link
@@ -144751,7 +144797,7 @@ endobj
 /Type /Annot
 >>
 endobj
-392 0 obj
+394 0 obj
 << /Border [0 0 0]
 /Dest (#upgrade1.0.rolling.upgrade)
 /Subtype /Link
@@ -144759,7 +144805,7 @@ endobj
 /Type /Annot
 >>
 endobj
-393 0 obj
+395 0 obj
 << /Border [0 0 0]
 /Dest (#upgrade1.0.rolling.upgrade)
 /Subtype /Link
@@ -144767,7 +144813,7 @@ endobj
 /Type /Annot
 >>
 endobj
-394 0 obj
+396 0 obj
 << /Length 15926
 >>
 stream
@@ -145555,11 +145601,11 @@ Q
 
 endstream
 endobj
-395 0 obj
+397 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 394 0 R
+/Contents 396 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -145568,19 +145614,19 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [399 0 R 400 0 R 401 0 R 402 0 R 403 0 R 404 0 R 405 0 R]
+/Annots [401 0 R 402 0 R 403 0 R 404 0 R 405 0 R 406 0 R 407 0 R]
 >>
 endobj
-396 0 obj
-[395 0 R /XYZ 0 792.0 null]
-endobj
-397 0 obj
-[395 0 R /XYZ 0 712.0799999999999 null]
-endobj
 398 0 obj
-[395 0 R /XYZ 0 628.44 null]
+[397 0 R /XYZ 0 792.0 null]
 endobj
 399 0 obj
+[397 0 R /XYZ 0 712.0799999999999 null]
+endobj
+400 0 obj
+[397 0 R /XYZ 0 628.44 null]
+endobj
+401 0 obj
 << /Border [0 0 0]
 /Dest (#zookeeper.requirements)
 /Subtype /Link
@@ -145588,7 +145634,7 @@ endobj
 /Type /Annot
 >>
 endobj
-400 0 obj
+402 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -145599,7 +145645,7 @@ endobj
 /Type /Annot
 >>
 endobj
-401 0 obj
+403 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -145610,7 +145656,7 @@ endobj
 /Type /Annot
 >>
 endobj
-402 0 obj
+404 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -145621,7 +145667,7 @@ endobj
 /Type /Annot
 >>
 endobj
-403 0 obj
+405 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -145632,7 +145678,7 @@ endobj
 /Type /Annot
 >>
 endobj
-404 0 obj
+406 0 obj
 << /Border [0 0 0]
 /Dest (#distributed.log.replay)
 /Subtype /Link
@@ -145640,7 +145686,7 @@ endobj
 /Type /Annot
 >>
 endobj
-405 0 obj
+407 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -145651,7 +145697,7 @@ endobj
 /Type /Annot
 >>
 endobj
-406 0 obj
+408 0 obj
 << /Length 14728
 >>
 stream
@@ -146400,11 +146446,11 @@ Q
 
 endstream
 endobj
-407 0 obj
+409 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 406 0 R
+/Contents 408 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -146413,13 +146459,13 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [409 0 R 410 0 R 411 0 R 412 0 R 413 0 R 415 0 R 417 0 R 419 0 R 420 0 R]
+/Annots [411 0 R 412 0 R 413 0 R 414 0 R 415 0 R 417 0 R 419 0 R 421 0 R 422 0 R]
 >>
 endobj
-408 0 obj
-[407 0 R /XYZ 0 681.63 null]
+410 0 obj
+[409 0 R /XYZ 0 681.63 null]
 endobj
-409 0 obj
+411 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.rolling.upgrade)
 /Subtype /Link
@@ -146427,7 +146473,7 @@ endobj
 /Type /Annot
 >>
 endobj
-410 0 obj
+412 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -146438,7 +146484,7 @@ endobj
 /Type /Annot
 >>
 endobj
-411 0 obj
+413 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -146449,7 +146495,7 @@ endobj
 /Type /Annot
 >>
 endobj
-412 0 obj
+414 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -146460,7 +146506,7 @@ endobj
 /Type /Annot
 >>
 endobj
-413 0 obj
+415 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.rolling.upgrade)
 /Subtype /Link
@@ -146468,10 +146514,10 @@ endobj
 /Type /Annot
 >>
 endobj
-414 0 obj
-[407 0 R /XYZ 0 480.33000000000015 null]
+416 0 obj
+[409 0 R /XYZ 0 480.33000000000015 null]
 endobj
-415 0 obj
+417 0 obj
 << /Border [0 0 0]
 /Dest (#executing.the.0.96.upgrade)
 /Subtype /Link
@@ -146479,10 +146525,10 @@ endobj
 /Type /Annot
 >>
 endobj
-416 0 obj
-[407 0 R /XYZ 0 372.9300000000001 null]
+418 0 obj
+[409 0 R /XYZ 0 372.9300000000001 null]
 endobj
-417 0 obj
+419 0 obj
 << /Border [0 0 0]
 /Dest (#security)
 /Subtype /Link
@@ -146490,10 +146536,10 @@ endobj
 /Type /Annot
 >>
 endobj
-418 0 obj
-[407 0 R /XYZ 0 170.61000000000004 null]
+420 0 obj
+[409 0 R /XYZ 0 170.61000000000004 null]
 endobj
-419 0 obj
+421 0 obj
 << /Border [0 0 0]
 /Dest (#upgrade0.96)
 /Subtype /Link
@@ -146501,7 +146547,7 @@ endobj
 /Type /Annot
 >>
 endobj
-420 0 obj
+422 0 obj
 << /Border [0 0 0]
 /Dest (#upgrade0.98)
 /Subtype /Link
@@ -146509,7 +146555,7 @@ endobj
 /Type /Annot
 >>
 endobj
-421 0 obj
+423 0 obj
 << /Length 11569
 >>
 stream
@@ -147066,11 +147112,11 @@ Q
 
 endstream
 endobj
-422 0 obj
+424 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 421 0 R
+/Contents 423 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F4.0 40 0 R
@@ -147078,16 +147124,16 @@ endobj
 /F3.0 31 0 R
 >>
 >>
-/Annots [425 0 R]
+/Annots [427 0 R]
 >>
 endobj
-423 0 obj
-[422 0 R /XYZ 0 792.0 null]
+425 0 obj
+[424 0 R /XYZ 0 792.0 null]
 endobj
-424 0 obj
-[422 0 R /XYZ 0 718.32 null]
+426 0 obj
+[424 0 R /XYZ 0 718.32 null]
 endobj
-425 0 obj
+427 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -147098,10 +147144,10 @@ endobj
 /Type /Annot
 >>
 endobj
-426 0 obj
-[422 0 R /XYZ 0 520.8000000000003 null]
+428 0 obj
+[424 0 R /XYZ 0 520.8000000000003 null]
 endobj
-427 0 obj
+429 0 obj
 << /Length 12821
 >>
 stream
@@ -147756,11 +147802,11 @@ Q
 
 endstream
 endobj
-428 0 obj
+430 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 427 0 R
+/Contents 429 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
@@ -147770,7 +147816,7 @@ endobj
 >>
 >>
 endobj
-429 0 obj
+431 0 obj
 << /Length 12052
 >>
 stream
@@ -148355,11 +148401,11 @@ Q
 
 endstream
 endobj
-430 0 obj
+432 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 429 0 R
+/Contents 431 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F2.0 10 0 R
 /F1.0 11 0 R
@@ -148369,7 +148415,7 @@ endobj
 >>
 >>
 endobj
-431 0 obj
+433 0 obj
 << /Length 13897
 >>
 stream
@@ -149099,47 +149145,47 @@ Q
 
 endstream
 endobj
-432 0 obj
+434 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 431 0 R
+/Contents 433 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F3.0 31 0 R
 /F1.0 11 0 R
 /F2.0 10 0 R
-/F3.1 435 0 R
+/F3.1 437 0 R
 /F4.0 40 0 R
 >>
 >>
 >>
 endobj
-433 0 obj
-[432 0 R /XYZ 0 679.48 null]
+435 0 obj
+[434 0 R /XYZ 0 679.48 null]
 endobj
-434 0 obj
+436 0 obj
 << /Limits [(thrift) (trouble.client.lease.exception)]
-/Names [(thrift) 1696 0 R (thrift) 1654 0 R (thrift.filter_language) 1703 0 R (timeline-consistency) 1518 0 R (timeseries) 667 0 R (todo) 3514 0 R (too_many_regions) 1342 0 R (tools) 2430 0 R (tracing) 3488 0 R (tracing.client.modifications) 3499 0 R (tracing.client.shell) 3502 0 R (tracing.spanreceivers) 3491 0 R (tradeoffs) 1525 0 R (trafodion) 3378 0 R (treat-read-write-failure-as-error) 2453 0 R (trouble) 2114 0 R (trouble.casestudy) 2367 0 R (trouble.client) 2193 0 R (trouble.client.lease.exception) 2203 0 R]
+/Names [(thrift) 1699 0 R (thrift) 1657 0 R (thrift.filter_language) 1706 0 R (timeline-consistency) 1521 0 R (timeseries) 669 0 R (todo) 3517 0 R (too_many_regions) 1344 0 R (tools) 2433 0 R (tracing) 3491 0 R (tracing.client.modifications) 3502 0 R (tracing.client.shell) 3505 0 R (tracing.spanreceivers) 3494 0 R (tradeoffs) 1528 0 R (trafodion) 3381 0 R (treat-read-write-failure-as-error) 2456 0 R (trouble) 2117 0 R (trouble.casestudy) 2370 0 R (trouble.client) 2196 0 R (trouble.client.lease.exception) 2206 0 R]
 >>
 endobj
-435 0 obj
+437 0 obj
 << /Type /Font
 /BaseFont /AAAAAF+mplus1mn-regular
 /Subtype /TrueType
-/FontDescriptor 4159 0 R
+/FontDescriptor 4164 0 R
 /FirstChar 32
 /LastChar 255
-/Widths 4161 0 R
-/ToUnicode 4160 0 R
+/Widths 4166 0 R
+/ToUnicode 4165 0 R
 >>
 endobj
-436 0 obj
-[432 0 R /XYZ 0 282.82000000000005 null]
+438 0 obj
+[434 0 R /XYZ 0 282.82000000000005 null]
 endobj
-437 0 obj
-[432 0 R /XYZ 0 116.08000000000004 null]
+439 0 obj
+[434 0 R /XYZ 0 116.08000000000004 null]
 endobj
-438 0 obj
+440 0 obj
 << /Length 18969
 >>
 stream
@@ -150229,11 +150275,11 @@ Q
 
 endstream
 endobj
-439 0 obj
+441 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 438 0 R
+/Contents 440 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F3.0 31 0 R
@@ -150242,10 +150288,10 @@ endobj
 /F1.1 34 0 R
 >>
 >>
-/Annots [440 0 R 441 0 R 444 0 R 445 0 R 446 0 R 447 0 R 448 0 R]
+/Annots [442 0 R 443 0 R 446 0 R 447 0 R 448 0 R 449 0 R 450 0 R]
 >>
 endobj
-440 0 obj
+442 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -150256,7 +150302,7 @@ endobj
 /Type /Annot
 >>
 endobj
-441 0 obj
+443 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -150267,13 +150313,13 @@ endobj
 /Type /Annot
 >>
 endobj
-442 0 obj
-[439 0 R /XYZ 0 665.85 null]
+444 0 obj
+[441 0 R /XYZ 0 665.85 null]
 endobj
-443 0 obj
-[439 0 R /XYZ 0 625.7700000000001 null]
+445 0 obj
+[441 0 R /XYZ 0 625.7700000000001 null]
 endobj
-444 0 obj
+446 0 obj
 << /Border [0 0 0]
 /Dest (#hfilev2)
 /Subtype /Link
@@ -150281,7 +150327,7 @@ endobj
 /Type /Annot
 >>
 endobj
-445 0 obj
+447 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.hregion.memstore.mslab.enabled)
 /Subtype /Link
@@ -150289,7 +150335,7 @@ endobj
 /Type /Annot
 >>
 endobj
-446 0 obj
+448 0 obj
 << /Border [0 0 0]
 /Dest (#gcpause)
 /Subtype /Link
@@ -150297,7 +150343,7 @@ endobj
 /Type /Annot
 >>
 endobj
-447 0 obj
+449 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -150308,7 +150354,7 @@ endobj
 /Type /Annot
 >>
 endobj
-448 0 obj
+450 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -150319,7 +150365,7 @@ endobj
 /Type /Annot
 >>
 endobj
-449 0 obj
+451 0 obj
 << /Length 16174
 >>
 stream
@@ -151093,20 +151139,20 @@ Q
 
 endstream
 endobj
-450 0 obj
+452 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 449 0 R
+/Contents 451 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F1.1 34 0 R
 >>
 >>
-/Annots [451 0 R 452 0 R 453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R]
+/Annots [453 0 R 454 0 R 455 0 R 456 0 R 457 0 R 458 0 R 459 0 R 460 0 R 461 0 R]
 >>
 endobj
-451 0 obj
+453 0 obj
 << /Border [0 0 0]
 /Dest (#hfilev2)
 /Subtype /Link
@@ -151114,7 +151160,7 @@ endobj
 /Type /Annot
 >>
 endobj
-452 0 obj
+454 0 obj
 << /Border [0 0 0]
 /Dest (#block.cache)
 /Subtype /Link
@@ -151122,7 +151168,7 @@ endobj
 /Type /Annot
 >>
 endobj
-453 0 obj
+455 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -151133,7 +151179,7 @@ endobj
 /Type /Annot
 >>
 endobj
-454 0 obj
+456 0 obj
 << /Border [0 0 0]
 /Dest (#hadoop)
 /Subtype /Link
@@ -151141,7 +151187,7 @@ endobj
 /Type /Annot
 >>
 endobj
-455 0 obj
+457 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -151152,7 +151198,7 @@ endobj
 /Type /Annot
 >>
 endobj
-456 0 obj
+458 0 obj
 << /Border [0 0 0]
 /Dest (#hbase.online.schema.update.enable)
 /Subtype /Link
@@ -151160,7 +151206,7 @@ endobj
 /Type /Annot
 >>
 endobj
-457 0 obj
+459 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -151171,7 +151217,7 @@ endobj
 /Type /Annot
 >>
 endobj
-458 0 obj
+460 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -151182,7 +151228,7 @@ endobj
 /Type /Annot
 >>
 endobj
-459 0 obj
+461 0 obj
 << /Border [0 0 0]
 /Dest (#hfilev2)
 /Subtype /Link
@@ -151190,7 +151236,7 @@ endobj
 /Type /Annot
 >>
 endobj
-460 0 obj
+462 0 obj
 << /Length 16415
 >>
 stream
@@ -152102,11 +152148,11 @@ Q
 
 endstream
 endobj
-461 0 obj
+463 0 obj
 << /Type /Page
 /Parent 3 0 R
 /MediaBox [0 0 612.0 792.0]
-/Contents 460 0 R
+/Contents 462 0 R
 /Resources << /ProcSet [/PDF /Text /ImageB /ImageC /ImageI]
 /Font << /F1.0 11 0 R
 /F2.0 10 0 R
@@ -152115,10 +152161,10 @@ endobj
 /F3.0 31 0 R
 >>
 >>
-/Annots [462 0 R 463 0 R 465 0 R 466 0 R 467 0 R 469 0 R 470 0 R]
+/Annots [464 0 R 465 0 R 467 0 R 468 0 R 469 0 R 471 0 R 472 0 R]
 >>
 endobj
-462 0 obj
+464 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -152129,7 +152175,7 @@ endobj
 /Type /Annot
 >>
 endobj
-463 0 obj
+465 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -152140,10 +152186,10 @@ endobj
 /Type /Annot
 >>
 endobj
-464 0 obj
-[461 0 R /XYZ 0 713.19 null]
+466 0 obj
+[463 0 R /XYZ 0 713.19 null]
 endobj
-465 0 obj
+467 0 obj
 << /Border [0 0 0]
 /Dest (#hbase_default_configurations)
 /Subtype /Link
@@ -152151,7 +152197,7 @@ endobj
 /Type /Annot
 >>
 endobj
-466 0 obj
+468 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -152162,7 +152208,7 @@ endobj
 /Type /Annot
 >>
 endobj
-467 0 obj
+469 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -152173,10 +152219,10 @@ endobj
 /Type /Annot
 >>
 endobj
-468 0 obj
-[461 0 R /XYZ 0 339.6700000000001 null]
+470 0 obj
+[463 0 R /XYZ 0 339.6700000000001 null]
 endobj
-469 0 obj
+471 0 obj
 << /Border [0 0 0]
 /A << /Type /Action
 /S /URI
@@ -152187,7 +152233,7 @@ endobj
 /Type /Annot
 >>
 endobj
-470 0 o

<TRUNCATED>

[26/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
index 3180076..d813e71 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/AsyncProcess.Retry.html
@@ -1368,474 +1368,481 @@
 <span class="sourceLineNo">1360</span>          errorsByServer.reportServerError(server);<a name="line.1360"></a>
 <span class="sourceLineNo">1361</span>          canRetry = errorsByServer.canTryMore(numAttempt);<a name="line.1361"></a>
 <span class="sourceLineNo">1362</span>        }<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>        connection.updateCachedLocations(<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>            tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>        failureCount += actions.size();<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span><a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>          Row row = action.getAction();<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>          if (retry == Retry.YES) {<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>            toReplay.add(action);<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>            ++stopped;<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>          } else {<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>            ++failed;<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>          }<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>        }<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      }<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span><a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>      if (toReplay.isEmpty()) {<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>      } else {<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>      }<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>    }<a name="line.1386"></a>
+<span class="sourceLineNo">1363</span>        if (null == tableName &amp;&amp; ClientExceptionsUtil.isMetaClearingException(throwable)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>          // For multi-actions, we don't have a table name, but we want to make sure to clear the<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>          // cache in case there were location-related exceptions. We don't to clear the cache<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>          // for every possible exception that comes through, however.<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>          connection.clearCaches(server);<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span>        } else {<a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>          connection.updateCachedLocations(<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>              tableName, region, actions.get(0).getAction().getRow(), throwable, server);<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>        }<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>        failureCount += actions.size();<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span><a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>        for (Action&lt;Row&gt; action : actions) {<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>          Row row = action.getAction();<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>          Retry retry = manageError(action.getOriginalIndex(), row,<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>              canRetry ? Retry.YES : Retry.NO_RETRIES_EXHAUSTED, throwable, server);<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>          if (retry == Retry.YES) {<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span>            toReplay.add(action);<a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>          } else if (retry == Retry.NO_OTHER_SUCCEEDED) {<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>            ++stopped;<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>          } else {<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>            ++failed;<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>          }<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>        }<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      }<a name="line.1386"></a>
 <span class="sourceLineNo">1387</span><a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>        int failed, int stopped) {<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      StringBuilder sb = new StringBuilder();<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>        .append("attempt=").append(numAttempt)<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>        .append("/").append(numTries).append(" ");<a name="line.1394"></a>
-<span class="sourceLineNo">1395</span><a name="line.1395"></a>
-<span class="sourceLineNo">1396</span>      if (failureCount &gt; 0 || error != null){<a name="line.1396"></a>
-<span class="sourceLineNo">1397</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1397"></a>
-<span class="sourceLineNo">1398</span>            append(error == null ? "null" : error);<a name="line.1398"></a>
-<span class="sourceLineNo">1399</span>      } else {<a name="line.1399"></a>
-<span class="sourceLineNo">1400</span>        sb.append("succeeded");<a name="line.1400"></a>
-<span class="sourceLineNo">1401</span>      }<a name="line.1401"></a>
+<span class="sourceLineNo">1388</span>      if (toReplay.isEmpty()) {<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>        logNoResubmit(server, numAttempt, failureCount, throwable, failed, stopped);<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>      } else {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>        resubmit(server, toReplay, numAttempt, failureCount, throwable);<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>      }<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>    }<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span><a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>    private String createLog(int numAttempt, int failureCount, int replaySize, ServerName sn,<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>        Throwable error, long backOffTime, boolean willRetry, String startTime,<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>        int failed, int stopped) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      StringBuilder sb = new StringBuilder();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      sb.append("#").append(id).append(", table=").append(tableName).append(", ")<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        .append("attempt=").append(numAttempt)<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>        .append("/").append(numTries).append(" ");<a name="line.1401"></a>
 <span class="sourceLineNo">1402</span><a name="line.1402"></a>
-<span class="sourceLineNo">1403</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1403"></a>
-<span class="sourceLineNo">1404</span><a name="line.1404"></a>
-<span class="sourceLineNo">1405</span>      if (willRetry) {<a name="line.1405"></a>
-<span class="sourceLineNo">1406</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1406"></a>
-<span class="sourceLineNo">1407</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1407"></a>
-<span class="sourceLineNo">1408</span>      } else if (failureCount &gt; 0) {<a name="line.1408"></a>
-<span class="sourceLineNo">1409</span>        if (stopped &gt; 0) {<a name="line.1409"></a>
-<span class="sourceLineNo">1410</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1410"></a>
-<span class="sourceLineNo">1411</span>        }<a name="line.1411"></a>
-<span class="sourceLineNo">1412</span>        if (failed &gt; 0) {<a name="line.1412"></a>
-<span class="sourceLineNo">1413</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1413"></a>
-<span class="sourceLineNo">1414</span>        }<a name="line.1414"></a>
-<span class="sourceLineNo">1415</span><a name="line.1415"></a>
-<span class="sourceLineNo">1416</span>      }<a name="line.1416"></a>
-<span class="sourceLineNo">1417</span><a name="line.1417"></a>
-<span class="sourceLineNo">1418</span>      return sb.toString();<a name="line.1418"></a>
-<span class="sourceLineNo">1419</span>    }<a name="line.1419"></a>
-<span class="sourceLineNo">1420</span><a name="line.1420"></a>
-<span class="sourceLineNo">1421</span>    /**<a name="line.1421"></a>
-<span class="sourceLineNo">1422</span>     * Sets the non-error result from a particular action.<a name="line.1422"></a>
-<span class="sourceLineNo">1423</span>     * @param action Action (request) that the server responded to.<a name="line.1423"></a>
-<span class="sourceLineNo">1424</span>     * @param result The result.<a name="line.1424"></a>
-<span class="sourceLineNo">1425</span>     */<a name="line.1425"></a>
-<span class="sourceLineNo">1426</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1426"></a>
-<span class="sourceLineNo">1427</span>      if (result == null) {<a name="line.1427"></a>
-<span class="sourceLineNo">1428</span>        throw new RuntimeException("Result cannot be null");<a name="line.1428"></a>
-<span class="sourceLineNo">1429</span>      }<a name="line.1429"></a>
-<span class="sourceLineNo">1430</span>      ReplicaResultState state = null;<a name="line.1430"></a>
-<span class="sourceLineNo">1431</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1431"></a>
-<span class="sourceLineNo">1432</span>      int index = action.getOriginalIndex();<a name="line.1432"></a>
-<span class="sourceLineNo">1433</span>      if (results == null) {<a name="line.1433"></a>
-<span class="sourceLineNo">1434</span>         decActionCounter(index);<a name="line.1434"></a>
-<span class="sourceLineNo">1435</span>         return; // Simple case, no replica requests.<a name="line.1435"></a>
+<span class="sourceLineNo">1403</span>      if (failureCount &gt; 0 || error != null){<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        sb.append("failed=").append(failureCount).append("ops").append(", last exception: ").<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>            append(error == null ? "null" : error);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>      } else {<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        sb.append("succeeded");<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span><a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      sb.append(" on ").append(sn).append(", tracking started ").append(startTime);<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span><a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>      if (willRetry) {<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>        sb.append(", retrying after=").append(backOffTime).append("ms").<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>            append(", replay=").append(replaySize).append("ops");<a name="line.1414"></a>
+<span class="sourceLineNo">1415</span>      } else if (failureCount &gt; 0) {<a name="line.1415"></a>
+<span class="sourceLineNo">1416</span>        if (stopped &gt; 0) {<a name="line.1416"></a>
+<span class="sourceLineNo">1417</span>          sb.append("; not retrying ").append(stopped).append(" due to success from other replica");<a name="line.1417"></a>
+<span class="sourceLineNo">1418</span>        }<a name="line.1418"></a>
+<span class="sourceLineNo">1419</span>        if (failed &gt; 0) {<a name="line.1419"></a>
+<span class="sourceLineNo">1420</span>          sb.append("; not retrying ").append(failed).append(" - final failure");<a name="line.1420"></a>
+<span class="sourceLineNo">1421</span>        }<a name="line.1421"></a>
+<span class="sourceLineNo">1422</span><a name="line.1422"></a>
+<span class="sourceLineNo">1423</span>      }<a name="line.1423"></a>
+<span class="sourceLineNo">1424</span><a name="line.1424"></a>
+<span class="sourceLineNo">1425</span>      return sb.toString();<a name="line.1425"></a>
+<span class="sourceLineNo">1426</span>    }<a name="line.1426"></a>
+<span class="sourceLineNo">1427</span><a name="line.1427"></a>
+<span class="sourceLineNo">1428</span>    /**<a name="line.1428"></a>
+<span class="sourceLineNo">1429</span>     * Sets the non-error result from a particular action.<a name="line.1429"></a>
+<span class="sourceLineNo">1430</span>     * @param action Action (request) that the server responded to.<a name="line.1430"></a>
+<span class="sourceLineNo">1431</span>     * @param result The result.<a name="line.1431"></a>
+<span class="sourceLineNo">1432</span>     */<a name="line.1432"></a>
+<span class="sourceLineNo">1433</span>    private void setResult(Action&lt;Row&gt; action, Object result) {<a name="line.1433"></a>
+<span class="sourceLineNo">1434</span>      if (result == null) {<a name="line.1434"></a>
+<span class="sourceLineNo">1435</span>        throw new RuntimeException("Result cannot be null");<a name="line.1435"></a>
 <span class="sourceLineNo">1436</span>      }<a name="line.1436"></a>
-<span class="sourceLineNo">1437</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1437"></a>
-<span class="sourceLineNo">1438</span>      if (state == null) {<a name="line.1438"></a>
-<span class="sourceLineNo">1439</span>        return; // Simple case, no replica requests.<a name="line.1439"></a>
-<span class="sourceLineNo">1440</span>      }<a name="line.1440"></a>
-<span class="sourceLineNo">1441</span>      // At this point we know that state is set to replica tracking class.<a name="line.1441"></a>
-<span class="sourceLineNo">1442</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1442"></a>
-<span class="sourceLineNo">1443</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1443"></a>
-<span class="sourceLineNo">1444</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1444"></a>
-<span class="sourceLineNo">1445</span>      // we will replace it with the result.<a name="line.1445"></a>
-<span class="sourceLineNo">1446</span>      synchronized (state) {<a name="line.1446"></a>
-<span class="sourceLineNo">1447</span>        if (state.callCount == 0) {<a name="line.1447"></a>
-<span class="sourceLineNo">1448</span>          return; // someone already set the result<a name="line.1448"></a>
-<span class="sourceLineNo">1449</span>        }<a name="line.1449"></a>
-<span class="sourceLineNo">1450</span>        state.callCount = 0;<a name="line.1450"></a>
-<span class="sourceLineNo">1451</span>      }<a name="line.1451"></a>
-<span class="sourceLineNo">1452</span>      synchronized (replicaResultLock) {<a name="line.1452"></a>
-<span class="sourceLineNo">1453</span>        if (results[index] != state) {<a name="line.1453"></a>
-<span class="sourceLineNo">1454</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1454"></a>
-<span class="sourceLineNo">1455</span>        }<a name="line.1455"></a>
-<span class="sourceLineNo">1456</span>        results[index] = result;<a name="line.1456"></a>
-<span class="sourceLineNo">1457</span>      }<a name="line.1457"></a>
-<span class="sourceLineNo">1458</span><a name="line.1458"></a>
-<span class="sourceLineNo">1459</span>      decActionCounter(index);<a name="line.1459"></a>
-<span class="sourceLineNo">1460</span>    }<a name="line.1460"></a>
-<span class="sourceLineNo">1461</span><a name="line.1461"></a>
-<span class="sourceLineNo">1462</span>    /**<a name="line.1462"></a>
-<span class="sourceLineNo">1463</span>     * Sets the error from a particular action.<a name="line.1463"></a>
-<span class="sourceLineNo">1464</span>     * @param index Original action index.<a name="line.1464"></a>
-<span class="sourceLineNo">1465</span>     * @param row Original request.<a name="line.1465"></a>
-<span class="sourceLineNo">1466</span>     * @param throwable The resulting error.<a name="line.1466"></a>
-<span class="sourceLineNo">1467</span>     * @param server The source server.<a name="line.1467"></a>
-<span class="sourceLineNo">1468</span>     */<a name="line.1468"></a>
-<span class="sourceLineNo">1469</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1469"></a>
-<span class="sourceLineNo">1470</span>      ReplicaResultState state = null;<a name="line.1470"></a>
-<span class="sourceLineNo">1471</span>      if (results == null) {<a name="line.1471"></a>
-<span class="sourceLineNo">1472</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1472"></a>
-<span class="sourceLineNo">1473</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1473"></a>
-<span class="sourceLineNo">1474</span>        // Only one call per action should be present in this case.<a name="line.1474"></a>
-<span class="sourceLineNo">1475</span>        errors.add(throwable, row, server);<a name="line.1475"></a>
-<span class="sourceLineNo">1476</span>        decActionCounter(index);<a name="line.1476"></a>
-<span class="sourceLineNo">1477</span>        return; // Simple case, no replica requests.<a name="line.1477"></a>
-<span class="sourceLineNo">1478</span>      }<a name="line.1478"></a>
-<span class="sourceLineNo">1479</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1479"></a>
-<span class="sourceLineNo">1480</span>      if (state == null) {<a name="line.1480"></a>
-<span class="sourceLineNo">1481</span>        return; // Simple case, no replica requests.<a name="line.1481"></a>
-<span class="sourceLineNo">1482</span>      }<a name="line.1482"></a>
-<span class="sourceLineNo">1483</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1483"></a>
-<span class="sourceLineNo">1484</span>      boolean isActionDone = false;<a name="line.1484"></a>
-<span class="sourceLineNo">1485</span>      synchronized (state) {<a name="line.1485"></a>
-<span class="sourceLineNo">1486</span>        switch (state.callCount) {<a name="line.1486"></a>
-<span class="sourceLineNo">1487</span>          case 0: return; // someone already set the result<a name="line.1487"></a>
-<span class="sourceLineNo">1488</span>          case 1: { // All calls failed, we are the last error.<a name="line.1488"></a>
-<span class="sourceLineNo">1489</span>            target = errors;<a name="line.1489"></a>
-<span class="sourceLineNo">1490</span>            isActionDone = true;<a name="line.1490"></a>
-<span class="sourceLineNo">1491</span>            break;<a name="line.1491"></a>
-<span class="sourceLineNo">1492</span>          }<a name="line.1492"></a>
-<span class="sourceLineNo">1493</span>          default: {<a name="line.1493"></a>
-<span class="sourceLineNo">1494</span>            assert state.callCount &gt; 1;<a name="line.1494"></a>
-<span class="sourceLineNo">1495</span>            if (state.replicaErrors == null) {<a name="line.1495"></a>
-<span class="sourceLineNo">1496</span>              state.replicaErrors = new BatchErrors();<a name="line.1496"></a>
-<span class="sourceLineNo">1497</span>            }<a name="line.1497"></a>
-<span class="sourceLineNo">1498</span>            target = state.replicaErrors;<a name="line.1498"></a>
-<span class="sourceLineNo">1499</span>            break;<a name="line.1499"></a>
-<span class="sourceLineNo">1500</span>          }<a name="line.1500"></a>
-<span class="sourceLineNo">1501</span>        }<a name="line.1501"></a>
-<span class="sourceLineNo">1502</span>        --state.callCount;<a name="line.1502"></a>
-<span class="sourceLineNo">1503</span>      }<a name="line.1503"></a>
-<span class="sourceLineNo">1504</span>      target.add(throwable, row, server);<a name="line.1504"></a>
-<span class="sourceLineNo">1505</span>      if (isActionDone) {<a name="line.1505"></a>
-<span class="sourceLineNo">1506</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1506"></a>
-<span class="sourceLineNo">1507</span>          errors.merge(state.replicaErrors);<a name="line.1507"></a>
+<span class="sourceLineNo">1437</span>      ReplicaResultState state = null;<a name="line.1437"></a>
+<span class="sourceLineNo">1438</span>      boolean isStale = !RegionReplicaUtil.isDefaultReplica(action.getReplicaId());<a name="line.1438"></a>
+<span class="sourceLineNo">1439</span>      int index = action.getOriginalIndex();<a name="line.1439"></a>
+<span class="sourceLineNo">1440</span>      if (results == null) {<a name="line.1440"></a>
+<span class="sourceLineNo">1441</span>         decActionCounter(index);<a name="line.1441"></a>
+<span class="sourceLineNo">1442</span>         return; // Simple case, no replica requests.<a name="line.1442"></a>
+<span class="sourceLineNo">1443</span>      }<a name="line.1443"></a>
+<span class="sourceLineNo">1444</span>      state = trySetResultSimple(index, action.getAction(), false, result, null, isStale);<a name="line.1444"></a>
+<span class="sourceLineNo">1445</span>      if (state == null) {<a name="line.1445"></a>
+<span class="sourceLineNo">1446</span>        return; // Simple case, no replica requests.<a name="line.1446"></a>
+<span class="sourceLineNo">1447</span>      }<a name="line.1447"></a>
+<span class="sourceLineNo">1448</span>      // At this point we know that state is set to replica tracking class.<a name="line.1448"></a>
+<span class="sourceLineNo">1449</span>      // It could be that someone else is also looking at it; however, we know there can<a name="line.1449"></a>
+<span class="sourceLineNo">1450</span>      // only be one state object, and only one thread can set callCount to 0. Other threads<a name="line.1450"></a>
+<span class="sourceLineNo">1451</span>      // will either see state with callCount 0 after locking it; or will not see state at all<a name="line.1451"></a>
+<span class="sourceLineNo">1452</span>      // we will replace it with the result.<a name="line.1452"></a>
+<span class="sourceLineNo">1453</span>      synchronized (state) {<a name="line.1453"></a>
+<span class="sourceLineNo">1454</span>        if (state.callCount == 0) {<a name="line.1454"></a>
+<span class="sourceLineNo">1455</span>          return; // someone already set the result<a name="line.1455"></a>
+<span class="sourceLineNo">1456</span>        }<a name="line.1456"></a>
+<span class="sourceLineNo">1457</span>        state.callCount = 0;<a name="line.1457"></a>
+<span class="sourceLineNo">1458</span>      }<a name="line.1458"></a>
+<span class="sourceLineNo">1459</span>      synchronized (replicaResultLock) {<a name="line.1459"></a>
+<span class="sourceLineNo">1460</span>        if (results[index] != state) {<a name="line.1460"></a>
+<span class="sourceLineNo">1461</span>          throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1461"></a>
+<span class="sourceLineNo">1462</span>        }<a name="line.1462"></a>
+<span class="sourceLineNo">1463</span>        results[index] = result;<a name="line.1463"></a>
+<span class="sourceLineNo">1464</span>      }<a name="line.1464"></a>
+<span class="sourceLineNo">1465</span><a name="line.1465"></a>
+<span class="sourceLineNo">1466</span>      decActionCounter(index);<a name="line.1466"></a>
+<span class="sourceLineNo">1467</span>    }<a name="line.1467"></a>
+<span class="sourceLineNo">1468</span><a name="line.1468"></a>
+<span class="sourceLineNo">1469</span>    /**<a name="line.1469"></a>
+<span class="sourceLineNo">1470</span>     * Sets the error from a particular action.<a name="line.1470"></a>
+<span class="sourceLineNo">1471</span>     * @param index Original action index.<a name="line.1471"></a>
+<span class="sourceLineNo">1472</span>     * @param row Original request.<a name="line.1472"></a>
+<span class="sourceLineNo">1473</span>     * @param throwable The resulting error.<a name="line.1473"></a>
+<span class="sourceLineNo">1474</span>     * @param server The source server.<a name="line.1474"></a>
+<span class="sourceLineNo">1475</span>     */<a name="line.1475"></a>
+<span class="sourceLineNo">1476</span>    private void setError(int index, Row row, Throwable throwable, ServerName server) {<a name="line.1476"></a>
+<span class="sourceLineNo">1477</span>      ReplicaResultState state = null;<a name="line.1477"></a>
+<span class="sourceLineNo">1478</span>      if (results == null) {<a name="line.1478"></a>
+<span class="sourceLineNo">1479</span>        // Note that we currently cannot have replica requests with null results. So it shouldn't<a name="line.1479"></a>
+<span class="sourceLineNo">1480</span>        // happen that multiple replica calls will call dAC for same actions with results == null.<a name="line.1480"></a>
+<span class="sourceLineNo">1481</span>        // Only one call per action should be present in this case.<a name="line.1481"></a>
+<span class="sourceLineNo">1482</span>        errors.add(throwable, row, server);<a name="line.1482"></a>
+<span class="sourceLineNo">1483</span>        decActionCounter(index);<a name="line.1483"></a>
+<span class="sourceLineNo">1484</span>        return; // Simple case, no replica requests.<a name="line.1484"></a>
+<span class="sourceLineNo">1485</span>      }<a name="line.1485"></a>
+<span class="sourceLineNo">1486</span>      state = trySetResultSimple(index, row, true, throwable, server, false);<a name="line.1486"></a>
+<span class="sourceLineNo">1487</span>      if (state == null) {<a name="line.1487"></a>
+<span class="sourceLineNo">1488</span>        return; // Simple case, no replica requests.<a name="line.1488"></a>
+<span class="sourceLineNo">1489</span>      }<a name="line.1489"></a>
+<span class="sourceLineNo">1490</span>      BatchErrors target = null; // Error will be added to final errors, or temp replica errors.<a name="line.1490"></a>
+<span class="sourceLineNo">1491</span>      boolean isActionDone = false;<a name="line.1491"></a>
+<span class="sourceLineNo">1492</span>      synchronized (state) {<a name="line.1492"></a>
+<span class="sourceLineNo">1493</span>        switch (state.callCount) {<a name="line.1493"></a>
+<span class="sourceLineNo">1494</span>          case 0: return; // someone already set the result<a name="line.1494"></a>
+<span class="sourceLineNo">1495</span>          case 1: { // All calls failed, we are the last error.<a name="line.1495"></a>
+<span class="sourceLineNo">1496</span>            target = errors;<a name="line.1496"></a>
+<span class="sourceLineNo">1497</span>            isActionDone = true;<a name="line.1497"></a>
+<span class="sourceLineNo">1498</span>            break;<a name="line.1498"></a>
+<span class="sourceLineNo">1499</span>          }<a name="line.1499"></a>
+<span class="sourceLineNo">1500</span>          default: {<a name="line.1500"></a>
+<span class="sourceLineNo">1501</span>            assert state.callCount &gt; 1;<a name="line.1501"></a>
+<span class="sourceLineNo">1502</span>            if (state.replicaErrors == null) {<a name="line.1502"></a>
+<span class="sourceLineNo">1503</span>              state.replicaErrors = new BatchErrors();<a name="line.1503"></a>
+<span class="sourceLineNo">1504</span>            }<a name="line.1504"></a>
+<span class="sourceLineNo">1505</span>            target = state.replicaErrors;<a name="line.1505"></a>
+<span class="sourceLineNo">1506</span>            break;<a name="line.1506"></a>
+<span class="sourceLineNo">1507</span>          }<a name="line.1507"></a>
 <span class="sourceLineNo">1508</span>        }<a name="line.1508"></a>
-<span class="sourceLineNo">1509</span>        // See setResult for explanations.<a name="line.1509"></a>
-<span class="sourceLineNo">1510</span>        synchronized (replicaResultLock) {<a name="line.1510"></a>
-<span class="sourceLineNo">1511</span>          if (results[index] != state) {<a name="line.1511"></a>
-<span class="sourceLineNo">1512</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1512"></a>
-<span class="sourceLineNo">1513</span>          }<a name="line.1513"></a>
-<span class="sourceLineNo">1514</span>          results[index] = throwable;<a name="line.1514"></a>
+<span class="sourceLineNo">1509</span>        --state.callCount;<a name="line.1509"></a>
+<span class="sourceLineNo">1510</span>      }<a name="line.1510"></a>
+<span class="sourceLineNo">1511</span>      target.add(throwable, row, server);<a name="line.1511"></a>
+<span class="sourceLineNo">1512</span>      if (isActionDone) {<a name="line.1512"></a>
+<span class="sourceLineNo">1513</span>        if (state.replicaErrors != null) { // last call, no need to lock<a name="line.1513"></a>
+<span class="sourceLineNo">1514</span>          errors.merge(state.replicaErrors);<a name="line.1514"></a>
 <span class="sourceLineNo">1515</span>        }<a name="line.1515"></a>
-<span class="sourceLineNo">1516</span>        decActionCounter(index);<a name="line.1516"></a>
-<span class="sourceLineNo">1517</span>      }<a name="line.1517"></a>
-<span class="sourceLineNo">1518</span>    }<a name="line.1518"></a>
-<span class="sourceLineNo">1519</span><a name="line.1519"></a>
-<span class="sourceLineNo">1520</span>    /**<a name="line.1520"></a>
-<span class="sourceLineNo">1521</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1521"></a>
-<span class="sourceLineNo">1522</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1522"></a>
-<span class="sourceLineNo">1523</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1523"></a>
-<span class="sourceLineNo">1524</span>     * @param index Original action index.<a name="line.1524"></a>
-<span class="sourceLineNo">1525</span>     * @param row Original request.<a name="line.1525"></a>
-<span class="sourceLineNo">1526</span>     */<a name="line.1526"></a>
-<span class="sourceLineNo">1527</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1527"></a>
-<span class="sourceLineNo">1528</span>      if (!isReplicaGet(row)) return false;<a name="line.1528"></a>
-<span class="sourceLineNo">1529</span>      Object resObj = results[index];<a name="line.1529"></a>
-<span class="sourceLineNo">1530</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1530"></a>
-<span class="sourceLineNo">1531</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1531"></a>
-<span class="sourceLineNo">1532</span>    }<a name="line.1532"></a>
-<span class="sourceLineNo">1533</span><a name="line.1533"></a>
-<span class="sourceLineNo">1534</span>    /**<a name="line.1534"></a>
-<span class="sourceLineNo">1535</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1535"></a>
-<span class="sourceLineNo">1536</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1536"></a>
-<span class="sourceLineNo">1537</span>     */<a name="line.1537"></a>
-<span class="sourceLineNo">1538</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1538"></a>
-<span class="sourceLineNo">1539</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1539"></a>
-<span class="sourceLineNo">1540</span>      Object resObj = null;<a name="line.1540"></a>
-<span class="sourceLineNo">1541</span>      if (!isReplicaGet(row)) {<a name="line.1541"></a>
-<span class="sourceLineNo">1542</span>        if (isFromReplica) {<a name="line.1542"></a>
-<span class="sourceLineNo">1543</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1543"></a>
-<span class="sourceLineNo">1544</span>        }<a name="line.1544"></a>
-<span class="sourceLineNo">1545</span>        results[index] = result;<a name="line.1545"></a>
-<span class="sourceLineNo">1546</span>      } else {<a name="line.1546"></a>
-<span class="sourceLineNo">1547</span>        synchronized (replicaResultLock) {<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span>          resObj = results[index];<a name="line.1548"></a>
-<span class="sourceLineNo">1549</span>          if (resObj == null) {<a name="line.1549"></a>
-<span class="sourceLineNo">1550</span>            if (isFromReplica) {<a name="line.1550"></a>
-<span class="sourceLineNo">1551</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1551"></a>
-<span class="sourceLineNo">1552</span>            }<a name="line.1552"></a>
-<span class="sourceLineNo">1553</span>            results[index] = result;<a name="line.1553"></a>
-<span class="sourceLineNo">1554</span>          }<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>        }<a name="line.1555"></a>
-<span class="sourceLineNo">1556</span>      }<a name="line.1556"></a>
-<span class="sourceLineNo">1557</span><a name="line.1557"></a>
-<span class="sourceLineNo">1558</span>      ReplicaResultState rrs =<a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>        // The resObj is not replica state (null or already set).<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>        errors.add((Throwable)result, row, server);<a name="line.1562"></a>
+<span class="sourceLineNo">1516</span>        // See setResult for explanations.<a name="line.1516"></a>
+<span class="sourceLineNo">1517</span>        synchronized (replicaResultLock) {<a name="line.1517"></a>
+<span class="sourceLineNo">1518</span>          if (results[index] != state) {<a name="line.1518"></a>
+<span class="sourceLineNo">1519</span>            throw new AssertionError("We set the callCount but someone else replaced the result");<a name="line.1519"></a>
+<span class="sourceLineNo">1520</span>          }<a name="line.1520"></a>
+<span class="sourceLineNo">1521</span>          results[index] = throwable;<a name="line.1521"></a>
+<span class="sourceLineNo">1522</span>        }<a name="line.1522"></a>
+<span class="sourceLineNo">1523</span>        decActionCounter(index);<a name="line.1523"></a>
+<span class="sourceLineNo">1524</span>      }<a name="line.1524"></a>
+<span class="sourceLineNo">1525</span>    }<a name="line.1525"></a>
+<span class="sourceLineNo">1526</span><a name="line.1526"></a>
+<span class="sourceLineNo">1527</span>    /**<a name="line.1527"></a>
+<span class="sourceLineNo">1528</span>     * Checks if the action is complete; used on error to prevent needless retries.<a name="line.1528"></a>
+<span class="sourceLineNo">1529</span>     * Does not synchronize, assuming element index/field accesses are atomic.<a name="line.1529"></a>
+<span class="sourceLineNo">1530</span>     * This is an opportunistic optimization check, doesn't have to be strict.<a name="line.1530"></a>
+<span class="sourceLineNo">1531</span>     * @param index Original action index.<a name="line.1531"></a>
+<span class="sourceLineNo">1532</span>     * @param row Original request.<a name="line.1532"></a>
+<span class="sourceLineNo">1533</span>     */<a name="line.1533"></a>
+<span class="sourceLineNo">1534</span>    private boolean isActionComplete(int index, Row row) {<a name="line.1534"></a>
+<span class="sourceLineNo">1535</span>      if (!isReplicaGet(row)) return false;<a name="line.1535"></a>
+<span class="sourceLineNo">1536</span>      Object resObj = results[index];<a name="line.1536"></a>
+<span class="sourceLineNo">1537</span>      return (resObj != null) &amp;&amp; (!(resObj instanceof ReplicaResultState)<a name="line.1537"></a>
+<span class="sourceLineNo">1538</span>          || ((ReplicaResultState)resObj).callCount == 0);<a name="line.1538"></a>
+<span class="sourceLineNo">1539</span>    }<a name="line.1539"></a>
+<span class="sourceLineNo">1540</span><a name="line.1540"></a>
+<span class="sourceLineNo">1541</span>    /**<a name="line.1541"></a>
+<span class="sourceLineNo">1542</span>     * Tries to set the result or error for a particular action as if there were no replica calls.<a name="line.1542"></a>
+<span class="sourceLineNo">1543</span>     * @return null if successful; replica state if there were in fact replica calls.<a name="line.1543"></a>
+<span class="sourceLineNo">1544</span>     */<a name="line.1544"></a>
+<span class="sourceLineNo">1545</span>    private ReplicaResultState trySetResultSimple(int index, Row row, boolean isError,<a name="line.1545"></a>
+<span class="sourceLineNo">1546</span>        Object result, ServerName server, boolean isFromReplica) {<a name="line.1546"></a>
+<span class="sourceLineNo">1547</span>      Object resObj = null;<a name="line.1547"></a>
+<span class="sourceLineNo">1548</span>      if (!isReplicaGet(row)) {<a name="line.1548"></a>
+<span class="sourceLineNo">1549</span>        if (isFromReplica) {<a name="line.1549"></a>
+<span class="sourceLineNo">1550</span>          throw new AssertionError("Unexpected stale result for " + row);<a name="line.1550"></a>
+<span class="sourceLineNo">1551</span>        }<a name="line.1551"></a>
+<span class="sourceLineNo">1552</span>        results[index] = result;<a name="line.1552"></a>
+<span class="sourceLineNo">1553</span>      } else {<a name="line.1553"></a>
+<span class="sourceLineNo">1554</span>        synchronized (replicaResultLock) {<a name="line.1554"></a>
+<span class="sourceLineNo">1555</span>          resObj = results[index];<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>          if (resObj == null) {<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>            if (isFromReplica) {<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>              throw new AssertionError("Unexpected stale result for " + row);<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>            }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>            results[index] = result;<a name="line.1560"></a>
+<span class="sourceLineNo">1561</span>          }<a name="line.1561"></a>
+<span class="sourceLineNo">1562</span>        }<a name="line.1562"></a>
 <span class="sourceLineNo">1563</span>      }<a name="line.1563"></a>
 <span class="sourceLineNo">1564</span><a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>      if (resObj == null) {<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span>        // resObj is null - no replica calls were made.<a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>        decActionCounter(index);<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>        return null;<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>      }<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>      return rrs;<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>    }<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span><a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>    private void decActionCounter(int index) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>      if (actionsRemaining &lt; 0) {<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span>        throw new AssertionError(error);<a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>      } else if (actionsRemaining == 0) {<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>        synchronized (actionsInProgress) {<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>          actionsInProgress.notifyAll();<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>        }<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>      }<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>    }<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span><a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span>      StringBuilder error = new StringBuilder(128);<a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      if (replicaGetIndices != null) {<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>        }<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>      } else {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      }<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      error.append("; results ");<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      if (results != null) {<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          Object o = results[i];<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>        }<a name="line.1601"></a>
+<span class="sourceLineNo">1565</span>      ReplicaResultState rrs =<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>          (resObj instanceof ReplicaResultState) ? (ReplicaResultState)resObj : null;<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>      if (rrs == null &amp;&amp; isError) {<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>        // The resObj is not replica state (null or already set).<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span>        errors.add((Throwable)result, row, server);<a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>      }<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span><a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>      if (resObj == null) {<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>        // resObj is null - no replica calls were made.<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>        decActionCounter(index);<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>        return null;<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>      }<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>      return rrs;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    }<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span><a name="line.1579"></a>
+<span class="sourceLineNo">1580</span>    private void decActionCounter(int index) {<a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>      long actionsRemaining = actionsInProgress.decrementAndGet();<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      if (actionsRemaining &lt; 0) {<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>        String error = buildDetailedErrorMsg("Incorrect actions in progress", index);<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>        throw new AssertionError(error);<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>      } else if (actionsRemaining == 0) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>        synchronized (actionsInProgress) {<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>          actionsInProgress.notifyAll();<a name="line.1587"></a>
+<span class="sourceLineNo">1588</span>        }<a name="line.1588"></a>
+<span class="sourceLineNo">1589</span>      }<a name="line.1589"></a>
+<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span><a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>    private String buildDetailedErrorMsg(String string, int index) {<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>      StringBuilder error = new StringBuilder(128);<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>      error.append(string).append("; called for ").append(index).append(", actionsInProgress ")<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>          .append(actionsInProgress.get()).append("; replica gets: ");<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>      if (replicaGetIndices != null) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>        for (int i = 0; i &lt; replicaGetIndices.length; ++i) {<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>          error.append(replicaGetIndices[i]).append(", ");<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>        }<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      } else {<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>        error.append(hasAnyReplicaGets ? "all" : "none");<a name="line.1601"></a>
 <span class="sourceLineNo">1602</span>      }<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>      return error.toString();<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span><a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>    @Override<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (InterruptedException iex) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>      } finally {<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>        if (callsInProgress != null) {<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span>            clb.cancel();<a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>          }<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        }<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      }<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>    }<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span><a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>      long currentInProgress;<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>          return false;<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>        }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>          if (now &gt; lastLog + 10000) {<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>            lastLog = now;<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>          }<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        }<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        synchronized (actionsInProgress) {<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>          if (actionsInProgress.get() == 0) break;<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>          if (!hasWait) {<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>            actionsInProgress.wait(100);<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>          } else {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>          }<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        }<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>      }<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>      return true;<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>    }<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span><a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>    @Override<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>    public boolean hasError() {<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>      return errors.hasErrors();<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>    }<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span><a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>    @Override<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>      return errors.actions;<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>    }<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span><a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>    @Override<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>      return errors.makeException();<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>    }<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span><a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>    @Override<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>      waitUntilDone();<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>      return results;<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>    }<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>  }<a name="line.1669"></a>
+<span class="sourceLineNo">1603</span>      error.append("; results ");<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>      if (results != null) {<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>        for (int i = 0; i &lt; results.length; ++i) {<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>          Object o = results[i];<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>          error.append(((o == null) ? "null" : o.toString())).append(", ");<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>        }<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      }<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      return error.toString();<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>    }<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span><a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>    @Override<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>    public void waitUntilDone() throws InterruptedIOException {<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>      try {<a name="line.1615"></a>
+<span class="sourceLineNo">1616</span>        waitUntilDone(Long.MAX_VALUE);<a name="line.1616"></a>
+<span class="sourceLineNo">1617</span>      } catch (InterruptedException iex) {<a name="line.1617"></a>
+<span class="sourceLineNo">1618</span>        throw new InterruptedIOException(iex.getMessage());<a name="line.1618"></a>
+<span class="sourceLineNo">1619</span>      } finally {<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        if (callsInProgress != null) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>          for (MultiServerCallable&lt;Row&gt; clb : callsInProgress) {<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>            clb.cancel();<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>          }<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>        }<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>      }<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>    }<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span><a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>    private boolean waitUntilDone(long cutoff) throws InterruptedException {<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      boolean hasWait = cutoff != Long.MAX_VALUE;<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>      long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      long currentInProgress;<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>      while (0 != (currentInProgress = actionsInProgress.get())) {<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>        if (hasWait &amp;&amp; (now * 1000L) &gt; cutoff) {<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>          return false;<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>        }<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        if (!hasWait) { // Only log if wait is infinite.<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>          if (now &gt; lastLog + 10000) {<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>            lastLog = now;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>            LOG.info("#" + id + ", waiting for " + currentInProgress + "  actions to finish");<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>          }<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>        }<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>        synchronized (actionsInProgress) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>          if (actionsInProgress.get() == 0) break;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>          if (!hasWait) {<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>            actionsInProgress.wait(100);<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>          } else {<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>            long waitMicroSecond = Math.min(100000L, (cutoff - now * 1000L));<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>            TimeUnit.MICROSECONDS.timedWait(actionsInProgress, waitMicroSecond);<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>          }<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>        }<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>      }<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>      return true;<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>    }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span><a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>    @Override<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>    public boolean hasError() {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>      return errors.hasErrors();<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>    }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span><a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>    @Override<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>    public List&lt;? extends Row&gt; getFailedOperations() {<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>      return errors.actions;<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>    }<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span><a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>    @Override<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>    public RetriesExhaustedWithDetailsException getErrors() {<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>      return errors.makeException();<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>    }<a name="line.1669"></a>
 <span class="sourceLineNo">1670</span><a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>  @VisibleForTesting<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>  }<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span><a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>  /**<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>   */<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>  @VisibleForTesting<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>  }<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span><a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>  /**<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>   */<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>  @VisibleForTesting<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>  }<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span><a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>  @VisibleForTesting<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>    waitForMaximumCurrentTasks(0);<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>  }<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span><a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>        if (now &gt; lastLog + 10000) {<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>          lastLog = now;<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>        }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>      }<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>      oldInProgress = currentInProgress;<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>      try {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>        synchronized (this.tasksInProgress) {<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          this.tasksInProgress.wait(100);<a name="line.1720"></a>
+<span class="sourceLineNo">1671</span>    @Override<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>    public Object[] getResults() throws InterruptedIOException {<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>      waitUntilDone();<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>      return results;<a name="line.1674"></a>
+<span class="sourceLineNo">1675</span>    }<a name="line.1675"></a>
+<span class="sourceLineNo">1676</span>  }<a name="line.1676"></a>
+<span class="sourceLineNo">1677</span><a name="line.1677"></a>
+<span class="sourceLineNo">1678</span>  @VisibleForTesting<a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>  /** Create AsyncRequestFuture. Isolated to be easily overridden in the tests. */<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>  protected &lt;CResult&gt; AsyncRequestFutureImpl&lt;CResult&gt; createAsyncRequestFuture(<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>      TableName tableName, List&lt;Action&lt;Row&gt;&gt; actions, long nonceGroup, ExecutorService pool,<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>      Batch.Callback&lt;CResult&gt; callback, Object[] results, boolean needResults) {<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>    return new AsyncRequestFutureImpl&lt;CResult&gt;(<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>        tableName, actions, nonceGroup, getPool(pool), needResults, results, callback);<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>  }<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span><a name="line.1686"></a>
+<span class="sourceLineNo">1687</span>  /**<a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>   * Create a callable. Isolated to be easily overridden in the tests.<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>   */<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>  @VisibleForTesting<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>  protected MultiServerCallable&lt;Row&gt; createCallable(final ServerName server,<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>      TableName tableName, final MultiAction&lt;Row&gt; multi) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>    return new MultiServerCallable&lt;Row&gt;(connection, tableName, server, this.rpcFactory, multi);<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>  }<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span><a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>  /**<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>   * Create a caller. Isolated to be easily overridden in the tests.<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>   */<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>  @VisibleForTesting<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>  protected RpcRetryingCaller&lt;MultiResponse&gt; createCaller(MultiServerCallable&lt;Row&gt; callable) {<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>    return rpcCallerFactory.&lt;MultiResponse&gt; newCaller();<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>  }<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span><a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>  @VisibleForTesting<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>  /** Waits until all outstanding tasks are done. Used in tests. */<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>  void waitUntilDone() throws InterruptedIOException {<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>    waitForMaximumCurrentTasks(0);<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>  }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span><a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>  /** Wait until the async does not have more than max tasks in progress. */<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>  private void waitForMaximumCurrentTasks(int max) throws InterruptedIOException {<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>    long lastLog = EnvironmentEdgeManager.currentTime();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>    long currentInProgress, oldInProgress = Long.MAX_VALUE;<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>    while ((currentInProgress = this.tasksInProgress.get()) &gt; max) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>      if (oldInProgress != currentInProgress) { // Wait for in progress to change.<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>        long now = EnvironmentEdgeManager.currentTime();<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>        if (now &gt; lastLog + 10000) {<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>          lastLog = now;<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          LOG.info("#" + id + ", waiting for some tasks to finish. Expected max="<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>              + max + ", tasksInProgress=" + currentInProgress);<a name="line.1720"></a>
 <span class="sourceLineNo">1721</span>        }<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>      } catch (InterruptedException e) {<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>      }<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>    }<a name="line.1726"></a>
-<span class="sourceLineNo">1727</span>  }<a name="line.1727"></a>
-<span class="sourceLineNo">1728</span><a name="line.1728"></a>
-<span class="sourceLineNo">1729</span>  /**<a name="line.1729"></a>
-<span class="sourceLineNo">1730</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>   * @return Whether there were any errors in any request since the last time<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>   */<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>  public boolean hasError() {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>    return globalErrors.hasErrors();<a name="line.1735"></a>
-<span class="sourceLineNo">1736</span>  }<a name="line.1736"></a>
-<span class="sourceLineNo">1737</span><a name="line.1737"></a>
-<span class="sourceLineNo">1738</span>  /**<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>   * failed operations themselves.<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>   *          was called, or AP was created.<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>   */<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>    waitForMaximumCurrentTasks(0);<a name="line.1749"></a>
-<span class="sourceLineNo">1750</span>    if (!globalErrors.hasErrors()) {<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      return null;<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>    }<a name="line.1752"></a>
-<span class="sourceLineNo">1753</span>    if (failedRows != null) {<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      failedRows.addAll(globalErrors.actions);<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>    }<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    globalErrors.clear();<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>    return result;<a name="line.1758"></a>
-<span class="sourceLineNo">1759</span>  }<a name="line.1759"></a>
-<span class="sourceLineNo">1760</span><a name="line.1760"></a>
-<span class="sourceLineNo">1761</span>  /**<a name="line.1761"></a>
-<span class="sourceLineNo">1762</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>   */<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>    tasksInProgress.incrementAndGet();<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span><a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>    if (serverCnt == null) {<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>    }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>    serverCnt.incrementAndGet();<a name="line.1772"></a>
+<span class="sourceLineNo">1722</span>      }<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>      oldInProgress = currentInProgress;<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>      try {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>        synchronized (this.tasksInProgress) {<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          if (tasksInProgress.get() != oldInProgress) break;<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          this.tasksInProgress.wait(100);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        }<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>      } catch (InterruptedException e) {<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        throw new InterruptedIOException("#" + id + ", interrupted." +<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>            " currentNumberOfTask=" + currentInProgress);<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span>      }<a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>    }<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>  }<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span><a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>  /**<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>   * @return Whether there were any errors in any request since the last time<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>   *          {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created.<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span>   */<a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>  public boolean hasError() {<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>    return globalErrors.hasErrors();<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>  }<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span><a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>  /**<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>   * Only used w/useGlobalErrors ctor argument, for HTable backward compat.<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>   * Waits for all previous operations to finish, and returns errors and (optionally)<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>   * failed operations themselves.<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>   * @param failedRows an optional list into which the rows that failed since the last time<a name="line.1749"></a>
+<span class="sourceLineNo">1750</span>   *        {@link #waitForAllPreviousOpsAndReset(List)} was called, or AP was created, are saved.<a name="line.1750"></a>
+<span class="sourceLineNo">1751</span>   * @return all the errors since the last time {@link #waitForAllPreviousOpsAndReset(List)}<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>   *          was called, or AP was created.<a name="line.1752"></a>
+<span class="sourceLineNo">1753</span>   */<a name="line.1753"></a>
+<span class="sourceLineNo">1754</span>  public RetriesExhaustedWithDetailsException waitForAllPreviousOpsAndReset(<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>      List&lt;Row&gt; failedRows) throws InterruptedIOException {<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>    waitForMaximumCurrentTasks(0);<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>    if (!globalErrors.hasErrors()) {<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      return null;<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>    }<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    if (failedRows != null) {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      failedRows.addAll(globalErrors.actions);<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>    RetriesExhaustedWithDetailsException result = globalErrors.makeException();<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span>    globalErrors.clear();<a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>    return result;<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  }<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span><a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  /**<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>   * increment the tasks counters for a given set of regions. MT safe.<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>   */<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>  protected void incTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>    tasksInProgress.incrementAndGet();<a name="line.1772"></a>
 <span class="sourceLineNo">1773</span><a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>    for (byte[] regBytes : regions) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>      if (regionCnt == null) {<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>        regionCnt = new AtomicInteger();<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>        if (oldCnt != null) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>          regionCnt = oldCnt;<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>        }<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>      }<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>      regionCnt.incrementAndGet();<a name="line.1783"></a>
-<span class="sourceLineNo">1784</span>    }<a name="line.1784"></a>
-<span class="sourceLineNo">1785</span>  }<a name="line.1785"></a>
-<span class="sourceLineNo">1786</span><a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>  /**<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>   */<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    for (byte[] regBytes : regions) {<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span>      regionCnt.decrementAndGet();<a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>    }<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span><a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>    taskCounterPerServer.get(sn).decrementAndGet();<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>    tasksInProgress.decrementAndGet();<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    synchronized (tasksInProgress) {<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>      tasksInProgress.notifyAll();<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span>    }<a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  }<a name="line.1801"></a>
+<span class="sourceLineNo">1774</span>    AtomicInteger serverCnt = taskCounterPerServer.get(sn);<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>    if (serverCnt == null) {<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      taskCounterPerServer.putIfAbsent(sn, new AtomicInteger());<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>      serverCnt = taskCounterPerServer.get(sn);<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>    }<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>    serverCnt.incrementAndGet();<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span><a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>    for (byte[] regBytes : regions) {<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>      if (regionCnt == null) {<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>        regionCnt = new AtomicInteger();<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>        AtomicInteger oldCnt = taskCounterPerRegion.putIfAbsent(regBytes, regionCnt);<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>        if (oldCnt != null) {<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          regionCnt = oldCnt;<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      }<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>      regionCnt.incrementAndGet();<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
+<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
+<span class="sourceLineNo">1793</span><a name="line.1793"></a>
+<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
+<span class="sourceLineNo">1795</span>   * Decrements the counters for a given region and the region server. MT Safe.<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  protected void decTaskCounters(Collection&lt;byte[]&gt; regions, ServerName sn) {<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>    for (byte[] regBytes : regions) {<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>      AtomicInteger regionCnt = taskCounterPerRegion.get(regBytes);<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>      regionCnt.decrementAndGet();<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    }<a name="line.1801"></a>
 <span class="sourceLineNo">1802</span><a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>  /**<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>   * Creates the server error tracker to use inside process.<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>   * Currently, to preserve the main assumption about current retries, and to work well with<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>   * the retry-limit-based calculation, the calculation is local per Process object.<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>   * We may benefit from connection-wide tracking of server errors.<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>   * @return ServerErrorTracker to use, null if there is no ServerErrorTracker on this connection<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>   */<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>  protected ConnectionImplementation.ServerErrorTracker createServerErrorTracker() {<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>    return new ConnectionImplementation.ServerErrorTracker(<a name="line.1811"></a>
-<span class="sourceLineNo">

<TRUNCATED>

[09/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 507426b..52d47c0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -68,14 +68,14 @@
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -133,142 +133,142 @@
 <span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
+<span class="sourceLineNo">128</span>    // 25, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 25, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public boolean getCatalogJanitorEnabled()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_catalogJanitorEnabled;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private boolean m_catalogJanitorEnabled;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 26, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setFilter(String filter)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 24, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_deadServers = deadServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_deadServers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 26, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_filter = filter;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_filter__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public String getFilter()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_deadServers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_filter;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getDeadServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private String m_filter;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getFilter__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_deadServers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_filter__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_deadServers__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 29, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_filter__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 24, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 29, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_assignmentManager = assignmentManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_assignmentManager__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 24, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_deadServers = deadServers;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_deadServers__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public AssignmentManager getAssignmentManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_assignmentManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_deadServers;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private AssignmentManager m_assignmentManager;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getDeadServers__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_assignmentManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_deadServers__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 23, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_deadServers__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 23, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_servers = servers;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_servers__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public List&lt;ServerName&gt; getServers()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_servers;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private List&lt;ServerName&gt; m_servers;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getServers__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_servers__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_servers__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 26, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_filter = filter;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_filter__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public String getFilter()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_filter;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private String m_filter;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getFilter__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 28, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setServerManager(ServerManager serverManager)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 28, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_serverManager = serverManager;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_serverManager__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public ServerManager getServerManager()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_serverManager;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private ServerManager m_serverManager;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getServerManager__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_serverManager__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_serverManager__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 22, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 29, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 22, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_metaLocation = metaLocation;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_metaLocation__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 29, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_assignmentManager = assignmentManager;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_assignmentManager__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public ServerName getMetaLocation()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public AssignmentManager getAssignmentManager()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_metaLocation;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_assignmentManager;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private ServerName m_metaLocation;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private AssignmentManager m_assignmentManager;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_metaLocation__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_assignmentManager__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 28, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setServerManager(ServerManager serverManager)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 28, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_serverManager = serverManager;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_serverManager__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public ServerManager getServerManager()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_serverManager;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private ServerManager m_serverManager;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getServerManager__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_serverManager__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_serverManager__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -287,59 +287,59 @@
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected boolean catalogJanitorEnabled;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected String filter;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setFilter(p_filter);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected AssignmentManager assignmentManager;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<a name="line.300"></a>
 <span class="sourceLineNo">301</span>  }<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  <a name="line.302"></a>
-<span class="sourceLineNo">303</span>  protected List&lt;ServerName&gt; servers;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setServers(p_servers);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<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>  protected String filter;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setFilter(p_filter);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected ServerManager serverManager;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerName metaLocation;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<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>  protected ServerName metaLocation;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected AssignmentManager assignmentManager;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<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>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
index 507426b..52d47c0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.Intf.html
@@ -68,14 +68,14 @@
 <span class="sourceLineNo">060</span>    @org.jamon.annotations.Argument(name = "master", type = "HMaster")},<a name="line.60"></a>
 <span class="sourceLineNo">061</span>  optionalArguments = {<a name="line.61"></a>
 <span class="sourceLineNo">062</span>    @org.jamon.annotations.Argument(name = "frags", type = "Map&lt;String,Integer&gt;"),<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.65"></a>
-<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager"),<a name="line.68"></a>
-<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.69"></a>
-<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean")})<a name="line.70"></a>
+<span class="sourceLineNo">063</span>    @org.jamon.annotations.Argument(name = "catalogJanitorEnabled", type = "boolean"),<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    @org.jamon.annotations.Argument(name = "filter", type = "String"),<a name="line.64"></a>
+<span class="sourceLineNo">065</span>    @org.jamon.annotations.Argument(name = "deadServers", type = "Set&lt;ServerName&gt;"),<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    @org.jamon.annotations.Argument(name = "format", type = "String"),<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    @org.jamon.annotations.Argument(name = "servers", type = "List&lt;ServerName&gt;"),<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    @org.jamon.annotations.Argument(name = "metaLocation", type = "ServerName"),<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    @org.jamon.annotations.Argument(name = "assignmentManager", type = "AssignmentManager"),<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    @org.jamon.annotations.Argument(name = "serverManager", type = "ServerManager")})<a name="line.70"></a>
 <span class="sourceLineNo">071</span>public class MasterStatusTmpl<a name="line.71"></a>
 <span class="sourceLineNo">072</span>  extends org.jamon.AbstractTemplateProxy<a name="line.72"></a>
 <span class="sourceLineNo">073</span>{<a name="line.73"></a>
@@ -133,142 +133,142 @@
 <span class="sourceLineNo">125</span>      return m_frags__IsNotDefault;<a name="line.125"></a>
 <span class="sourceLineNo">126</span>    }<a name="line.126"></a>
 <span class="sourceLineNo">127</span>    private boolean m_frags__IsNotDefault;<a name="line.127"></a>
-<span class="sourceLineNo">128</span>    // 27, 1<a name="line.128"></a>
-<span class="sourceLineNo">129</span>    public void setFormat(String format)<a name="line.129"></a>
+<span class="sourceLineNo">128</span>    // 25, 1<a name="line.128"></a>
+<span class="sourceLineNo">129</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.129"></a>
 <span class="sourceLineNo">130</span>    {<a name="line.130"></a>
-<span class="sourceLineNo">131</span>      // 27, 1<a name="line.131"></a>
-<span class="sourceLineNo">132</span>      m_format = format;<a name="line.132"></a>
-<span class="sourceLineNo">133</span>      m_format__IsNotDefault = true;<a name="line.133"></a>
+<span class="sourceLineNo">131</span>      // 25, 1<a name="line.131"></a>
+<span class="sourceLineNo">132</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.132"></a>
+<span class="sourceLineNo">133</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.133"></a>
 <span class="sourceLineNo">134</span>    }<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    public String getFormat()<a name="line.135"></a>
+<span class="sourceLineNo">135</span>    public boolean getCatalogJanitorEnabled()<a name="line.135"></a>
 <span class="sourceLineNo">136</span>    {<a name="line.136"></a>
-<span class="sourceLineNo">137</span>      return m_format;<a name="line.137"></a>
+<span class="sourceLineNo">137</span>      return m_catalogJanitorEnabled;<a name="line.137"></a>
 <span class="sourceLineNo">138</span>    }<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    private String m_format;<a name="line.139"></a>
-<span class="sourceLineNo">140</span>    public boolean getFormat__IsNotDefault()<a name="line.140"></a>
+<span class="sourceLineNo">139</span>    private boolean m_catalogJanitorEnabled;<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.140"></a>
 <span class="sourceLineNo">141</span>    {<a name="line.141"></a>
-<span class="sourceLineNo">142</span>      return m_format__IsNotDefault;<a name="line.142"></a>
+<span class="sourceLineNo">142</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.142"></a>
 <span class="sourceLineNo">143</span>    }<a name="line.143"></a>
-<span class="sourceLineNo">144</span>    private boolean m_format__IsNotDefault;<a name="line.144"></a>
-<span class="sourceLineNo">145</span>    // 24, 1<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.146"></a>
+<span class="sourceLineNo">144</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.144"></a>
+<span class="sourceLineNo">145</span>    // 26, 1<a name="line.145"></a>
+<span class="sourceLineNo">146</span>    public void setFilter(String filter)<a name="line.146"></a>
 <span class="sourceLineNo">147</span>    {<a name="line.147"></a>
-<span class="sourceLineNo">148</span>      // 24, 1<a name="line.148"></a>
-<span class="sourceLineNo">149</span>      m_deadServers = deadServers;<a name="line.149"></a>
-<span class="sourceLineNo">150</span>      m_deadServers__IsNotDefault = true;<a name="line.150"></a>
+<span class="sourceLineNo">148</span>      // 26, 1<a name="line.148"></a>
+<span class="sourceLineNo">149</span>      m_filter = filter;<a name="line.149"></a>
+<span class="sourceLineNo">150</span>      m_filter__IsNotDefault = true;<a name="line.150"></a>
 <span class="sourceLineNo">151</span>    }<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.152"></a>
+<span class="sourceLineNo">152</span>    public String getFilter()<a name="line.152"></a>
 <span class="sourceLineNo">153</span>    {<a name="line.153"></a>
-<span class="sourceLineNo">154</span>      return m_deadServers;<a name="line.154"></a>
+<span class="sourceLineNo">154</span>      return m_filter;<a name="line.154"></a>
 <span class="sourceLineNo">155</span>    }<a name="line.155"></a>
-<span class="sourceLineNo">156</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.156"></a>
-<span class="sourceLineNo">157</span>    public boolean getDeadServers__IsNotDefault()<a name="line.157"></a>
+<span class="sourceLineNo">156</span>    private String m_filter;<a name="line.156"></a>
+<span class="sourceLineNo">157</span>    public boolean getFilter__IsNotDefault()<a name="line.157"></a>
 <span class="sourceLineNo">158</span>    {<a name="line.158"></a>
-<span class="sourceLineNo">159</span>      return m_deadServers__IsNotDefault;<a name="line.159"></a>
+<span class="sourceLineNo">159</span>      return m_filter__IsNotDefault;<a name="line.159"></a>
 <span class="sourceLineNo">160</span>    }<a name="line.160"></a>
-<span class="sourceLineNo">161</span>    private boolean m_deadServers__IsNotDefault;<a name="line.161"></a>
-<span class="sourceLineNo">162</span>    // 29, 1<a name="line.162"></a>
-<span class="sourceLineNo">163</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.163"></a>
+<span class="sourceLineNo">161</span>    private boolean m_filter__IsNotDefault;<a name="line.161"></a>
+<span class="sourceLineNo">162</span>    // 24, 1<a name="line.162"></a>
+<span class="sourceLineNo">163</span>    public void setDeadServers(Set&lt;ServerName&gt; deadServers)<a name="line.163"></a>
 <span class="sourceLineNo">164</span>    {<a name="line.164"></a>
-<span class="sourceLineNo">165</span>      // 29, 1<a name="line.165"></a>
-<span class="sourceLineNo">166</span>      m_assignmentManager = assignmentManager;<a name="line.166"></a>
-<span class="sourceLineNo">167</span>      m_assignmentManager__IsNotDefault = true;<a name="line.167"></a>
+<span class="sourceLineNo">165</span>      // 24, 1<a name="line.165"></a>
+<span class="sourceLineNo">166</span>      m_deadServers = deadServers;<a name="line.166"></a>
+<span class="sourceLineNo">167</span>      m_deadServers__IsNotDefault = true;<a name="line.167"></a>
 <span class="sourceLineNo">168</span>    }<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    public AssignmentManager getAssignmentManager()<a name="line.169"></a>
+<span class="sourceLineNo">169</span>    public Set&lt;ServerName&gt; getDeadServers()<a name="line.169"></a>
 <span class="sourceLineNo">170</span>    {<a name="line.170"></a>
-<span class="sourceLineNo">171</span>      return m_assignmentManager;<a name="line.171"></a>
+<span class="sourceLineNo">171</span>      return m_deadServers;<a name="line.171"></a>
 <span class="sourceLineNo">172</span>    }<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    private AssignmentManager m_assignmentManager;<a name="line.173"></a>
-<span class="sourceLineNo">174</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.174"></a>
+<span class="sourceLineNo">173</span>    private Set&lt;ServerName&gt; m_deadServers;<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    public boolean getDeadServers__IsNotDefault()<a name="line.174"></a>
 <span class="sourceLineNo">175</span>    {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      return m_assignmentManager__IsNotDefault;<a name="line.176"></a>
+<span class="sourceLineNo">176</span>      return m_deadServers__IsNotDefault;<a name="line.176"></a>
 <span class="sourceLineNo">177</span>    }<a name="line.177"></a>
-<span class="sourceLineNo">178</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.178"></a>
-<span class="sourceLineNo">179</span>    // 23, 1<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.180"></a>
+<span class="sourceLineNo">178</span>    private boolean m_deadServers__IsNotDefault;<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    // 27, 1<a name="line.179"></a>
+<span class="sourceLineNo">180</span>    public void setFormat(String format)<a name="line.180"></a>
 <span class="sourceLineNo">181</span>    {<a name="line.181"></a>
-<span class="sourceLineNo">182</span>      // 23, 1<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      m_servers = servers;<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      m_servers__IsNotDefault = true;<a name="line.184"></a>
+<span class="sourceLineNo">182</span>      // 27, 1<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      m_format = format;<a name="line.183"></a>
+<span class="sourceLineNo">184</span>      m_format__IsNotDefault = true;<a name="line.184"></a>
 <span class="sourceLineNo">185</span>    }<a name="line.185"></a>
-<span class="sourceLineNo">186</span>    public List&lt;ServerName&gt; getServers()<a name="line.186"></a>
+<span class="sourceLineNo">186</span>    public String getFormat()<a name="line.186"></a>
 <span class="sourceLineNo">187</span>    {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>      return m_servers;<a name="line.188"></a>
+<span class="sourceLineNo">188</span>      return m_format;<a name="line.188"></a>
 <span class="sourceLineNo">189</span>    }<a name="line.189"></a>
-<span class="sourceLineNo">190</span>    private List&lt;ServerName&gt; m_servers;<a name="line.190"></a>
-<span class="sourceLineNo">191</span>    public boolean getServers__IsNotDefault()<a name="line.191"></a>
+<span class="sourceLineNo">190</span>    private String m_format;<a name="line.190"></a>
+<span class="sourceLineNo">191</span>    public boolean getFormat__IsNotDefault()<a name="line.191"></a>
 <span class="sourceLineNo">192</span>    {<a name="line.192"></a>
-<span class="sourceLineNo">193</span>      return m_servers__IsNotDefault;<a name="line.193"></a>
+<span class="sourceLineNo">193</span>      return m_format__IsNotDefault;<a name="line.193"></a>
 <span class="sourceLineNo">194</span>    }<a name="line.194"></a>
-<span class="sourceLineNo">195</span>    private boolean m_servers__IsNotDefault;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>    // 26, 1<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    public void setFilter(String filter)<a name="line.197"></a>
+<span class="sourceLineNo">195</span>    private boolean m_format__IsNotDefault;<a name="line.195"></a>
+<span class="sourceLineNo">196</span>    // 23, 1<a name="line.196"></a>
+<span class="sourceLineNo">197</span>    public void setServers(List&lt;ServerName&gt; servers)<a name="line.197"></a>
 <span class="sourceLineNo">198</span>    {<a name="line.198"></a>
-<span class="sourceLineNo">199</span>      // 26, 1<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      m_filter = filter;<a name="line.200"></a>
-<span class="sourceLineNo">201</span>      m_filter__IsNotDefault = true;<a name="line.201"></a>
+<span class="sourceLineNo">199</span>      // 23, 1<a name="line.199"></a>
+<span class="sourceLineNo">200</span>      m_servers = servers;<a name="line.200"></a>
+<span class="sourceLineNo">201</span>      m_servers__IsNotDefault = true;<a name="line.201"></a>
 <span class="sourceLineNo">202</span>    }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    public String getFilter()<a name="line.203"></a>
+<span class="sourceLineNo">203</span>    public List&lt;ServerName&gt; getServers()<a name="line.203"></a>
 <span class="sourceLineNo">204</span>    {<a name="line.204"></a>
-<span class="sourceLineNo">205</span>      return m_filter;<a name="line.205"></a>
+<span class="sourceLineNo">205</span>      return m_servers;<a name="line.205"></a>
 <span class="sourceLineNo">206</span>    }<a name="line.206"></a>
-<span class="sourceLineNo">207</span>    private String m_filter;<a name="line.207"></a>
-<span class="sourceLineNo">208</span>    public boolean getFilter__IsNotDefault()<a name="line.208"></a>
+<span class="sourceLineNo">207</span>    private List&lt;ServerName&gt; m_servers;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    public boolean getServers__IsNotDefault()<a name="line.208"></a>
 <span class="sourceLineNo">209</span>    {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>      return m_filter__IsNotDefault;<a name="line.210"></a>
+<span class="sourceLineNo">210</span>      return m_servers__IsNotDefault;<a name="line.210"></a>
 <span class="sourceLineNo">211</span>    }<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    private boolean m_filter__IsNotDefault;<a name="line.212"></a>
-<span class="sourceLineNo">213</span>    // 28, 1<a name="line.213"></a>
-<span class="sourceLineNo">214</span>    public void setServerManager(ServerManager serverManager)<a name="line.214"></a>
+<span class="sourceLineNo">212</span>    private boolean m_servers__IsNotDefault;<a name="line.212"></a>
+<span class="sourceLineNo">213</span>    // 22, 1<a name="line.213"></a>
+<span class="sourceLineNo">214</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.214"></a>
 <span class="sourceLineNo">215</span>    {<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // 28, 1<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      m_serverManager = serverManager;<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      m_serverManager__IsNotDefault = true;<a name="line.218"></a>
+<span class="sourceLineNo">216</span>      // 22, 1<a name="line.216"></a>
+<span class="sourceLineNo">217</span>      m_metaLocation = metaLocation;<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      m_metaLocation__IsNotDefault = true;<a name="line.218"></a>
 <span class="sourceLineNo">219</span>    }<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    public ServerManager getServerManager()<a name="line.220"></a>
+<span class="sourceLineNo">220</span>    public ServerName getMetaLocation()<a name="line.220"></a>
 <span class="sourceLineNo">221</span>    {<a name="line.221"></a>
-<span class="sourceLineNo">222</span>      return m_serverManager;<a name="line.222"></a>
+<span class="sourceLineNo">222</span>      return m_metaLocation;<a name="line.222"></a>
 <span class="sourceLineNo">223</span>    }<a name="line.223"></a>
-<span class="sourceLineNo">224</span>    private ServerManager m_serverManager;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>    public boolean getServerManager__IsNotDefault()<a name="line.225"></a>
+<span class="sourceLineNo">224</span>    private ServerName m_metaLocation;<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.225"></a>
 <span class="sourceLineNo">226</span>    {<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      return m_serverManager__IsNotDefault;<a name="line.227"></a>
+<span class="sourceLineNo">227</span>      return m_metaLocation__IsNotDefault;<a name="line.227"></a>
 <span class="sourceLineNo">228</span>    }<a name="line.228"></a>
-<span class="sourceLineNo">229</span>    private boolean m_serverManager__IsNotDefault;<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    // 22, 1<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    public void setMetaLocation(ServerName metaLocation)<a name="line.231"></a>
+<span class="sourceLineNo">229</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    // 29, 1<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    public void setAssignmentManager(AssignmentManager assignmentManager)<a name="line.231"></a>
 <span class="sourceLineNo">232</span>    {<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      // 22, 1<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      m_metaLocation = metaLocation;<a name="line.234"></a>
-<span class="sourceLineNo">235</span>      m_metaLocation__IsNotDefault = true;<a name="line.235"></a>
+<span class="sourceLineNo">233</span>      // 29, 1<a name="line.233"></a>
+<span class="sourceLineNo">234</span>      m_assignmentManager = assignmentManager;<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      m_assignmentManager__IsNotDefault = true;<a name="line.235"></a>
 <span class="sourceLineNo">236</span>    }<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    public ServerName getMetaLocation()<a name="line.237"></a>
+<span class="sourceLineNo">237</span>    public AssignmentManager getAssignmentManager()<a name="line.237"></a>
 <span class="sourceLineNo">238</span>    {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      return m_metaLocation;<a name="line.239"></a>
+<span class="sourceLineNo">239</span>      return m_assignmentManager;<a name="line.239"></a>
 <span class="sourceLineNo">240</span>    }<a name="line.240"></a>
-<span class="sourceLineNo">241</span>    private ServerName m_metaLocation;<a name="line.241"></a>
-<span class="sourceLineNo">242</span>    public boolean getMetaLocation__IsNotDefault()<a name="line.242"></a>
+<span class="sourceLineNo">241</span>    private AssignmentManager m_assignmentManager;<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    public boolean getAssignmentManager__IsNotDefault()<a name="line.242"></a>
 <span class="sourceLineNo">243</span>    {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>      return m_metaLocation__IsNotDefault;<a name="line.244"></a>
+<span class="sourceLineNo">244</span>      return m_assignmentManager__IsNotDefault;<a name="line.244"></a>
 <span class="sourceLineNo">245</span>    }<a name="line.245"></a>
-<span class="sourceLineNo">246</span>    private boolean m_metaLocation__IsNotDefault;<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    // 25, 1<a name="line.247"></a>
-<span class="sourceLineNo">248</span>    public void setCatalogJanitorEnabled(boolean catalogJanitorEnabled)<a name="line.248"></a>
+<span class="sourceLineNo">246</span>    private boolean m_assignmentManager__IsNotDefault;<a name="line.246"></a>
+<span class="sourceLineNo">247</span>    // 28, 1<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    public void setServerManager(ServerManager serverManager)<a name="line.248"></a>
 <span class="sourceLineNo">249</span>    {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>      // 25, 1<a name="line.250"></a>
-<span class="sourceLineNo">251</span>      m_catalogJanitorEnabled = catalogJanitorEnabled;<a name="line.251"></a>
-<span class="sourceLineNo">252</span>      m_catalogJanitorEnabled__IsNotDefault = true;<a name="line.252"></a>
+<span class="sourceLineNo">250</span>      // 28, 1<a name="line.250"></a>
+<span class="sourceLineNo">251</span>      m_serverManager = serverManager;<a name="line.251"></a>
+<span class="sourceLineNo">252</span>      m_serverManager__IsNotDefault = true;<a name="line.252"></a>
 <span class="sourceLineNo">253</span>    }<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    public boolean getCatalogJanitorEnabled()<a name="line.254"></a>
+<span class="sourceLineNo">254</span>    public ServerManager getServerManager()<a name="line.254"></a>
 <span class="sourceLineNo">255</span>    {<a name="line.255"></a>
-<span class="sourceLineNo">256</span>      return m_catalogJanitorEnabled;<a name="line.256"></a>
+<span class="sourceLineNo">256</span>      return m_serverManager;<a name="line.256"></a>
 <span class="sourceLineNo">257</span>    }<a name="line.257"></a>
-<span class="sourceLineNo">258</span>    private boolean m_catalogJanitorEnabled;<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    public boolean getCatalogJanitorEnabled__IsNotDefault()<a name="line.259"></a>
+<span class="sourceLineNo">258</span>    private ServerManager m_serverManager;<a name="line.258"></a>
+<span class="sourceLineNo">259</span>    public boolean getServerManager__IsNotDefault()<a name="line.259"></a>
 <span class="sourceLineNo">260</span>    {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      return m_catalogJanitorEnabled__IsNotDefault;<a name="line.261"></a>
+<span class="sourceLineNo">261</span>      return m_serverManager__IsNotDefault;<a name="line.261"></a>
 <span class="sourceLineNo">262</span>    }<a name="line.262"></a>
-<span class="sourceLineNo">263</span>    private boolean m_catalogJanitorEnabled__IsNotDefault;<a name="line.263"></a>
+<span class="sourceLineNo">263</span>    private boolean m_serverManager__IsNotDefault;<a name="line.263"></a>
 <span class="sourceLineNo">264</span>  }<a name="line.264"></a>
 <span class="sourceLineNo">265</span>  @Override<a name="line.265"></a>
 <span class="sourceLineNo">266</span>  protected org.jamon.AbstractTemplateProxy.ImplData makeImplData()<a name="line.266"></a>
@@ -287,59 +287,59 @@
 <span class="sourceLineNo">279</span>    return this;<a name="line.279"></a>
 <span class="sourceLineNo">280</span>  }<a name="line.280"></a>
 <span class="sourceLineNo">281</span>  <a name="line.281"></a>
-<span class="sourceLineNo">282</span>  protected String format;<a name="line.282"></a>
-<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.283"></a>
+<span class="sourceLineNo">282</span>  protected boolean catalogJanitorEnabled;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.283"></a>
 <span class="sourceLineNo">284</span>  {<a name="line.284"></a>
-<span class="sourceLineNo">285</span>    (getImplData()).setFormat(p_format);<a name="line.285"></a>
+<span class="sourceLineNo">285</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.285"></a>
 <span class="sourceLineNo">286</span>    return this;<a name="line.286"></a>
 <span class="sourceLineNo">287</span>  }<a name="line.287"></a>
 <span class="sourceLineNo">288</span>  <a name="line.288"></a>
-<span class="sourceLineNo">289</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.290"></a>
+<span class="sourceLineNo">289</span>  protected String filter;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.290"></a>
 <span class="sourceLineNo">291</span>  {<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.292"></a>
+<span class="sourceLineNo">292</span>    (getImplData()).setFilter(p_filter);<a name="line.292"></a>
 <span class="sourceLineNo">293</span>    return this;<a name="line.293"></a>
 <span class="sourceLineNo">294</span>  }<a name="line.294"></a>
 <span class="sourceLineNo">295</span>  <a name="line.295"></a>
-<span class="sourceLineNo">296</span>  protected AssignmentManager assignmentManager;<a name="line.296"></a>
-<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.297"></a>
+<span class="sourceLineNo">296</span>  protected Set&lt;ServerName&gt; deadServers;<a name="line.296"></a>
+<span class="sourceLineNo">297</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setDeadServers(Set&lt;ServerName&gt; p_deadServers)<a name="line.297"></a>
 <span class="sourceLineNo">298</span>  {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.299"></a>
+<span class="sourceLineNo">299</span>    (getImplData()).setDeadServers(p_deadServers);<a name="line.299"></a>
 <span class="sourceLineNo">300</span>    return this;<a name="line.300"></a>
 <span class="sourceLineNo">301</span>  }<a name="line.301"></a>
 <span class="sourceLineNo">302</span>  <a name="line.302"></a>
-<span class="sourceLineNo">303</span>  protected List&lt;ServerName&gt; servers;<a name="line.303"></a>
-<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.304"></a>
+<span class="sourceLineNo">303</span>  protected String format;<a name="line.303"></a>
+<span class="sourceLineNo">304</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFormat(String p_format)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>  {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    (getImplData()).setServers(p_servers);<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    (getImplData()).setFormat(p_format);<a name="line.306"></a>
 <span class="sourceLineNo">307</span>    return this;<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>  protected String filter;<a name="line.310"></a>
-<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setFilter(String p_filter)<a name="line.311"></a>
+<span class="sourceLineNo">310</span>  protected List&lt;ServerName&gt; servers;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServers(List&lt;ServerName&gt; p_servers)<a name="line.311"></a>
 <span class="sourceLineNo">312</span>  {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>    (getImplData()).setFilter(p_filter);<a name="line.313"></a>
+<span class="sourceLineNo">313</span>    (getImplData()).setServers(p_servers);<a name="line.313"></a>
 <span class="sourceLineNo">314</span>    return this;<a name="line.314"></a>
 <span class="sourceLineNo">315</span>  }<a name="line.315"></a>
 <span class="sourceLineNo">316</span>  <a name="line.316"></a>
-<span class="sourceLineNo">317</span>  protected ServerManager serverManager;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.318"></a>
+<span class="sourceLineNo">317</span>  protected ServerName metaLocation;<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.318"></a>
 <span class="sourceLineNo">319</span>  {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.320"></a>
+<span class="sourceLineNo">320</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.320"></a>
 <span class="sourceLineNo">321</span>    return this;<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>  protected ServerName metaLocation;<a name="line.324"></a>
-<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setMetaLocation(ServerName p_metaLocation)<a name="line.325"></a>
+<span class="sourceLineNo">324</span>  protected AssignmentManager assignmentManager;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setAssignmentManager(AssignmentManager p_assignmentManager)<a name="line.325"></a>
 <span class="sourceLineNo">326</span>  {<a name="line.326"></a>
-<span class="sourceLineNo">327</span>    (getImplData()).setMetaLocation(p_metaLocation);<a name="line.327"></a>
+<span class="sourceLineNo">327</span>    (getImplData()).setAssignmentManager(p_assignmentManager);<a name="line.327"></a>
 <span class="sourceLineNo">328</span>    return this;<a name="line.328"></a>
 <span class="sourceLineNo">329</span>  }<a name="line.329"></a>
 <span class="sourceLineNo">330</span>  <a name="line.330"></a>
-<span class="sourceLineNo">331</span>  protected boolean catalogJanitorEnabled;<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setCatalogJanitorEnabled(boolean p_catalogJanitorEnabled)<a name="line.332"></a>
+<span class="sourceLineNo">331</span>  protected ServerManager serverManager;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>  public final org.apache.hadoop.hbase.tmpl.master.MasterStatusTmpl setServerManager(ServerManager p_serverManager)<a name="line.332"></a>
 <span class="sourceLineNo">333</span>  {<a name="line.333"></a>
-<span class="sourceLineNo">334</span>    (getImplData()).setCatalogJanitorEnabled(p_catalogJanitorEnabled);<a name="line.334"></a>
+<span class="sourceLineNo">334</span>    (getImplData()).setServerManager(p_serverManager);<a name="line.334"></a>
 <span class="sourceLineNo">335</span>    return this;<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>


[22/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
index 1b54cf8..195ffb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[15/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
index 3a9a7f7..d857fe6 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/io/hfile/bucket/BucketCache.StatisticsThread.html
@@ -311,1174 +311,1177 @@
 <span class="sourceLineNo">303</span>   */<a name="line.303"></a>
 <span class="sourceLineNo">304</span>  private IOEngine getIOEngineFromName(String ioEngineName, long capacity)<a name="line.304"></a>
 <span class="sourceLineNo">305</span>      throws IOException {<a name="line.305"></a>
-<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:"))<a name="line.306"></a>
+<span class="sourceLineNo">306</span>    if (ioEngineName.startsWith("file:")) {<a name="line.306"></a>
 <span class="sourceLineNo">307</span>      return new FileIOEngine(ioEngineName.substring(5), capacity);<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    else if (ioEngineName.startsWith("offheap"))<a name="line.308"></a>
+<span class="sourceLineNo">308</span>    } else if (ioEngineName.startsWith("offheap")) {<a name="line.308"></a>
 <span class="sourceLineNo">309</span>      return new ByteBufferIOEngine(capacity, true);<a name="line.309"></a>
-<span class="sourceLineNo">310</span>    else if (ioEngineName.startsWith("heap"))<a name="line.310"></a>
+<span class="sourceLineNo">310</span>    } else if (ioEngineName.startsWith("heap")) {<a name="line.310"></a>
 <span class="sourceLineNo">311</span>      return new ByteBufferIOEngine(capacity, false);<a name="line.311"></a>
-<span class="sourceLineNo">312</span>    else<a name="line.312"></a>
-<span class="sourceLineNo">313</span>      throw new IllegalArgumentException(<a name="line.313"></a>
-<span class="sourceLineNo">314</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  }<a name="line.315"></a>
-<span class="sourceLineNo">316</span><a name="line.316"></a>
-<span class="sourceLineNo">317</span>  /**<a name="line.317"></a>
-<span class="sourceLineNo">318</span>   * Cache the block with the specified name and buffer.<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * @param cacheKey block's cache key<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * @param buf block buffer<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   */<a name="line.321"></a>
-<span class="sourceLineNo">322</span>  @Override<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.323"></a>
-<span class="sourceLineNo">324</span>    cacheBlock(cacheKey, buf, false, false);<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>   * Cache the block with the specified name and buffer.<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * @param cacheKey block's cache key<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * @param cachedItem block buffer<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   * @param inMemory if block is in-memory<a name="line.331"></a>
-<span class="sourceLineNo">332</span>   * @param cacheDataInL1<a name="line.332"></a>
-<span class="sourceLineNo">333</span>   */<a name="line.333"></a>
-<span class="sourceLineNo">334</span>  @Override<a name="line.334"></a>
-<span class="sourceLineNo">335</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.335"></a>
-<span class="sourceLineNo">336</span>      final boolean cacheDataInL1) {<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<a name="line.337"></a>
-<span class="sourceLineNo">338</span>  }<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>  /**<a name="line.340"></a>
-<span class="sourceLineNo">341</span>   * Cache the block to ramCache<a name="line.341"></a>
-<span class="sourceLineNo">342</span>   * @param cacheKey block's cache key<a name="line.342"></a>
-<span class="sourceLineNo">343</span>   * @param cachedItem block buffer<a name="line.343"></a>
-<span class="sourceLineNo">344</span>   * @param inMemory if block is in-memory<a name="line.344"></a>
-<span class="sourceLineNo">345</span>   * @param wait if true, blocking wait when queue is full<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   */<a name="line.346"></a>
-<span class="sourceLineNo">347</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.347"></a>
-<span class="sourceLineNo">348</span>      boolean wait) {<a name="line.348"></a>
-<span class="sourceLineNo">349</span>    if (!cacheEnabled) {<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      return;<a name="line.354"></a>
-<span class="sourceLineNo">355</span>    }<a name="line.355"></a>
-<span class="sourceLineNo">356</span><a name="line.356"></a>
-<span class="sourceLineNo">357</span>    /*<a name="line.357"></a>
-<span class="sourceLineNo">358</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.358"></a>
-<span class="sourceLineNo">359</span>     */<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    RAMQueueEntry re =<a name="line.360"></a>
-<span class="sourceLineNo">361</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.361"></a>
-<span class="sourceLineNo">362</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.362"></a>
-<span class="sourceLineNo">363</span>      return;<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    }<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.365"></a>
-<span class="sourceLineNo">366</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.366"></a>
-<span class="sourceLineNo">367</span>    boolean successfulAddition = false;<a name="line.367"></a>
-<span class="sourceLineNo">368</span>    if (wait) {<a name="line.368"></a>
-<span class="sourceLineNo">369</span>      try {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.370"></a>
-<span class="sourceLineNo">371</span>      } catch (InterruptedException e) {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>        Thread.currentThread().interrupt();<a name="line.372"></a>
-<span class="sourceLineNo">373</span>      }<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    } else {<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      successfulAddition = bq.offer(re);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    }<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    if (!successfulAddition) {<a name="line.377"></a>
-<span class="sourceLineNo">378</span>      ramCache.remove(cacheKey);<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      cacheStats.failInsert();<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    } else {<a name="line.380"></a>
-<span class="sourceLineNo">381</span>      this.blockNumber.incrementAndGet();<a name="line.381"></a>
-<span class="sourceLineNo">382</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.383"></a>
-<span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>  }<a name="line.385"></a>
-<span class="sourceLineNo">386</span><a name="line.386"></a>
-<span class="sourceLineNo">387</span>  /**<a name="line.387"></a>
-<span class="sourceLineNo">388</span>   * Get the buffer of the block with the specified key.<a name="line.388"></a>
-<span class="sourceLineNo">389</span>   * @param key block's cache key<a name="line.389"></a>
-<span class="sourceLineNo">390</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.390"></a>
-<span class="sourceLineNo">391</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.391"></a>
-<span class="sourceLineNo">392</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.392"></a>
-<span class="sourceLineNo">393</span>   * @return buffer of specified cache key, or null if not in cache<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 Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      boolean updateCacheMetrics) {<a name="line.397"></a>
-<span class="sourceLineNo">398</span>    if (!cacheEnabled) {<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      return null;<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    if (re != null) {<a name="line.402"></a>
-<span class="sourceLineNo">403</span>      if (updateCacheMetrics) {<a name="line.403"></a>
-<span class="sourceLineNo">404</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.404"></a>
-<span class="sourceLineNo">405</span>      }<a name="line.405"></a>
-<span class="sourceLineNo">406</span>      re.access(accessCount.incrementAndGet());<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      return re.getData();<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
-<span class="sourceLineNo">409</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (bucketEntry != null) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      long start = System.nanoTime();<a name="line.411"></a>
-<span class="sourceLineNo">412</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      try {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>        lock.readLock().lock();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.415"></a>
-<span class="sourceLineNo">416</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.416"></a>
-<span class="sourceLineNo">417</span>        // existence here.<a name="line.417"></a>
-<span class="sourceLineNo">418</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.418"></a>
-<span class="sourceLineNo">419</span>          // TODO : change this area - should be removed after server cells and<a name="line.419"></a>
-<span class="sourceLineNo">420</span>          // 12295 are available<a name="line.420"></a>
-<span class="sourceLineNo">421</span>          int len = bucketEntry.getLength();<a name="line.421"></a>
-<span class="sourceLineNo">422</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.422"></a>
-<span class="sourceLineNo">423</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.423"></a>
-<span class="sourceLineNo">424</span>          long timeTaken = System.nanoTime() - start;<a name="line.424"></a>
-<span class="sourceLineNo">425</span>          if (updateCacheMetrics) {<a name="line.425"></a>
-<span class="sourceLineNo">426</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.426"></a>
-<span class="sourceLineNo">427</span>            cacheStats.ioHit(timeTaken);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>          }<a name="line.428"></a>
-<span class="sourceLineNo">429</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.429"></a>
-<span class="sourceLineNo">430</span>            bucketEntry.refCount.incrementAndGet();<a name="line.430"></a>
+<span class="sourceLineNo">312</span>    } else if (ioEngineName.startsWith("mmap:")) {<a name="line.312"></a>
+<span class="sourceLineNo">313</span>      return new FileMmapEngine(ioEngineName.substring(5), capacity);<a name="line.313"></a>
+<span class="sourceLineNo">314</span>    } else {<a name="line.314"></a>
+<span class="sourceLineNo">315</span>      throw new IllegalArgumentException(<a name="line.315"></a>
+<span class="sourceLineNo">316</span>          "Don't understand io engine name for cache - prefix with file:, heap or offheap");<a name="line.316"></a>
+<span class="sourceLineNo">317</span>    }<a name="line.317"></a>
+<span class="sourceLineNo">318</span>  }<a name="line.318"></a>
+<span class="sourceLineNo">319</span><a name="line.319"></a>
+<span class="sourceLineNo">320</span>  /**<a name="line.320"></a>
+<span class="sourceLineNo">321</span>   * Cache the block with the specified name and buffer.<a name="line.321"></a>
+<span class="sourceLineNo">322</span>   * @param cacheKey block's cache key<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * @param buf block buffer<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   */<a name="line.324"></a>
+<span class="sourceLineNo">325</span>  @Override<a name="line.325"></a>
+<span class="sourceLineNo">326</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable buf) {<a name="line.326"></a>
+<span class="sourceLineNo">327</span>    cacheBlock(cacheKey, buf, false, false);<a name="line.327"></a>
+<span class="sourceLineNo">328</span>  }<a name="line.328"></a>
+<span class="sourceLineNo">329</span><a name="line.329"></a>
+<span class="sourceLineNo">330</span>  /**<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * Cache the block with the specified name and buffer.<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * @param cacheKey block's cache key<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * @param cachedItem block buffer<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * @param inMemory if block is in-memory<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   * @param cacheDataInL1<a name="line.335"></a>
+<span class="sourceLineNo">336</span>   */<a name="line.336"></a>
+<span class="sourceLineNo">337</span>  @Override<a name="line.337"></a>
+<span class="sourceLineNo">338</span>  public void cacheBlock(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      final boolean cacheDataInL1) {<a name="line.339"></a>
+<span class="sourceLineNo">340</span>    cacheBlockWithWait(cacheKey, cachedItem, inMemory, wait_when_cache);<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>  /**<a name="line.343"></a>
+<span class="sourceLineNo">344</span>   * Cache the block to ramCache<a name="line.344"></a>
+<span class="sourceLineNo">345</span>   * @param cacheKey block's cache key<a name="line.345"></a>
+<span class="sourceLineNo">346</span>   * @param cachedItem block buffer<a name="line.346"></a>
+<span class="sourceLineNo">347</span>   * @param inMemory if block is in-memory<a name="line.347"></a>
+<span class="sourceLineNo">348</span>   * @param wait if true, blocking wait when queue is full<a name="line.348"></a>
+<span class="sourceLineNo">349</span>   */<a name="line.349"></a>
+<span class="sourceLineNo">350</span>  public void cacheBlockWithWait(BlockCacheKey cacheKey, Cacheable cachedItem, boolean inMemory,<a name="line.350"></a>
+<span class="sourceLineNo">351</span>      boolean wait) {<a name="line.351"></a>
+<span class="sourceLineNo">352</span>    if (!cacheEnabled) {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return;<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>    if (backingMap.containsKey(cacheKey)) {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    /*<a name="line.360"></a>
+<span class="sourceLineNo">361</span>     * Stuff the entry into the RAM cache so it can get drained to the persistent store<a name="line.361"></a>
+<span class="sourceLineNo">362</span>     */<a name="line.362"></a>
+<span class="sourceLineNo">363</span>    RAMQueueEntry re =<a name="line.363"></a>
+<span class="sourceLineNo">364</span>        new RAMQueueEntry(cacheKey, cachedItem, accessCount.incrementAndGet(), inMemory);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>    if (ramCache.putIfAbsent(cacheKey, re) != null) {<a name="line.365"></a>
+<span class="sourceLineNo">366</span>      return;<a name="line.366"></a>
+<span class="sourceLineNo">367</span>    }<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    int queueNum = (cacheKey.hashCode() &amp; 0x7FFFFFFF) % writerQueues.size();<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    BlockingQueue&lt;RAMQueueEntry&gt; bq = writerQueues.get(queueNum);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    boolean successfulAddition = false;<a name="line.370"></a>
+<span class="sourceLineNo">371</span>    if (wait) {<a name="line.371"></a>
+<span class="sourceLineNo">372</span>      try {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>        successfulAddition = bq.offer(re, DEFAULT_CACHE_WAIT_TIME, TimeUnit.MILLISECONDS);<a name="line.373"></a>
+<span class="sourceLineNo">374</span>      } catch (InterruptedException e) {<a name="line.374"></a>
+<span class="sourceLineNo">375</span>        Thread.currentThread().interrupt();<a name="line.375"></a>
+<span class="sourceLineNo">376</span>      }<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    } else {<a name="line.377"></a>
+<span class="sourceLineNo">378</span>      successfulAddition = bq.offer(re);<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    }<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    if (!successfulAddition) {<a name="line.380"></a>
+<span class="sourceLineNo">381</span>      ramCache.remove(cacheKey);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>      cacheStats.failInsert();<a name="line.382"></a>
+<span class="sourceLineNo">383</span>    } else {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.blockNumber.incrementAndGet();<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.heapSize.addAndGet(cachedItem.heapSize());<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      blocksByHFile.put(cacheKey.getHfileName(), cacheKey);<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Get the buffer of the block with the specified key.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   * @param key block's cache key<a name="line.392"></a>
+<span class="sourceLineNo">393</span>   * @param caching true if the caller caches blocks on cache misses<a name="line.393"></a>
+<span class="sourceLineNo">394</span>   * @param repeat Whether this is a repeat lookup for the same block<a name="line.394"></a>
+<span class="sourceLineNo">395</span>   * @param updateCacheMetrics Whether we should update cache metrics or not<a name="line.395"></a>
+<span class="sourceLineNo">396</span>   * @return buffer of specified cache key, or null if not in cache<a name="line.396"></a>
+<span class="sourceLineNo">397</span>   */<a name="line.397"></a>
+<span class="sourceLineNo">398</span>  @Override<a name="line.398"></a>
+<span class="sourceLineNo">399</span>  public Cacheable getBlock(BlockCacheKey key, boolean caching, boolean repeat,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      boolean updateCacheMetrics) {<a name="line.400"></a>
+<span class="sourceLineNo">401</span>    if (!cacheEnabled) {<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      return null;<a name="line.402"></a>
+<span class="sourceLineNo">403</span>    }<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    RAMQueueEntry re = ramCache.get(key);<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    if (re != null) {<a name="line.405"></a>
+<span class="sourceLineNo">406</span>      if (updateCacheMetrics) {<a name="line.406"></a>
+<span class="sourceLineNo">407</span>        cacheStats.hit(caching, key.isPrimary());<a name="line.407"></a>
+<span class="sourceLineNo">408</span>      }<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      re.access(accessCount.incrementAndGet());<a name="line.409"></a>
+<span class="sourceLineNo">410</span>      return re.getData();<a name="line.410"></a>
+<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    BucketEntry bucketEntry = backingMap.get(key);<a name="line.412"></a>
+<span class="sourceLineNo">413</span>    if (bucketEntry != null) {<a name="line.413"></a>
+<span class="sourceLineNo">414</span>      long start = System.nanoTime();<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      try {<a name="line.416"></a>
+<span class="sourceLineNo">417</span>        lock.readLock().lock();<a name="line.417"></a>
+<span class="sourceLineNo">418</span>        // We can not read here even if backingMap does contain the given key because its offset<a name="line.418"></a>
+<span class="sourceLineNo">419</span>        // maybe changed. If we lock BlockCacheKey instead of offset, then we can only check<a name="line.419"></a>
+<span class="sourceLineNo">420</span>        // existence here.<a name="line.420"></a>
+<span class="sourceLineNo">421</span>        if (bucketEntry.equals(backingMap.get(key))) {<a name="line.421"></a>
+<span class="sourceLineNo">422</span>          // TODO : change this area - should be removed after server cells and<a name="line.422"></a>
+<span class="sourceLineNo">423</span>          // 12295 are available<a name="line.423"></a>
+<span class="sourceLineNo">424</span>          int len = bucketEntry.getLength();<a name="line.424"></a>
+<span class="sourceLineNo">425</span>          Cacheable cachedBlock = ioEngine.read(bucketEntry.offset(), len,<a name="line.425"></a>
+<span class="sourceLineNo">426</span>              bucketEntry.deserializerReference(this.deserialiserMap));<a name="line.426"></a>
+<span class="sourceLineNo">427</span>          long timeTaken = System.nanoTime() - start;<a name="line.427"></a>
+<span class="sourceLineNo">428</span>          if (updateCacheMetrics) {<a name="line.428"></a>
+<span class="sourceLineNo">429</span>            cacheStats.hit(caching, key.isPrimary());<a name="line.429"></a>
+<span class="sourceLineNo">430</span>            cacheStats.ioHit(timeTaken);<a name="line.430"></a>
 <span class="sourceLineNo">431</span>          }<a name="line.431"></a>
-<span class="sourceLineNo">432</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.432"></a>
-<span class="sourceLineNo">433</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.433"></a>
-<span class="sourceLineNo">434</span>            ioErrorStartTime = -1;<a name="line.434"></a>
-<span class="sourceLineNo">435</span>          }<a name="line.435"></a>
-<span class="sourceLineNo">436</span>          return cachedBlock;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        }<a name="line.437"></a>
-<span class="sourceLineNo">438</span>      } catch (IOException ioex) {<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        checkIOErrorIsTolerated();<a name="line.440"></a>
-<span class="sourceLineNo">441</span>      } finally {<a name="line.441"></a>
-<span class="sourceLineNo">442</span>        lock.readLock().unlock();<a name="line.442"></a>
-<span class="sourceLineNo">443</span>      }<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    }<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.445"></a>
-<span class="sourceLineNo">446</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.446"></a>
+<span class="sourceLineNo">432</span>          if (cachedBlock.getMemoryType() == MemoryType.SHARED) {<a name="line.432"></a>
+<span class="sourceLineNo">433</span>            bucketEntry.refCount.incrementAndGet();<a name="line.433"></a>
+<span class="sourceLineNo">434</span>          }<a name="line.434"></a>
+<span class="sourceLineNo">435</span>          bucketEntry.access(accessCount.incrementAndGet());<a name="line.435"></a>
+<span class="sourceLineNo">436</span>          if (this.ioErrorStartTime &gt; 0) {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>            ioErrorStartTime = -1;<a name="line.437"></a>
+<span class="sourceLineNo">438</span>          }<a name="line.438"></a>
+<span class="sourceLineNo">439</span>          return cachedBlock;<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        }<a name="line.440"></a>
+<span class="sourceLineNo">441</span>      } catch (IOException ioex) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>        LOG.error("Failed reading block " + key + " from bucket cache", ioex);<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        checkIOErrorIsTolerated();<a name="line.443"></a>
+<span class="sourceLineNo">444</span>      } finally {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>        lock.readLock().unlock();<a name="line.445"></a>
+<span class="sourceLineNo">446</span>      }<a name="line.446"></a>
 <span class="sourceLineNo">447</span>    }<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    return null;<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>  @VisibleForTesting<a name="line.451"></a>
-<span class="sourceLineNo">452</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    if (decrementBlockNumber) {<a name="line.456"></a>
-<span class="sourceLineNo">457</span>      this.blockNumber.decrementAndGet();<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>  @Override<a name="line.461"></a>
-<span class="sourceLineNo">462</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    return evictBlock(cacheKey, true);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>  }<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.466"></a>
-<span class="sourceLineNo">467</span>  // bucket map<a name="line.467"></a>
-<span class="sourceLineNo">468</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    if (!cacheEnabled) {<a name="line.469"></a>
-<span class="sourceLineNo">470</span>      return false;<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    }<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    if (bucketEntry == null) {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      if (removedBlock != null) {<a name="line.475"></a>
-<span class="sourceLineNo">476</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.476"></a>
-<span class="sourceLineNo">477</span>        return true;<a name="line.477"></a>
-<span class="sourceLineNo">478</span>      } else {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>        return false;<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      }<a name="line.480"></a>
-<span class="sourceLineNo">481</span>    }<a name="line.481"></a>
-<span class="sourceLineNo">482</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    try {<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      lock.writeLock().lock();<a name="line.484"></a>
-<span class="sourceLineNo">485</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.485"></a>
-<span class="sourceLineNo">486</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      } else {<a name="line.487"></a>
-<span class="sourceLineNo">488</span>        return false;<a name="line.488"></a>
-<span class="sourceLineNo">489</span>      }<a name="line.489"></a>
-<span class="sourceLineNo">490</span>    } finally {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      lock.writeLock().unlock();<a name="line.491"></a>
-<span class="sourceLineNo">492</span>    }<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.493"></a>
-<span class="sourceLineNo">494</span>    return true;<a name="line.494"></a>
-<span class="sourceLineNo">495</span>  }<a name="line.495"></a>
-<span class="sourceLineNo">496</span><a name="line.496"></a>
-<span class="sourceLineNo">497</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    if (removedBlock != null) {<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      this.blockNumber.decrementAndGet();<a name="line.500"></a>
-<span class="sourceLineNo">501</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    }<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    return removedBlock;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>  }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.506"></a>
-<span class="sourceLineNo">507</span>    if (!cacheEnabled) {<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      return false;<a name="line.508"></a>
-<span class="sourceLineNo">509</span>    }<a name="line.509"></a>
-<span class="sourceLineNo">510</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.511"></a>
-<span class="sourceLineNo">512</span>    if (bucketEntry == null) {<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      if (removedBlock != null) {<a name="line.513"></a>
-<span class="sourceLineNo">514</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.514"></a>
-<span class="sourceLineNo">515</span>        return true;<a name="line.515"></a>
-<span class="sourceLineNo">516</span>      } else {<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        return false;<a name="line.517"></a>
-<span class="sourceLineNo">518</span>      }<a name="line.518"></a>
-<span class="sourceLineNo">519</span>    }<a name="line.519"></a>
-<span class="sourceLineNo">520</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    try {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>      lock.writeLock().lock();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>      int refCount = bucketEntry.refCount.get();<a name="line.523"></a>
-<span class="sourceLineNo">524</span>      if(refCount == 0) {<a name="line.524"></a>
-<span class="sourceLineNo">525</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        } else {<a name="line.527"></a>
-<span class="sourceLineNo">528</span>          return false;<a name="line.528"></a>
-<span class="sourceLineNo">529</span>        }<a name="line.529"></a>
-<span class="sourceLineNo">530</span>      } else {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>        if(!deletedBlock) {<a name="line.531"></a>
-<span class="sourceLineNo">532</span>          if (LOG.isDebugEnabled()) {<a name="line.532"></a>
-<span class="sourceLineNo">533</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.533"></a>
-<span class="sourceLineNo">534</span>                + " readers. Can not be freed now");<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          }<a name="line.535"></a>
-<span class="sourceLineNo">536</span>          return false;<a name="line.536"></a>
-<span class="sourceLineNo">537</span>        } else {<a name="line.537"></a>
-<span class="sourceLineNo">538</span>          if (LOG.isDebugEnabled()) {<a name="line.538"></a>
-<span class="sourceLineNo">539</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.539"></a>
-<span class="sourceLineNo">540</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.540"></a>
-<span class="sourceLineNo">541</span>                + " for evicting at a later point");<a name="line.541"></a>
-<span class="sourceLineNo">542</span>          }<a name="line.542"></a>
-<span class="sourceLineNo">543</span>          bucketEntry.markedForEvict = true;<a name="line.543"></a>
-<span class="sourceLineNo">544</span>        }<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      }<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    } finally {<a name="line.546"></a>
-<span class="sourceLineNo">547</span>      lock.writeLock().unlock();<a name="line.547"></a>
-<span class="sourceLineNo">548</span>    }<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.549"></a>
-<span class="sourceLineNo">550</span>    return true;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>  /*<a name="line.553"></a>
-<span class="sourceLineNo">554</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.554"></a>
-<span class="sourceLineNo">555</span>   */<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  private static class StatisticsThread extends Thread {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    private final BucketCache bucketCache;<a name="line.557"></a>
-<span class="sourceLineNo">558</span><a name="line.558"></a>
-<span class="sourceLineNo">559</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      super("BucketCacheStatsThread");<a name="line.560"></a>
-<span class="sourceLineNo">561</span>      setDaemon(true);<a name="line.561"></a>
-<span class="sourceLineNo">562</span>      this.bucketCache = bucketCache;<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    }<a name="line.563"></a>
-<span class="sourceLineNo">564</span><a name="line.564"></a>
-<span class="sourceLineNo">565</span>    @Override<a name="line.565"></a>
-<span class="sourceLineNo">566</span>    public void run() {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>      bucketCache.logStats();<a name="line.567"></a>
-<span class="sourceLineNo">568</span>    }<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  }<a name="line.569"></a>
-<span class="sourceLineNo">570</span><a name="line.570"></a>
-<span class="sourceLineNo">571</span>  public void logStats() {<a name="line.571"></a>
-<span class="sourceLineNo">572</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.572"></a>
-<span class="sourceLineNo">573</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.573"></a>
-<span class="sourceLineNo">574</span>    long freeSize = totalSize - usedSize;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    long cacheSize = getRealCacheSize();<a name="line.575"></a>
-<span class="sourceLineNo">576</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.576"></a>
-<span class="sourceLineNo">577</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.579"></a>
-<span class="sourceLineNo">580</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.580"></a>
-<span class="sourceLineNo">581</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.583"></a>
-<span class="sourceLineNo">584</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.584"></a>
-<span class="sourceLineNo">585</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.586"></a>
-<span class="sourceLineNo">587</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.588"></a>
-<span class="sourceLineNo">589</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.589"></a>
-<span class="sourceLineNo">590</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.593"></a>
-<span class="sourceLineNo">594</span>    cacheStats.reset();<a name="line.594"></a>
-<span class="sourceLineNo">595</span>  }<a name="line.595"></a>
-<span class="sourceLineNo">596</span><a name="line.596"></a>
-<span class="sourceLineNo">597</span>  public long getRealCacheSize() {<a name="line.597"></a>
-<span class="sourceLineNo">598</span>    return this.realCacheSize.get();<a name="line.598"></a>
-<span class="sourceLineNo">599</span>  }<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  private long acceptableSize() {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.602"></a>
-<span class="sourceLineNo">603</span>  }<a name="line.603"></a>
-<span class="sourceLineNo">604</span><a name="line.604"></a>
-<span class="sourceLineNo">605</span>  private long singleSize() {<a name="line.605"></a>
-<span class="sourceLineNo">606</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.606"></a>
-<span class="sourceLineNo">607</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.607"></a>
-<span class="sourceLineNo">608</span>  }<a name="line.608"></a>
-<span class="sourceLineNo">609</span><a name="line.609"></a>
-<span class="sourceLineNo">610</span>  private long multiSize() {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.611"></a>
-<span class="sourceLineNo">612</span>        * DEFAULT_MIN_FACTOR);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  private long memorySize() {<a name="line.615"></a>
-<span class="sourceLineNo">616</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        * DEFAULT_MIN_FACTOR);<a name="line.617"></a>
-<span class="sourceLineNo">618</span>  }<a name="line.618"></a>
-<span class="sourceLineNo">619</span><a name="line.619"></a>
-<span class="sourceLineNo">620</span>  /**<a name="line.620"></a>
-<span class="sourceLineNo">621</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.621"></a>
-<span class="sourceLineNo">622</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.622"></a>
-<span class="sourceLineNo">623</span>   * ensure there must be some blocks evicted<a name="line.623"></a>
-<span class="sourceLineNo">624</span>   * @param why Why we are being called<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   */<a name="line.625"></a>
-<span class="sourceLineNo">626</span>  private void freeSpace(final String why) {<a name="line.626"></a>
-<span class="sourceLineNo">627</span>    // Ensure only one freeSpace progress at a time<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    try {<a name="line.629"></a>
-<span class="sourceLineNo">630</span>      freeInProgress = true;<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      long bytesToFreeWithoutExtra = 0;<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      // Calculate free byte for each bucketSizeinfo<a name="line.632"></a>
-<span class="sourceLineNo">633</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.633"></a>
-<span class="sourceLineNo">634</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.634"></a>
-<span class="sourceLineNo">635</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.635"></a>
-<span class="sourceLineNo">636</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>        bytesToFreeForBucket[i] = 0;<a name="line.637"></a>
-<span class="sourceLineNo">638</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.638"></a>
-<span class="sourceLineNo">639</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.641"></a>
-<span class="sourceLineNo">642</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.642"></a>
-<span class="sourceLineNo">643</span>          if (msgBuffer != null) {<a name="line.643"></a>
-<span class="sourceLineNo">644</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.644"></a>
-<span class="sourceLineNo">645</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.645"></a>
-<span class="sourceLineNo">646</span>          }<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        }<a name="line.647"></a>
-<span class="sourceLineNo">648</span>      }<a name="line.648"></a>
-<span class="sourceLineNo">649</span>      if (msgBuffer != null) {<a name="line.649"></a>
-<span class="sourceLineNo">650</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.650"></a>
+<span class="sourceLineNo">448</span>    if (!repeat &amp;&amp; updateCacheMetrics) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      cacheStats.miss(caching, key.isPrimary());<a name="line.449"></a>
+<span class="sourceLineNo">450</span>    }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>    return null;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>  }<a name="line.452"></a>
+<span class="sourceLineNo">453</span><a name="line.453"></a>
+<span class="sourceLineNo">454</span>  @VisibleForTesting<a name="line.454"></a>
+<span class="sourceLineNo">455</span>  void blockEvicted(BlockCacheKey cacheKey, BucketEntry bucketEntry, boolean decrementBlockNumber) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>    bucketAllocator.freeBlock(bucketEntry.offset());<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    realCacheSize.addAndGet(-1 * bucketEntry.getLength());<a name="line.457"></a>
+<span class="sourceLineNo">458</span>    blocksByHFile.remove(cacheKey.getHfileName(), cacheKey);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>    if (decrementBlockNumber) {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      this.blockNumber.decrementAndGet();<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span>  }<a name="line.462"></a>
+<span class="sourceLineNo">463</span><a name="line.463"></a>
+<span class="sourceLineNo">464</span>  @Override<a name="line.464"></a>
+<span class="sourceLineNo">465</span>  public boolean evictBlock(BlockCacheKey cacheKey) {<a name="line.465"></a>
+<span class="sourceLineNo">466</span>    return evictBlock(cacheKey, true);<a name="line.466"></a>
+<span class="sourceLineNo">467</span>  }<a name="line.467"></a>
+<span class="sourceLineNo">468</span><a name="line.468"></a>
+<span class="sourceLineNo">469</span>  // does not check for the ref count. Just tries to evict it if found in the<a name="line.469"></a>
+<span class="sourceLineNo">470</span>  // bucket map<a name="line.470"></a>
+<span class="sourceLineNo">471</span>  private boolean forceEvict(BlockCacheKey cacheKey) {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    if (!cacheEnabled) {<a name="line.472"></a>
+<span class="sourceLineNo">473</span>      return false;<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    }<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    if (bucketEntry == null) {<a name="line.477"></a>
+<span class="sourceLineNo">478</span>      if (removedBlock != null) {<a name="line.478"></a>
+<span class="sourceLineNo">479</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.479"></a>
+<span class="sourceLineNo">480</span>        return true;<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      } else {<a name="line.481"></a>
+<span class="sourceLineNo">482</span>        return false;<a name="line.482"></a>
+<span class="sourceLineNo">483</span>      }<a name="line.483"></a>
+<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
+<span class="sourceLineNo">485</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.485"></a>
+<span class="sourceLineNo">486</span>    try {<a name="line.486"></a>
+<span class="sourceLineNo">487</span>      lock.writeLock().lock();<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.488"></a>
+<span class="sourceLineNo">489</span>        blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      } else {<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        return false;<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      }<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    } finally {<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      lock.writeLock().unlock();<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    }<a name="line.495"></a>
+<span class="sourceLineNo">496</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    return true;<a name="line.497"></a>
+<span class="sourceLineNo">498</span>  }<a name="line.498"></a>
+<span class="sourceLineNo">499</span><a name="line.499"></a>
+<span class="sourceLineNo">500</span>  private RAMQueueEntry checkRamCache(BlockCacheKey cacheKey) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>    RAMQueueEntry removedBlock = ramCache.remove(cacheKey);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    if (removedBlock != null) {<a name="line.502"></a>
+<span class="sourceLineNo">503</span>      this.blockNumber.decrementAndGet();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>      this.heapSize.addAndGet(-1 * removedBlock.getData().heapSize());<a name="line.504"></a>
+<span class="sourceLineNo">505</span>    }<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    return removedBlock;<a name="line.506"></a>
+<span class="sourceLineNo">507</span>  }<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  public boolean evictBlock(BlockCacheKey cacheKey, boolean deletedBlock) {<a name="line.509"></a>
+<span class="sourceLineNo">510</span>    if (!cacheEnabled) {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>      return false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>    }<a name="line.512"></a>
+<span class="sourceLineNo">513</span>    RAMQueueEntry removedBlock = checkRamCache(cacheKey);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>    BucketEntry bucketEntry = backingMap.get(cacheKey);<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    if (bucketEntry == null) {<a name="line.515"></a>
+<span class="sourceLineNo">516</span>      if (removedBlock != null) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>        cacheStats.evicted(0, cacheKey.isPrimary());<a name="line.517"></a>
+<span class="sourceLineNo">518</span>        return true;<a name="line.518"></a>
+<span class="sourceLineNo">519</span>      } else {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        return false;<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }<a name="line.521"></a>
+<span class="sourceLineNo">522</span>    }<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    ReentrantReadWriteLock lock = offsetLock.getLock(bucketEntry.offset());<a name="line.523"></a>
+<span class="sourceLineNo">524</span>    try {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>      lock.writeLock().lock();<a name="line.525"></a>
+<span class="sourceLineNo">526</span>      int refCount = bucketEntry.refCount.get();<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      if(refCount == 0) {<a name="line.527"></a>
+<span class="sourceLineNo">528</span>        if (backingMap.remove(cacheKey, bucketEntry)) {<a name="line.528"></a>
+<span class="sourceLineNo">529</span>          blockEvicted(cacheKey, bucketEntry, removedBlock == null);<a name="line.529"></a>
+<span class="sourceLineNo">530</span>        } else {<a name="line.530"></a>
+<span class="sourceLineNo">531</span>          return false;<a name="line.531"></a>
+<span class="sourceLineNo">532</span>        }<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      } else {<a name="line.533"></a>
+<span class="sourceLineNo">534</span>        if(!deletedBlock) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>          if (LOG.isDebugEnabled()) {<a name="line.535"></a>
+<span class="sourceLineNo">536</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.536"></a>
+<span class="sourceLineNo">537</span>                + " readers. Can not be freed now");<a name="line.537"></a>
+<span class="sourceLineNo">538</span>          }<a name="line.538"></a>
+<span class="sourceLineNo">539</span>          return false;<a name="line.539"></a>
+<span class="sourceLineNo">540</span>        } else {<a name="line.540"></a>
+<span class="sourceLineNo">541</span>          if (LOG.isDebugEnabled()) {<a name="line.541"></a>
+<span class="sourceLineNo">542</span>            LOG.debug("This block " + cacheKey + " is still referred by " + refCount<a name="line.542"></a>
+<span class="sourceLineNo">543</span>                + " readers. Can not be freed now. Hence will mark this"<a name="line.543"></a>
+<span class="sourceLineNo">544</span>                + " for evicting at a later point");<a name="line.544"></a>
+<span class="sourceLineNo">545</span>          }<a name="line.545"></a>
+<span class="sourceLineNo">546</span>          bucketEntry.markedForEvict = true;<a name="line.546"></a>
+<span class="sourceLineNo">547</span>        }<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      }<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    } finally {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>      lock.writeLock().unlock();<a name="line.550"></a>
+<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    cacheStats.evicted(bucketEntry.getCachedTime(), cacheKey.isPrimary());<a name="line.552"></a>
+<span class="sourceLineNo">553</span>    return true;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>  /*<a name="line.556"></a>
+<span class="sourceLineNo">557</span>   * Statistics thread.  Periodically output cache statistics to the log.<a name="line.557"></a>
+<span class="sourceLineNo">558</span>   */<a name="line.558"></a>
+<span class="sourceLineNo">559</span>  private static class StatisticsThread extends Thread {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>    private final BucketCache bucketCache;<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>    public StatisticsThread(BucketCache bucketCache) {<a name="line.562"></a>
+<span class="sourceLineNo">563</span>      super("BucketCacheStatsThread");<a name="line.563"></a>
+<span class="sourceLineNo">564</span>      setDaemon(true);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>      this.bucketCache = bucketCache;<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    }<a name="line.566"></a>
+<span class="sourceLineNo">567</span><a name="line.567"></a>
+<span class="sourceLineNo">568</span>    @Override<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    public void run() {<a name="line.569"></a>
+<span class="sourceLineNo">570</span>      bucketCache.logStats();<a name="line.570"></a>
+<span class="sourceLineNo">571</span>    }<a name="line.571"></a>
+<span class="sourceLineNo">572</span>  }<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>  public void logStats() {<a name="line.574"></a>
+<span class="sourceLineNo">575</span>    long totalSize = bucketAllocator.getTotalSize();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>    long usedSize = bucketAllocator.getUsedSize();<a name="line.576"></a>
+<span class="sourceLineNo">577</span>    long freeSize = totalSize - usedSize;<a name="line.577"></a>
+<span class="sourceLineNo">578</span>    long cacheSize = getRealCacheSize();<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    LOG.info("failedBlockAdditions=" + cacheStats.getFailedInserts() + ", " +<a name="line.579"></a>
+<span class="sourceLineNo">580</span>        "totalSize=" + StringUtils.byteDesc(totalSize) + ", " +<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        "freeSize=" + StringUtils.byteDesc(freeSize) + ", " +<a name="line.581"></a>
+<span class="sourceLineNo">582</span>        "usedSize=" + StringUtils.byteDesc(usedSize) +", " +<a name="line.582"></a>
+<span class="sourceLineNo">583</span>        "cacheSize=" + StringUtils.byteDesc(cacheSize) +", " +<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        "accesses=" + cacheStats.getRequestCount() + ", " +<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        "hits=" + cacheStats.getHitCount() + ", " +<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        "IOhitsPerSecond=" + cacheStats.getIOHitsPerSecond() + ", " +<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        "IOTimePerHit=" + String.format("%.2f", cacheStats.getIOTimePerHit())+ ", " +<a name="line.587"></a>
+<span class="sourceLineNo">588</span>        "hitRatio=" + (cacheStats.getHitCount() == 0 ? "0," :<a name="line.588"></a>
+<span class="sourceLineNo">589</span>          (StringUtils.formatPercent(cacheStats.getHitRatio(), 2)+ ", ")) +<a name="line.589"></a>
+<span class="sourceLineNo">590</span>        "cachingAccesses=" + cacheStats.getRequestCachingCount() + ", " +<a name="line.590"></a>
+<span class="sourceLineNo">591</span>        "cachingHits=" + cacheStats.getHitCachingCount() + ", " +<a name="line.591"></a>
+<span class="sourceLineNo">592</span>        "cachingHitsRatio=" +(cacheStats.getHitCachingCount() == 0 ? "0," :<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          (StringUtils.formatPercent(cacheStats.getHitCachingRatio(), 2)+ ", ")) +<a name="line.593"></a>
+<span class="sourceLineNo">594</span>        "evictions=" + cacheStats.getEvictionCount() + ", " +<a name="line.594"></a>
+<span class="sourceLineNo">595</span>        "evicted=" + cacheStats.getEvictedCount() + ", " +<a name="line.595"></a>
+<span class="sourceLineNo">596</span>        "evictedPerRun=" + cacheStats.evictedPerEviction());<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    cacheStats.reset();<a name="line.597"></a>
+<span class="sourceLineNo">598</span>  }<a name="line.598"></a>
+<span class="sourceLineNo">599</span><a name="line.599"></a>
+<span class="sourceLineNo">600</span>  public long getRealCacheSize() {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>    return this.realCacheSize.get();<a name="line.601"></a>
+<span class="sourceLineNo">602</span>  }<a name="line.602"></a>
+<span class="sourceLineNo">603</span><a name="line.603"></a>
+<span class="sourceLineNo">604</span>  private long acceptableSize() {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_ACCEPT_FACTOR);<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  }<a name="line.606"></a>
+<span class="sourceLineNo">607</span><a name="line.607"></a>
+<span class="sourceLineNo">608</span>  private long singleSize() {<a name="line.608"></a>
+<span class="sourceLineNo">609</span>    return (long) Math.floor(bucketAllocator.getTotalSize()<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        * DEFAULT_SINGLE_FACTOR * DEFAULT_MIN_FACTOR);<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  }<a name="line.611"></a>
+<span class="sourceLineNo">612</span><a name="line.612"></a>
+<span class="sourceLineNo">613</span>  private long multiSize() {<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MULTI_FACTOR<a name="line.614"></a>
+<span class="sourceLineNo">615</span>        * DEFAULT_MIN_FACTOR);<a name="line.615"></a>
+<span class="sourceLineNo">616</span>  }<a name="line.616"></a>
+<span class="sourceLineNo">617</span><a name="line.617"></a>
+<span class="sourceLineNo">618</span>  private long memorySize() {<a name="line.618"></a>
+<span class="sourceLineNo">619</span>    return (long) Math.floor(bucketAllocator.getTotalSize() * DEFAULT_MEMORY_FACTOR<a name="line.619"></a>
+<span class="sourceLineNo">620</span>        * DEFAULT_MIN_FACTOR);<a name="line.620"></a>
+<span class="sourceLineNo">621</span>  }<a name="line.621"></a>
+<span class="sourceLineNo">622</span><a name="line.622"></a>
+<span class="sourceLineNo">623</span>  /**<a name="line.623"></a>
+<span class="sourceLineNo">624</span>   * Free the space if the used size reaches acceptableSize() or one size block<a name="line.624"></a>
+<span class="sourceLineNo">625</span>   * couldn't be allocated. When freeing the space, we use the LRU algorithm and<a name="line.625"></a>
+<span class="sourceLineNo">626</span>   * ensure there must be some blocks evicted<a name="line.626"></a>
+<span class="sourceLineNo">627</span>   * @param why Why we are being called<a name="line.627"></a>
+<span class="sourceLineNo">628</span>   */<a name="line.628"></a>
+<span class="sourceLineNo">629</span>  private void freeSpace(final String why) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>    // Ensure only one freeSpace progress at a time<a name="line.630"></a>
+<span class="sourceLineNo">631</span>    if (!freeSpaceLock.tryLock()) return;<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    try {<a name="line.632"></a>
+<span class="sourceLineNo">633</span>      freeInProgress = true;<a name="line.633"></a>
+<span class="sourceLineNo">634</span>      long bytesToFreeWithoutExtra = 0;<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      // Calculate free byte for each bucketSizeinfo<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      StringBuffer msgBuffer = LOG.isDebugEnabled()? new StringBuffer(): null;<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      BucketAllocator.IndexStatistics[] stats = bucketAllocator.getIndexStatistics();<a name="line.637"></a>
+<span class="sourceLineNo">638</span>      long[] bytesToFreeForBucket = new long[stats.length];<a name="line.638"></a>
+<span class="sourceLineNo">639</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        bytesToFreeForBucket[i] = 0;<a name="line.640"></a>
+<span class="sourceLineNo">641</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.641"></a>
+<span class="sourceLineNo">642</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>          bytesToFreeForBucket[i] = stats[i].itemSize() * (freeGoal - stats[i].freeCount());<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          bytesToFreeWithoutExtra += bytesToFreeForBucket[i];<a name="line.645"></a>
+<span class="sourceLineNo">646</span>          if (msgBuffer != null) {<a name="line.646"></a>
+<span class="sourceLineNo">647</span>            msgBuffer.append("Free for bucketSize(" + stats[i].itemSize() + ")="<a name="line.647"></a>
+<span class="sourceLineNo">648</span>              + StringUtils.byteDesc(bytesToFreeForBucket[i]) + ", ");<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          }<a name="line.649"></a>
+<span class="sourceLineNo">650</span>        }<a name="line.650"></a>
 <span class="sourceLineNo">651</span>      }<a name="line.651"></a>
-<span class="sourceLineNo">652</span><a name="line.652"></a>
-<span class="sourceLineNo">653</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        return;<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      }<a name="line.655"></a>
-<span class="sourceLineNo">656</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.659"></a>
-<span class="sourceLineNo">660</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.660"></a>
-<span class="sourceLineNo">661</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.661"></a>
-<span class="sourceLineNo">662</span>      }<a name="line.662"></a>
-<span class="sourceLineNo">663</span><a name="line.663"></a>
-<span class="sourceLineNo">664</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.664"></a>
-<span class="sourceLineNo">665</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.665"></a>
+<span class="sourceLineNo">652</span>      if (msgBuffer != null) {<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        msgBuffer.append("Free for total=" + StringUtils.byteDesc(bytesToFreeWithoutExtra) + ", ");<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span><a name="line.655"></a>
+<span class="sourceLineNo">656</span>      if (bytesToFreeWithoutExtra &lt;= 0) {<a name="line.656"></a>
+<span class="sourceLineNo">657</span>        return;<a name="line.657"></a>
+<span class="sourceLineNo">658</span>      }<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      long currentSize = bucketAllocator.getUsedSize();<a name="line.659"></a>
+<span class="sourceLineNo">660</span>      long totalSize=bucketAllocator.getTotalSize();<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      if (LOG.isDebugEnabled() &amp;&amp; msgBuffer != null) {<a name="line.661"></a>
+<span class="sourceLineNo">662</span>        LOG.debug("Free started because \"" + why + "\"; " + msgBuffer.toString() +<a name="line.662"></a>
+<span class="sourceLineNo">663</span>          " of current used=" + StringUtils.byteDesc(currentSize) + ", actual cacheSize=" +<a name="line.663"></a>
+<span class="sourceLineNo">664</span>          StringUtils.byteDesc(realCacheSize.get()) + ", total=" + StringUtils.byteDesc(totalSize));<a name="line.664"></a>
+<span class="sourceLineNo">665</span>      }<a name="line.665"></a>
 <span class="sourceLineNo">666</span><a name="line.666"></a>
-<span class="sourceLineNo">667</span>      // Instantiate priority buckets<a name="line.667"></a>
-<span class="sourceLineNo">668</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.668"></a>
-<span class="sourceLineNo">669</span>          blockSize, singleSize());<a name="line.669"></a>
-<span class="sourceLineNo">670</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.670"></a>
-<span class="sourceLineNo">671</span>          blockSize, multiSize());<a name="line.671"></a>
-<span class="sourceLineNo">672</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.672"></a>
-<span class="sourceLineNo">673</span>          blockSize, memorySize());<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.675"></a>
-<span class="sourceLineNo">676</span>      // group<a name="line.676"></a>
-<span class="sourceLineNo">677</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.678"></a>
-<span class="sourceLineNo">679</span>          case SINGLE: {<a name="line.679"></a>
-<span class="sourceLineNo">680</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.680"></a>
-<span class="sourceLineNo">681</span>            break;<a name="line.681"></a>
-<span class="sourceLineNo">682</span>          }<a name="line.682"></a>
-<span class="sourceLineNo">683</span>          case MULTI: {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.684"></a>
-<span class="sourceLineNo">685</span>            break;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>          }<a name="line.686"></a>
-<span class="sourceLineNo">687</span>          case MEMORY: {<a name="line.687"></a>
-<span class="sourceLineNo">688</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.688"></a>
-<span class="sourceLineNo">689</span>            break;<a name="line.689"></a>
-<span class="sourceLineNo">690</span>          }<a name="line.690"></a>
-<span class="sourceLineNo">691</span>        }<a name="line.691"></a>
-<span class="sourceLineNo">692</span>      }<a name="line.692"></a>
-<span class="sourceLineNo">693</span><a name="line.693"></a>
-<span class="sourceLineNo">694</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.694"></a>
-<span class="sourceLineNo">695</span><a name="line.695"></a>
-<span class="sourceLineNo">696</span>      bucketQueue.add(bucketSingle);<a name="line.696"></a>
-<span class="sourceLineNo">697</span>      bucketQueue.add(bucketMulti);<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      bucketQueue.add(bucketMemory);<a name="line.698"></a>
-<span class="sourceLineNo">699</span><a name="line.699"></a>
-<span class="sourceLineNo">700</span>      int remainingBuckets = 3;<a name="line.700"></a>
-<span class="sourceLineNo">701</span>      long bytesFreed = 0;<a name="line.701"></a>
+<span class="sourceLineNo">667</span>      long bytesToFreeWithExtra = (long) Math.floor(bytesToFreeWithoutExtra<a name="line.667"></a>
+<span class="sourceLineNo">668</span>          * (1 + DEFAULT_EXTRA_FREE_FACTOR));<a name="line.668"></a>
+<span class="sourceLineNo">669</span><a name="line.669"></a>
+<span class="sourceLineNo">670</span>      // Instantiate priority buckets<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      BucketEntryGroup bucketSingle = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.671"></a>
+<span class="sourceLineNo">672</span>          blockSize, singleSize());<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      BucketEntryGroup bucketMulti = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.673"></a>
+<span class="sourceLineNo">674</span>          blockSize, multiSize());<a name="line.674"></a>
+<span class="sourceLineNo">675</span>      BucketEntryGroup bucketMemory = new BucketEntryGroup(bytesToFreeWithExtra,<a name="line.675"></a>
+<span class="sourceLineNo">676</span>          blockSize, memorySize());<a name="line.676"></a>
+<span class="sourceLineNo">677</span><a name="line.677"></a>
+<span class="sourceLineNo">678</span>      // Scan entire map putting bucket entry into appropriate bucket entry<a name="line.678"></a>
+<span class="sourceLineNo">679</span>      // group<a name="line.679"></a>
+<span class="sourceLineNo">680</span>      for (Map.Entry&lt;BlockCacheKey, BucketEntry&gt; bucketEntryWithKey : backingMap.entrySet()) {<a name="line.680"></a>
+<span class="sourceLineNo">681</span>        switch (bucketEntryWithKey.getValue().getPriority()) {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>          case SINGLE: {<a name="line.682"></a>
+<span class="sourceLineNo">683</span>            bucketSingle.add(bucketEntryWithKey);<a name="line.683"></a>
+<span class="sourceLineNo">684</span>            break;<a name="line.684"></a>
+<span class="sourceLineNo">685</span>          }<a name="line.685"></a>
+<span class="sourceLineNo">686</span>          case MULTI: {<a name="line.686"></a>
+<span class="sourceLineNo">687</span>            bucketMulti.add(bucketEntryWithKey);<a name="line.687"></a>
+<span class="sourceLineNo">688</span>            break;<a name="line.688"></a>
+<span class="sourceLineNo">689</span>          }<a name="line.689"></a>
+<span class="sourceLineNo">690</span>          case MEMORY: {<a name="line.690"></a>
+<span class="sourceLineNo">691</span>            bucketMemory.add(bucketEntryWithKey);<a name="line.691"></a>
+<span class="sourceLineNo">692</span>            break;<a name="line.692"></a>
+<span class="sourceLineNo">693</span>          }<a name="line.693"></a>
+<span class="sourceLineNo">694</span>        }<a name="line.694"></a>
+<span class="sourceLineNo">695</span>      }<a name="line.695"></a>
+<span class="sourceLineNo">696</span><a name="line.696"></a>
+<span class="sourceLineNo">697</span>      PriorityQueue&lt;BucketEntryGroup&gt; bucketQueue = new PriorityQueue&lt;BucketEntryGroup&gt;(3);<a name="line.697"></a>
+<span class="sourceLineNo">698</span><a name="line.698"></a>
+<span class="sourceLineNo">699</span>      bucketQueue.add(bucketSingle);<a name="line.699"></a>
+<span class="sourceLineNo">700</span>      bucketQueue.add(bucketMulti);<a name="line.700"></a>
+<span class="sourceLineNo">701</span>      bucketQueue.add(bucketMemory);<a name="line.701"></a>
 <span class="sourceLineNo">702</span><a name="line.702"></a>
-<span class="sourceLineNo">703</span>      BucketEntryGroup bucketGroup;<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        long overflow = bucketGroup.overflow();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        if (overflow &gt; 0) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.707"></a>
-<span class="sourceLineNo">708</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.709"></a>
-<span class="sourceLineNo">710</span>        }<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        remainingBuckets--;<a name="line.711"></a>
-<span class="sourceLineNo">712</span>      }<a name="line.712"></a>
-<span class="sourceLineNo">713</span><a name="line.713"></a>
-<span class="sourceLineNo">714</span>      /**<a name="line.714"></a>
-<span class="sourceLineNo">715</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.715"></a>
-<span class="sourceLineNo">716</span>       * free space<a name="line.716"></a>
-<span class="sourceLineNo">717</span>       */<a name="line.717"></a>
-<span class="sourceLineNo">718</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.718"></a>
-<span class="sourceLineNo">719</span>      boolean needFreeForExtra = false;<a name="line.719"></a>
-<span class="sourceLineNo">720</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.720"></a>
-<span class="sourceLineNo">721</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.721"></a>
-<span class="sourceLineNo">722</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.722"></a>
-<span class="sourceLineNo">723</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.723"></a>
-<span class="sourceLineNo">724</span>          needFreeForExtra = true;<a name="line.724"></a>
-<span class="sourceLineNo">725</span>          break;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>        }<a name="line.726"></a>
-<span class="sourceLineNo">727</span>      }<a name="line.727"></a>
-<span class="sourceLineNo">728</span><a name="line.728"></a>
-<span class="sourceLineNo">729</span>      if (needFreeForExtra) {<a name="line.729"></a>
-<span class="sourceLineNo">730</span>        bucketQueue.clear();<a name="line.730"></a>
-<span class="sourceLineNo">731</span>        remainingBuckets = 2;<a name="line.731"></a>
-<span class="sourceLineNo">732</span><a name="line.732"></a>
-<span class="sourceLineNo">733</span>        bucketQueue.add(bucketSingle);<a name="line.733"></a>
-<span class="sourceLineNo">734</span>        bucketQueue.add(bucketMulti);<a name="line.734"></a>
+<span class="sourceLineNo">703</span>      int remainingBuckets = 3;<a name="line.703"></a>
+<span class="sourceLineNo">704</span>      long bytesFreed = 0;<a name="line.704"></a>
+<span class="sourceLineNo">705</span><a name="line.705"></a>
+<span class="sourceLineNo">706</span>      BucketEntryGroup bucketGroup;<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.707"></a>
+<span class="sourceLineNo">708</span>        long overflow = bucketGroup.overflow();<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        if (overflow &gt; 0) {<a name="line.709"></a>
+<span class="sourceLineNo">710</span>          long bucketBytesToFree = Math.min(overflow,<a name="line.710"></a>
+<span class="sourceLineNo">711</span>              (bytesToFreeWithoutExtra - bytesFreed) / remainingBuckets);<a name="line.711"></a>
+<span class="sourceLineNo">712</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.712"></a>
+<span class="sourceLineNo">713</span>        }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>        remainingBuckets--;<a name="line.714"></a>
+<span class="sourceLineNo">715</span>      }<a name="line.715"></a>
+<span class="sourceLineNo">716</span><a name="line.716"></a>
+<span class="sourceLineNo">717</span>      /**<a name="line.717"></a>
+<span class="sourceLineNo">718</span>       * Check whether need extra free because some bucketSizeinfo still needs<a name="line.718"></a>
+<span class="sourceLineNo">719</span>       * free space<a name="line.719"></a>
+<span class="sourceLineNo">720</span>       */<a name="line.720"></a>
+<span class="sourceLineNo">721</span>      stats = bucketAllocator.getIndexStatistics();<a name="line.721"></a>
+<span class="sourceLineNo">722</span>      boolean needFreeForExtra = false;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>      for (int i = 0; i &lt; stats.length; i++) {<a name="line.723"></a>
+<span class="sourceLineNo">724</span>        long freeGoal = (long) Math.floor(stats[i].totalCount() * (1 - DEFAULT_MIN_FACTOR));<a name="line.724"></a>
+<span class="sourceLineNo">725</span>        freeGoal = Math.max(freeGoal, 1);<a name="line.725"></a>
+<span class="sourceLineNo">726</span>        if (stats[i].freeCount() &lt; freeGoal) {<a name="line.726"></a>
+<span class="sourceLineNo">727</span>          needFreeForExtra = true;<a name="line.727"></a>
+<span class="sourceLineNo">728</span>          break;<a name="line.728"></a>
+<span class="sourceLineNo">729</span>        }<a name="line.729"></a>
+<span class="sourceLineNo">730</span>      }<a name="line.730"></a>
+<span class="sourceLineNo">731</span><a name="line.731"></a>
+<span class="sourceLineNo">732</span>      if (needFreeForExtra) {<a name="line.732"></a>
+<span class="sourceLineNo">733</span>        bucketQueue.clear();<a name="line.733"></a>
+<span class="sourceLineNo">734</span>        remainingBuckets = 2;<a name="line.734"></a>
 <span class="sourceLineNo">735</span><a name="line.735"></a>
-<span class="sourceLineNo">736</span>        while ((bucketGroup = bucketQueue.poll()) != null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          long bucketBytesToFree = (bytesToFreeWithExtra - bytesFreed) / remainingBuckets;<a name="line.737"></a>
-<span class="sourceLineNo">738</span>          bytesFreed += bucketGroup.free(bucketBytesToFree);<a name="line.738"></a>
-<span class="sourceLineNo">739</span>          remainingBuckets--;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>        }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      }<a name="line.741"></a>
-<span class="sourceLineNo">742</span><a name="line.742"></a>
-<span class="sourceLineNo">743</span>      if (LOG.isDebugEnabled()) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>        long single = bucketSingle.totalSize();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        long multi = bucketMulti.totalSize();<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        long memory = bucketMemory.totalSize();<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isDebugEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.debug("Bucket cache free space completed; " + "freed="<a name="line.748"></a>
-<span class="sourceLineNo">749</span>            + StringUtils.byteDesc(bytesFreed) + ", " + "total="<a name="line.749"></a>
-<span class="sourceLineNo">750</span>            + StringUtils.byteDesc(totalSize) + ", " + "single="<a name="line.750"></a>
-<span class="sourceLineNo">751</span>            + StringUtils.byteDesc(single) + ", " + "multi="<a name="line.751"></a>
-<span class="sourceLineNo">752</span>            + StringUtils.byteDesc(multi) + ", " + "memory="<a name="line.752"></a>
-<span class="sourceLineNo">753</span>            + StringUtils.byteDesc(memory));<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        }<a name="line.754"></a>
-<span class="sourceLineNo">755</span>      }<a name="line.755"></a>
-<span class="sourceLineNo">756</span><a name="line.756"></a>
-<span class="sourceLineNo">757</span>    } catch (Throwable t) {<a name="line.757"></a>
-<span class="sourceLineNo">758</span>      LOG.warn("Failed freeing space", t);<a name="line.758"></a>
-<span class="sourceLineNo">759</span>    } finally {<a name="line.759"></a>
-<span class="sourceLineNo">760</span>      cacheStats.evict();<a name="line.760"></a>
-<span class="sourceLineNo">761</span>      freeInProgress = false;<a name="line.761"></a>
-<span class="sourceLineNo">762</span>      freeSpaceLock.unlock();<a name="line.762"></a>
-<span class="sourceLineNo">763</span>    }<a name="line.763"></a>
-<span class="sourceLineNo">764</span>  }<a name="line.764"></a>
-<span class="sourceLineNo">765</span><a name="line.765"></a>
-<span class="sourceLineNo">766</span>  // This handles flushing the RAM cache to IOEngine.<a name="line.766"></a>
-<span class="sourceLineNo">767</span>  @VisibleForTesting<a name="line.767"></a>
-<span class="sourceLineNo">768</span>  class WriterThread extends HasThread {<a name="line.768"></a>
-<span class="sourceLineNo">769</span>    private final BlockingQueue&lt;RAMQueueEntry&gt; inputQueue;<a name="line.769"></a>
-<span class="sourceLineNo">770</span>    private volatile boolean writerEnabled = true;<a name="line.770"></a>
-<span class="sourceLineNo">771</span><a name="line.771"></a>
-<span class="sourceLineNo">772</span>    WriterThread(BlockingQueue&lt;RAMQueueEntry&gt; queue) {<a name="line.772"></a>
-<span class="sourceLineNo">773</span>      this.inputQueue = queue;<a name="line.773"></a>
-<span class="sourceLineNo">774</span>    }<a name="line.774"></a>
-<span class="sourceLineNo">775</span><a name="line.775"></a>
-<span class="sourceLineNo">776</span>    // Used for test<a name="line.776"></a>
-<span class="sourceLineNo">777</span>    @VisibleForTesting<a name="line.777"></a>
-<span class="sourceLineNo">778</span>    void disableWriter() {<a name="line.778"></a>
-<span class="sourceLineNo">779</span>      this.writerEnabled = false;<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
-<span class="sourceLineNo">781</span><a name="line.781"></a>
-<span class="sourceLineNo">782</span>    public void run() {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>      List&lt;RAMQueueEntry&gt; entries = new ArrayList&lt;RAMQueueEntry&gt;();<a name="line.783"></a>
-<span class="sourceLineNo">784</span>      try {<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        while (cacheEnabled &amp;&amp; writerEnabled) {<a name="line.785"></a>
-<span class="sourceLineNo">786</span>          try {<a name="line.786"></a>
-<span class="sourceLineNo">787</span>            try {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>              // Blocks<a name="line.788"></a>
-<span class="sourceLineNo">789</span>              entries = getRAMQueueEntries(inputQueue, entries);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>            } catch (InterruptedException ie) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>              if (!cacheEnabled) break;<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            }<a name="line.792"></a>
-<span class="sourceLineNo">793</span>            doDrain(entries);<a name="line.793"></a>
-<span class="sourceLineNo">794</span>          } catch (Exception ioe) {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>            LOG.error("WriterThread encountered error", ioe);<a name="line.795"></a>
-<span class="sourceLineNo">796</span>          }<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a 

<TRUNCATED>

[06/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
index 6cff868..2a832cb 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/util/ByteBufferArray.html
@@ -26,258 +26,262 @@
 <span class="sourceLineNo">018</span> */<a name="line.18"></a>
 <span class="sourceLineNo">019</span>package org.apache.hadoop.hbase.util;<a name="line.19"></a>
 <span class="sourceLineNo">020</span><a name="line.20"></a>
-<span class="sourceLineNo">021</span>import java.nio.ByteBuffer;<a name="line.21"></a>
-<span class="sourceLineNo">022</span>import java.util.concurrent.locks.Lock;<a name="line.22"></a>
-<span class="sourceLineNo">023</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.23"></a>
-<span class="sourceLineNo">024</span><a name="line.24"></a>
-<span class="sourceLineNo">025</span>import org.apache.commons.logging.Log;<a name="line.25"></a>
-<span class="sourceLineNo">026</span>import org.apache.commons.logging.LogFactory;<a name="line.26"></a>
-<span class="sourceLineNo">027</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.27"></a>
-<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.28"></a>
-<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.nio.MultiByteBuff;<a name="line.29"></a>
-<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.30"></a>
-<span class="sourceLineNo">031</span>import org.apache.hadoop.util.StringUtils;<a name="line.31"></a>
-<span class="sourceLineNo">032</span><a name="line.32"></a>
-<span class="sourceLineNo">033</span>/**<a name="line.33"></a>
-<span class="sourceLineNo">034</span> * This class manages an array of ByteBuffers with a default size 4MB. These<a name="line.34"></a>
-<span class="sourceLineNo">035</span> * buffers are sequential and could be considered as a large buffer.It supports<a name="line.35"></a>
-<span class="sourceLineNo">036</span> * reading/writing data from this large buffer with a position and offset<a name="line.36"></a>
-<span class="sourceLineNo">037</span> */<a name="line.37"></a>
-<span class="sourceLineNo">038</span>@InterfaceAudience.Private<a name="line.38"></a>
-<span class="sourceLineNo">039</span>public final class ByteBufferArray {<a name="line.39"></a>
-<span class="sourceLineNo">040</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.40"></a>
-<span class="sourceLineNo">041</span><a name="line.41"></a>
-<span class="sourceLineNo">042</span>  static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>  private ByteBuffer buffers[];<a name="line.43"></a>
-<span class="sourceLineNo">044</span>  private Lock locks[];<a name="line.44"></a>
-<span class="sourceLineNo">045</span>  private int bufferSize;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>  private int bufferCount;<a name="line.46"></a>
-<span class="sourceLineNo">047</span><a name="line.47"></a>
-<span class="sourceLineNo">048</span>  /**<a name="line.48"></a>
-<span class="sourceLineNo">049</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.49"></a>
-<span class="sourceLineNo">050</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.50"></a>
-<span class="sourceLineNo">051</span>   * we will allocate one additional buffer with capacity 0;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>   * @param capacity total size of the byte buffer array<a name="line.52"></a>
-<span class="sourceLineNo">053</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.53"></a>
-<span class="sourceLineNo">054</span>   */<a name="line.54"></a>
-<span class="sourceLineNo">055</span>  public ByteBufferArray(long capacity, boolean directByteBuffer) {<a name="line.55"></a>
-<span class="sourceLineNo">056</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.57"></a>
-<span class="sourceLineNo">058</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.58"></a>
-<span class="sourceLineNo">059</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.59"></a>
-<span class="sourceLineNo">060</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.60"></a>
-<span class="sourceLineNo">061</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.61"></a>
-<span class="sourceLineNo">062</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.62"></a>
-<span class="sourceLineNo">063</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.63"></a>
-<span class="sourceLineNo">064</span>    locks = new Lock[bufferCount + 1];<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    for (int i = 0; i &lt;= bufferCount; i++) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      locks[i] = new ReentrantLock();<a name="line.66"></a>
-<span class="sourceLineNo">067</span>      if (i &lt; bufferCount) {<a name="line.67"></a>
-<span class="sourceLineNo">068</span>        buffers[i] = directByteBuffer ? ByteBuffer.allocateDirect(bufferSize)<a name="line.68"></a>
-<span class="sourceLineNo">069</span>            : ByteBuffer.allocate(bufferSize);<a name="line.69"></a>
-<span class="sourceLineNo">070</span>      } else {<a name="line.70"></a>
-<span class="sourceLineNo">071</span>        buffers[i] = ByteBuffer.allocate(0);<a name="line.71"></a>
-<span class="sourceLineNo">072</span>      }<a name="line.72"></a>
-<span class="sourceLineNo">073</span><a name="line.73"></a>
-<span class="sourceLineNo">074</span>    }<a name="line.74"></a>
-<span class="sourceLineNo">075</span>  }<a name="line.75"></a>
-<span class="sourceLineNo">076</span><a name="line.76"></a>
-<span class="sourceLineNo">077</span>  private long roundUp(long n, long to) {<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    return ((n + to - 1) / to) * to;<a name="line.78"></a>
+<span class="sourceLineNo">021</span>import java.io.IOException;<a name="line.21"></a>
+<span class="sourceLineNo">022</span>import java.nio.ByteBuffer;<a name="line.22"></a>
+<span class="sourceLineNo">023</span>import java.util.concurrent.locks.Lock;<a name="line.23"></a>
+<span class="sourceLineNo">024</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.24"></a>
+<span class="sourceLineNo">025</span><a name="line.25"></a>
+<span class="sourceLineNo">026</span>import org.apache.commons.logging.Log;<a name="line.26"></a>
+<span class="sourceLineNo">027</span>import org.apache.commons.logging.LogFactory;<a name="line.27"></a>
+<span class="sourceLineNo">028</span>import org.apache.hadoop.hbase.classification.InterfaceAudience;<a name="line.28"></a>
+<span class="sourceLineNo">029</span>import org.apache.hadoop.hbase.nio.ByteBuff;<a name="line.29"></a>
+<span class="sourceLineNo">030</span>import org.apache.hadoop.hbase.nio.MultiByteBuff;<a name="line.30"></a>
+<span class="sourceLineNo">031</span>import org.apache.hadoop.hbase.nio.SingleByteBuff;<a name="line.31"></a>
+<span class="sourceLineNo">032</span>import org.apache.hadoop.util.StringUtils;<a name="line.32"></a>
+<span class="sourceLineNo">033</span><a name="line.33"></a>
+<span class="sourceLineNo">034</span>/**<a name="line.34"></a>
+<span class="sourceLineNo">035</span> * This class manages an array of ByteBuffers with a default size 4MB. These<a name="line.35"></a>
+<span class="sourceLineNo">036</span> * buffers are sequential and could be considered as a large buffer.It supports<a name="line.36"></a>
+<span class="sourceLineNo">037</span> * reading/writing data from this large buffer with a position and offset<a name="line.37"></a>
+<span class="sourceLineNo">038</span> */<a name="line.38"></a>
+<span class="sourceLineNo">039</span>@InterfaceAudience.Private<a name="line.39"></a>
+<span class="sourceLineNo">040</span>public final class ByteBufferArray {<a name="line.40"></a>
+<span class="sourceLineNo">041</span>  private static final Log LOG = LogFactory.getLog(ByteBufferArray.class);<a name="line.41"></a>
+<span class="sourceLineNo">042</span><a name="line.42"></a>
+<span class="sourceLineNo">043</span>  public static final int DEFAULT_BUFFER_SIZE = 4 * 1024 * 1024;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>  private ByteBuffer buffers[];<a name="line.44"></a>
+<span class="sourceLineNo">045</span>  private Lock locks[];<a name="line.45"></a>
+<span class="sourceLineNo">046</span>  private int bufferSize;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>  private int bufferCount;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>  private ByteBufferAllocator allocator;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>  /**<a name="line.49"></a>
+<span class="sourceLineNo">050</span>   * We allocate a number of byte buffers as the capacity. In order not to out<a name="line.50"></a>
+<span class="sourceLineNo">051</span>   * of the array bounds for the last byte(see {@link ByteBufferArray#multiple}),<a name="line.51"></a>
+<span class="sourceLineNo">052</span>   * we will allocate one additional buffer with capacity 0;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>   * @param capacity total size of the byte buffer array<a name="line.53"></a>
+<span class="sourceLineNo">054</span>   * @param directByteBuffer true if we allocate direct buffer<a name="line.54"></a>
+<span class="sourceLineNo">055</span>   * @param allocator the ByteBufferAllocator that will create the buffers<a name="line.55"></a>
+<span class="sourceLineNo">056</span>   * @throws IOException throws IOException if there is an exception thrown by the allocator<a name="line.56"></a>
+<span class="sourceLineNo">057</span>   */<a name="line.57"></a>
+<span class="sourceLineNo">058</span>  public ByteBufferArray(long capacity, boolean directByteBuffer, ByteBufferAllocator allocator)<a name="line.58"></a>
+<span class="sourceLineNo">059</span>      throws IOException {<a name="line.59"></a>
+<span class="sourceLineNo">060</span>    this.bufferSize = DEFAULT_BUFFER_SIZE;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>    if (this.bufferSize &gt; (capacity / 16))<a name="line.61"></a>
+<span class="sourceLineNo">062</span>      this.bufferSize = (int) roundUp(capacity / 16, 32768);<a name="line.62"></a>
+<span class="sourceLineNo">063</span>    this.bufferCount = (int) (roundUp(capacity, bufferSize) / bufferSize);<a name="line.63"></a>
+<span class="sourceLineNo">064</span>    LOG.info("Allocating buffers total=" + StringUtils.byteDesc(capacity)<a name="line.64"></a>
+<span class="sourceLineNo">065</span>        + ", sizePerBuffer=" + StringUtils.byteDesc(bufferSize) + ", count="<a name="line.65"></a>
+<span class="sourceLineNo">066</span>        + bufferCount + ", direct=" + directByteBuffer);<a name="line.66"></a>
+<span class="sourceLineNo">067</span>    buffers = new ByteBuffer[bufferCount + 1];<a name="line.67"></a>
+<span class="sourceLineNo">068</span>    locks = new Lock[bufferCount + 1];<a name="line.68"></a>
+<span class="sourceLineNo">069</span>    this.allocator = allocator;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    for (int i = 0; i &lt;= bufferCount; i++) {<a name="line.70"></a>
+<span class="sourceLineNo">071</span>      locks[i] = new ReentrantLock();<a name="line.71"></a>
+<span class="sourceLineNo">072</span>      if (i &lt; bufferCount) {<a name="line.72"></a>
+<span class="sourceLineNo">073</span>        buffers[i] = allocator.allocate(bufferSize, directByteBuffer);<a name="line.73"></a>
+<span class="sourceLineNo">074</span>      } else {<a name="line.74"></a>
+<span class="sourceLineNo">075</span>        // always create on heap<a name="line.75"></a>
+<span class="sourceLineNo">076</span>        buffers[i] = ByteBuffer.allocate(0);<a name="line.76"></a>
+<span class="sourceLineNo">077</span>      }<a name="line.77"></a>
+<span class="sourceLineNo">078</span>    }<a name="line.78"></a>
 <span class="sourceLineNo">079</span>  }<a name="line.79"></a>
 <span class="sourceLineNo">080</span><a name="line.80"></a>
-<span class="sourceLineNo">081</span>  /**<a name="line.81"></a>
-<span class="sourceLineNo">082</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @param start start position in the ByteBufferArray<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.84"></a>
-<span class="sourceLineNo">085</span>   * @param dstArray The array into which bytes are to be written<a name="line.85"></a>
-<span class="sourceLineNo">086</span>   * @return number of bytes read<a name="line.86"></a>
-<span class="sourceLineNo">087</span>   */<a name="line.87"></a>
-<span class="sourceLineNo">088</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    return getMultiple(start, len, dstArray, 0);<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @param start start offset of this buffer array<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @param dstArray The array into which bytes are to be written<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.97"></a>
-<span class="sourceLineNo">098</span>   *          written<a name="line.98"></a>
-<span class="sourceLineNo">099</span>   * @return number of bytes read<a name="line.99"></a>
-<span class="sourceLineNo">100</span>   */<a name="line.100"></a>
-<span class="sourceLineNo">101</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    return len;<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>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.106"></a>
-<span class="sourceLineNo">107</span>    @Override<a name="line.107"></a>
-<span class="sourceLineNo">108</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.108"></a>
-<span class="sourceLineNo">109</span>      bb.get(array, arrayIdx, len);<a name="line.109"></a>
-<span class="sourceLineNo">110</span>    }<a name="line.110"></a>
-<span class="sourceLineNo">111</span>  };<a name="line.111"></a>
-<span class="sourceLineNo">112</span><a name="line.112"></a>
-<span class="sourceLineNo">113</span>  /**<a name="line.113"></a>
-<span class="sourceLineNo">114</span>   * Transfers bytes from the given source array into this buffer array<a name="line.114"></a>
-<span class="sourceLineNo">115</span>   * @param start start offset of this buffer array<a name="line.115"></a>
-<span class="sourceLineNo">116</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.116"></a>
-<span class="sourceLineNo">117</span>   * @param srcArray The array from which bytes are to be read<a name="line.117"></a>
-<span class="sourceLineNo">118</span>   */<a name="line.118"></a>
-<span class="sourceLineNo">119</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>    putMultiple(start, len, srcArray, 0);<a name="line.120"></a>
-<span class="sourceLineNo">121</span>  }<a name="line.121"></a>
-<span class="sourceLineNo">122</span><a name="line.122"></a>
-<span class="sourceLineNo">123</span>  /**<a name="line.123"></a>
-<span class="sourceLineNo">124</span>   * Transfers bytes from the given source array into this buffer array<a name="line.124"></a>
-<span class="sourceLineNo">125</span>   * @param start start offset of this buffer array<a name="line.125"></a>
-<span class="sourceLineNo">126</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.126"></a>
-<span class="sourceLineNo">127</span>   * @param srcArray The array from which bytes are to be read<a name="line.127"></a>
-<span class="sourceLineNo">128</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.128"></a>
-<span class="sourceLineNo">129</span>   *          read<a name="line.129"></a>
-<span class="sourceLineNo">130</span>   */<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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>  private final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.135"></a>
-<span class="sourceLineNo">136</span>    @Override<a name="line.136"></a>
-<span class="sourceLineNo">137</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.137"></a>
-<span class="sourceLineNo">138</span>      bb.put(array, arrayIdx, len);<a name="line.138"></a>
-<span class="sourceLineNo">139</span>    }<a name="line.139"></a>
-<span class="sourceLineNo">140</span>  };<a name="line.140"></a>
-<span class="sourceLineNo">141</span><a name="line.141"></a>
-<span class="sourceLineNo">142</span>  private interface Visitor {<a name="line.142"></a>
-<span class="sourceLineNo">143</span>    /**<a name="line.143"></a>
-<span class="sourceLineNo">144</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.144"></a>
-<span class="sourceLineNo">145</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.145"></a>
-<span class="sourceLineNo">146</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.146"></a>
-<span class="sourceLineNo">147</span>     * @param bb byte buffer<a name="line.147"></a>
-<span class="sourceLineNo">148</span>     * @param array a source or destination byte array<a name="line.148"></a>
-<span class="sourceLineNo">149</span>     * @param arrayOffset offset of the byte array<a name="line.149"></a>
-<span class="sourceLineNo">150</span>     * @param len read/write length<a name="line.150"></a>
-<span class="sourceLineNo">151</span>     */<a name="line.151"></a>
-<span class="sourceLineNo">152</span>    void visit(ByteBuffer bb, byte[] array, int arrayOffset, int len);<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>   * Access(read or write) this buffer array with a position and length as the<a name="line.156"></a>
-<span class="sourceLineNo">157</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.157"></a>
-<span class="sourceLineNo">158</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * @param start start offset of this buffer array<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   * @param len The maximum number of bytes to be accessed<a name="line.160"></a>
-<span class="sourceLineNo">161</span>   * @param array The array from/to which bytes are to be read/written<a name="line.161"></a>
-<span class="sourceLineNo">162</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.162"></a>
-<span class="sourceLineNo">163</span>   *          be read or written<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * @param visitor implement of how to visit the byte buffer<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.166"></a>
-<span class="sourceLineNo">167</span>    assert len &gt;= 0;<a name="line.167"></a>
-<span class="sourceLineNo">168</span>    long end = start + len;<a name="line.168"></a>
-<span class="sourceLineNo">169</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.169"></a>
-<span class="sourceLineNo">170</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.170"></a>
-<span class="sourceLineNo">171</span>    assert array.length &gt;= len + arrayOffset;<a name="line.171"></a>
-<span class="sourceLineNo">172</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.172"></a>
-<span class="sourceLineNo">173</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.173"></a>
-<span class="sourceLineNo">174</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.174"></a>
-<span class="sourceLineNo">175</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.175"></a>
-<span class="sourceLineNo">176</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.176"></a>
-<span class="sourceLineNo">177</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.177"></a>
-<span class="sourceLineNo">178</span>      LOG.error(msg);<a name="line.178"></a>
-<span class="sourceLineNo">179</span>      throw new RuntimeException(msg);<a name="line.179"></a>
-<span class="sourceLineNo">180</span>    }<a name="line.180"></a>
-<span class="sourceLineNo">181</span>    int srcIndex = 0, cnt = -1;<a name="line.181"></a>
-<span class="sourceLineNo">182</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.182"></a>
-<span class="sourceLineNo">183</span>      Lock lock = locks[i];<a name="line.183"></a>
-<span class="sourceLineNo">184</span>      lock.lock();<a name="line.184"></a>
-<span class="sourceLineNo">185</span>      try {<a name="line.185"></a>
-<span class="sourceLineNo">186</span>        ByteBuffer bb = buffers[i];<a name="line.186"></a>
-<span class="sourceLineNo">187</span>        if (i == startBuffer) {<a name="line.187"></a>
-<span class="sourceLineNo">188</span>          cnt = bufferSize - startOffset;<a name="line.188"></a>
-<span class="sourceLineNo">189</span>          if (cnt &gt; len) cnt = len;<a name="line.189"></a>
-<span class="sourceLineNo">190</span>          bb.limit(startOffset + cnt).position(startOffset);<a name="line.190"></a>
-<span class="sourceLineNo">191</span>        } else if (i == endBuffer) {<a name="line.191"></a>
-<span class="sourceLineNo">192</span>          cnt = endOffset;<a name="line.192"></a>
-<span class="sourceLineNo">193</span>          bb.limit(cnt).position(0);<a name="line.193"></a>
-<span class="sourceLineNo">194</span>        } else {<a name="line.194"></a>
-<span class="sourceLineNo">195</span>          cnt = bufferSize;<a name="line.195"></a>
-<span class="sourceLineNo">196</span>          bb.limit(cnt).position(0);<a name="line.196"></a>
-<span class="sourceLineNo">197</span>        }<a name="line.197"></a>
-<span class="sourceLineNo">198</span>        visitor.visit(bb, array, srcIndex + arrayOffset, cnt);<a name="line.198"></a>
-<span class="sourceLineNo">199</span>        srcIndex += cnt;<a name="line.199"></a>
-<span class="sourceLineNo">200</span>      } finally {<a name="line.200"></a>
-<span class="sourceLineNo">201</span>        lock.unlock();<a name="line.201"></a>
-<span class="sourceLineNo">202</span>      }<a name="line.202"></a>
-<span class="sourceLineNo">203</span>    }<a name="line.203"></a>
-<span class="sourceLineNo">204</span>    assert srcIndex == len;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  }<a name="line.205"></a>
-<span class="sourceLineNo">206</span><a name="line.206"></a>
-<span class="sourceLineNo">207</span>  /**<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.208"></a>
-<span class="sourceLineNo">209</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.209"></a>
-<span class="sourceLineNo">210</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.210"></a>
-<span class="sourceLineNo">211</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.211"></a>
-<span class="sourceLineNo">212</span>   * 'position' 0 to 'length' 5.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>   * @param offset<a name="line.213"></a>
-<span class="sourceLineNo">214</span>   * @param len<a name="line.214"></a>
-<span class="sourceLineNo">215</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   */<a name="line.216"></a>
-<span class="sourceLineNo">217</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.217"></a>
-<span class="sourceLineNo">218</span>    assert len &gt;= 0;<a name="line.218"></a>
-<span class="sourceLineNo">219</span>    long end = offset + len;<a name="line.219"></a>
-<span class="sourceLineNo">220</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.220"></a>
-<span class="sourceLineNo">221</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.221"></a>
-<span class="sourceLineNo">222</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.222"></a>
-<span class="sourceLineNo">223</span>    if (endBuffer == this.bufferCount) {<a name="line.223"></a>
-<span class="sourceLineNo">224</span>      endBuffer--;<a name="line.224"></a>
-<span class="sourceLineNo">225</span>      endBufferOffset = bufferSize;<a name="line.225"></a>
-<span class="sourceLineNo">226</span>    }<a name="line.226"></a>
-<span class="sourceLineNo">227</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.228"></a>
-<span class="sourceLineNo">229</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.230"></a>
-<span class="sourceLineNo">231</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.231"></a>
-<span class="sourceLineNo">232</span>          + ",bufferSize=" + bufferSize;<a name="line.232"></a>
-<span class="sourceLineNo">233</span>      LOG.error(msg);<a name="line.233"></a>
-<span class="sourceLineNo">234</span>      throw new RuntimeException(msg);<a name="line.234"></a>
-<span class="sourceLineNo">235</span>    }<a name="line.235"></a>
-<span class="sourceLineNo">236</span>    int srcIndex = 0, cnt = -1;<a name="line.236"></a>
-<span class="sourceLineNo">237</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.237"></a>
-<span class="sourceLineNo">238</span>    for (int i = startBuffer,j=0; i &lt;= endBuffer; ++i,j++) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>      Lock lock = locks[i];<a name="line.239"></a>
-<span class="sourceLineNo">240</span>      lock.lock();<a name="line.240"></a>
-<span class="sourceLineNo">241</span>      try {<a name="line.241"></a>
-<span class="sourceLineNo">242</span>        ByteBuffer bb = buffers[i];<a name="line.242"></a>
-<span class="sourceLineNo">243</span>        if (i == startBuffer) {<a name="line.243"></a>
-<span class="sourceLineNo">244</span>          cnt = bufferSize - startBufferOffset;<a name="line.244"></a>
-<span class="sourceLineNo">245</span>          if (cnt &gt; len) cnt = len;<a name="line.245"></a>
-<span class="sourceLineNo">246</span>          ByteBuffer dup = bb.duplicate();<a name="line.246"></a>
-<span class="sourceLineNo">247</span>          dup.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>          mbb[j] = dup.slice();<a name="line.248"></a>
-<span class="sourceLineNo">249</span>        } else if (i == endBuffer) {<a name="line.249"></a>
-<span class="sourceLineNo">250</span>          cnt = endBufferOffset;<a name="line.250"></a>
-<span class="sourceLineNo">251</span>          ByteBuffer dup = bb.duplicate();<a name="line.251"></a>
-<span class="sourceLineNo">252</span>          dup.position(0).limit(cnt);<a name="line.252"></a>
-<span class="sourceLineNo">253</span>          mbb[j] = dup.slice();<a name="line.253"></a>
-<span class="sourceLineNo">254</span>        } else {<a name="line.254"></a>
-<span class="sourceLineNo">255</span>          cnt = bufferSize ;<a name="line.255"></a>
-<span class="sourceLineNo">256</span>          ByteBuffer dup = bb.duplicate();<a name="line.256"></a>
-<span class="sourceLineNo">257</span>          dup.position(0).limit(cnt);<a name="line.257"></a>
-<span class="sourceLineNo">258</span>          mbb[j] = dup.slice();<a name="line.258"></a>
-<span class="sourceLineNo">259</span>        }<a name="line.259"></a>
-<span class="sourceLineNo">260</span>        srcIndex += cnt;<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      } finally {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        lock.unlock();<a name="line.262"></a>
-<span class="sourceLineNo">263</span>      }<a name="line.263"></a>
-<span class="sourceLineNo">264</span>    }<a name="line.264"></a>
-<span class="sourceLineNo">265</span>    assert srcIndex == len;<a name="line.265"></a>
-<span class="sourceLineNo">266</span>    if (mbb.length &gt; 1) {<a name="line.266"></a>
-<span class="sourceLineNo">267</span>      return new MultiByteBuff(mbb);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>    } else {<a name="line.268"></a>
-<span class="sourceLineNo">269</span>      return new SingleByteBuff(mbb[0]);<a name="line.269"></a>
-<span class="sourceLineNo">270</span>    }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>  }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>}<a name="line.272"></a>
+<span class="sourceLineNo">081</span>  private long roundUp(long n, long to) {<a name="line.81"></a>
+<span class="sourceLineNo">082</span>    return ((n + to - 1) / to) * to;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  }<a name="line.83"></a>
+<span class="sourceLineNo">084</span><a name="line.84"></a>
+<span class="sourceLineNo">085</span>  /**<a name="line.85"></a>
+<span class="sourceLineNo">086</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.86"></a>
+<span class="sourceLineNo">087</span>   * @param start start position in the ByteBufferArray<a name="line.87"></a>
+<span class="sourceLineNo">088</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.88"></a>
+<span class="sourceLineNo">089</span>   * @param dstArray The array into which bytes are to be written<a name="line.89"></a>
+<span class="sourceLineNo">090</span>   * @return number of bytes read<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   */<a name="line.91"></a>
+<span class="sourceLineNo">092</span>  public int getMultiple(long start, int len, byte[] dstArray) {<a name="line.92"></a>
+<span class="sourceLineNo">093</span>    return getMultiple(start, len, dstArray, 0);<a name="line.93"></a>
+<span class="sourceLineNo">094</span>  }<a name="line.94"></a>
+<span class="sourceLineNo">095</span><a name="line.95"></a>
+<span class="sourceLineNo">096</span>  /**<a name="line.96"></a>
+<span class="sourceLineNo">097</span>   * Transfers bytes from this buffer array into the given destination array<a name="line.97"></a>
+<span class="sourceLineNo">098</span>   * @param start start offset of this buffer array<a name="line.98"></a>
+<span class="sourceLineNo">099</span>   * @param len The maximum number of bytes to be written to the given array<a name="line.99"></a>
+<span class="sourceLineNo">100</span>   * @param dstArray The array into which bytes are to be written<a name="line.100"></a>
+<span class="sourceLineNo">101</span>   * @param dstOffset The offset within the given array of the first byte to be<a name="line.101"></a>
+<span class="sourceLineNo">102</span>   *          written<a name="line.102"></a>
+<span class="sourceLineNo">103</span>   * @return number of bytes read<a name="line.103"></a>
+<span class="sourceLineNo">104</span>   */<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  public int getMultiple(long start, int len, byte[] dstArray, int dstOffset) {<a name="line.105"></a>
+<span class="sourceLineNo">106</span>    multiple(start, len, dstArray, dstOffset, GET_MULTIPLE_VISTOR);<a name="line.106"></a>
+<span class="sourceLineNo">107</span>    return len;<a name="line.107"></a>
+<span class="sourceLineNo">108</span>  }<a name="line.108"></a>
+<span class="sourceLineNo">109</span><a name="line.109"></a>
+<span class="sourceLineNo">110</span>  private final static Visitor GET_MULTIPLE_VISTOR = new Visitor() {<a name="line.110"></a>
+<span class="sourceLineNo">111</span>    @Override<a name="line.111"></a>
+<span class="sourceLineNo">112</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>      bb.get(array, arrayIdx, len);<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    }<a name="line.114"></a>
+<span class="sourceLineNo">115</span>  };<a name="line.115"></a>
+<span class="sourceLineNo">116</span><a name="line.116"></a>
+<span class="sourceLineNo">117</span>  /**<a name="line.117"></a>
+<span class="sourceLineNo">118</span>   * Transfers bytes from the given source array into this buffer array<a name="line.118"></a>
+<span class="sourceLineNo">119</span>   * @param start start offset of this buffer array<a name="line.119"></a>
+<span class="sourceLineNo">120</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.120"></a>
+<span class="sourceLineNo">121</span>   * @param srcArray The array from which bytes are to be read<a name="line.121"></a>
+<span class="sourceLineNo">122</span>   */<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  public void putMultiple(long start, int len, byte[] srcArray) {<a name="line.123"></a>
+<span class="sourceLineNo">124</span>    putMultiple(start, len, srcArray, 0);<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>  /**<a name="line.127"></a>
+<span class="sourceLineNo">128</span>   * Transfers bytes from the given source array into this buffer array<a name="line.128"></a>
+<span class="sourceLineNo">129</span>   * @param start start offset of this buffer array<a name="line.129"></a>
+<span class="sourceLineNo">130</span>   * @param len The maximum number of bytes to be read from the given array<a name="line.130"></a>
+<span class="sourceLineNo">131</span>   * @param srcArray The array from which bytes are to be read<a name="line.131"></a>
+<span class="sourceLineNo">132</span>   * @param srcOffset The offset within the given array of the first byte to be<a name="line.132"></a>
+<span class="sourceLineNo">133</span>   *          read<a name="line.133"></a>
+<span class="sourceLineNo">134</span>   */<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  public void putMultiple(long start, int len, byte[] srcArray, int srcOffset) {<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    multiple(start, len, srcArray, srcOffset, PUT_MULTIPLE_VISITOR);<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 final static Visitor PUT_MULTIPLE_VISITOR = new Visitor() {<a name="line.139"></a>
+<span class="sourceLineNo">140</span>    @Override<a name="line.140"></a>
+<span class="sourceLineNo">141</span>    public void visit(ByteBuffer bb, byte[] array, int arrayIdx, int len) {<a name="line.141"></a>
+<span class="sourceLineNo">142</span>      bb.put(array, arrayIdx, len);<a name="line.142"></a>
+<span class="sourceLineNo">143</span>    }<a name="line.143"></a>
+<span class="sourceLineNo">144</span>  };<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  private interface Visitor {<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    /**<a name="line.147"></a>
+<span class="sourceLineNo">148</span>     * Visit the given byte buffer, if it is a read action, we will transfer the<a name="line.148"></a>
+<span class="sourceLineNo">149</span>     * bytes from the buffer to the destination array, else if it is a write<a name="line.149"></a>
+<span class="sourceLineNo">150</span>     * action, we will transfer the bytes from the source array to the buffer<a name="line.150"></a>
+<span class="sourceLineNo">151</span>     * @param bb byte buffer<a name="line.151"></a>
+<span class="sourceLineNo">152</span>     * @param array a source or destination byte array<a name="line.152"></a>
+<span class="sourceLineNo">153</span>     * @param arrayOffset offset of the byte array<a name="line.153"></a>
+<span class="sourceLineNo">154</span>     * @param len read/write length<a name="line.154"></a>
+<span class="sourceLineNo">155</span>     */<a name="line.155"></a>
+<span class="sourceLineNo">156</span>    void visit(ByteBuffer bb, byte[] array, int arrayOffset, int len);<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  }<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * Access(read or write) this buffer array with a position and length as the<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   * given array. Here we will only lock one buffer even if it may be need visit<a name="line.161"></a>
+<span class="sourceLineNo">162</span>   * several buffers. The consistency is guaranteed by the caller.<a name="line.162"></a>
+<span class="sourceLineNo">163</span>   * @param start start offset of this buffer array<a name="line.163"></a>
+<span class="sourceLineNo">164</span>   * @param len The maximum number of bytes to be accessed<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * @param array The array from/to which bytes are to be read/written<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   * @param arrayOffset The offset within the given array of the first byte to<a name="line.166"></a>
+<span class="sourceLineNo">167</span>   *          be read or written<a name="line.167"></a>
+<span class="sourceLineNo">168</span>   * @param visitor implement of how to visit the byte buffer<a name="line.168"></a>
+<span class="sourceLineNo">169</span>   */<a name="line.169"></a>
+<span class="sourceLineNo">170</span>  void multiple(long start, int len, byte[] array, int arrayOffset, Visitor visitor) {<a name="line.170"></a>
+<span class="sourceLineNo">171</span>    assert len &gt;= 0;<a name="line.171"></a>
+<span class="sourceLineNo">172</span>    long end = start + len;<a name="line.172"></a>
+<span class="sourceLineNo">173</span>    int startBuffer = (int) (start / bufferSize), startOffset = (int) (start % bufferSize);<a name="line.173"></a>
+<span class="sourceLineNo">174</span>    int endBuffer = (int) (end / bufferSize), endOffset = (int) (end % bufferSize);<a name="line.174"></a>
+<span class="sourceLineNo">175</span>    assert array.length &gt;= len + arrayOffset;<a name="line.175"></a>
+<span class="sourceLineNo">176</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.176"></a>
+<span class="sourceLineNo">177</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.177"></a>
+<span class="sourceLineNo">178</span>        || (endBuffer == bufferCount &amp;&amp; endOffset == 0);<a name="line.178"></a>
+<span class="sourceLineNo">179</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.179"></a>
+<span class="sourceLineNo">180</span>      String msg = "Failed multiple, start=" + start + ",startBuffer="<a name="line.180"></a>
+<span class="sourceLineNo">181</span>          + startBuffer + ",bufferSize=" + bufferSize;<a name="line.181"></a>
+<span class="sourceLineNo">182</span>      LOG.error(msg);<a name="line.182"></a>
+<span class="sourceLineNo">183</span>      throw new RuntimeException(msg);<a name="line.183"></a>
+<span class="sourceLineNo">184</span>    }<a name="line.184"></a>
+<span class="sourceLineNo">185</span>    int srcIndex = 0, cnt = -1;<a name="line.185"></a>
+<span class="sourceLineNo">186</span>    for (int i = startBuffer; i &lt;= endBuffer; ++i) {<a name="line.186"></a>
+<span class="sourceLineNo">187</span>      Lock lock = locks[i];<a name="line.187"></a>
+<span class="sourceLineNo">188</span>      lock.lock();<a name="line.188"></a>
+<span class="sourceLineNo">189</span>      try {<a name="line.189"></a>
+<span class="sourceLineNo">190</span>        ByteBuffer bb = buffers[i];<a name="line.190"></a>
+<span class="sourceLineNo">191</span>        if (i == startBuffer) {<a name="line.191"></a>
+<span class="sourceLineNo">192</span>          cnt = bufferSize - startOffset;<a name="line.192"></a>
+<span class="sourceLineNo">193</span>          if (cnt &gt; len) cnt = len;<a name="line.193"></a>
+<span class="sourceLineNo">194</span>          bb.limit(startOffset + cnt).position(startOffset);<a name="line.194"></a>
+<span class="sourceLineNo">195</span>        } else if (i == endBuffer) {<a name="line.195"></a>
+<span class="sourceLineNo">196</span>          cnt = endOffset;<a name="line.196"></a>
+<span class="sourceLineNo">197</span>          bb.limit(cnt).position(0);<a name="line.197"></a>
+<span class="sourceLineNo">198</span>        } else {<a name="line.198"></a>
+<span class="sourceLineNo">199</span>          cnt = bufferSize;<a name="line.199"></a>
+<span class="sourceLineNo">200</span>          bb.limit(cnt).position(0);<a name="line.200"></a>
+<span class="sourceLineNo">201</span>        }<a name="line.201"></a>
+<span class="sourceLineNo">202</span>        visitor.visit(bb, array, srcIndex + arrayOffset, cnt);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>        srcIndex += cnt;<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      } finally {<a name="line.204"></a>
+<span class="sourceLineNo">205</span>        lock.unlock();<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      }<a name="line.206"></a>
+<span class="sourceLineNo">207</span>    }<a name="line.207"></a>
+<span class="sourceLineNo">208</span>    assert srcIndex == len;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  }<a name="line.209"></a>
+<span class="sourceLineNo">210</span><a name="line.210"></a>
+<span class="sourceLineNo">211</span>  /**<a name="line.211"></a>
+<span class="sourceLineNo">212</span>   * Creates a ByteBuff from a given array of ByteBuffers from the given offset to the<a name="line.212"></a>
+<span class="sourceLineNo">213</span>   * length specified. For eg, if there are 4 buffers forming an array each with length 10 and<a name="line.213"></a>
+<span class="sourceLineNo">214</span>   * if we call asSubBuffer(5, 10) then we will create an MBB consisting of two BBs<a name="line.214"></a>
+<span class="sourceLineNo">215</span>   * and the first one be a BB from 'position' 5 to a 'length' 5 and the 2nd BB will be from<a name="line.215"></a>
+<span class="sourceLineNo">216</span>   * 'position' 0 to 'length' 5.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>   * @param offset<a name="line.217"></a>
+<span class="sourceLineNo">218</span>   * @param len<a name="line.218"></a>
+<span class="sourceLineNo">219</span>   * @return a ByteBuff formed from the underlying ByteBuffers<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   */<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  public ByteBuff asSubByteBuff(long offset, int len) {<a name="line.221"></a>
+<span class="sourceLineNo">222</span>    assert len &gt;= 0;<a name="line.222"></a>
+<span class="sourceLineNo">223</span>    long end = offset + len;<a name="line.223"></a>
+<span class="sourceLineNo">224</span>    int startBuffer = (int) (offset / bufferSize), startBufferOffset = (int) (offset % bufferSize);<a name="line.224"></a>
+<span class="sourceLineNo">225</span>    int endBuffer = (int) (end / bufferSize), endBufferOffset = (int) (end % bufferSize);<a name="line.225"></a>
+<span class="sourceLineNo">226</span>    // Last buffer in the array is a dummy one with 0 capacity. Avoid sending back that<a name="line.226"></a>
+<span class="sourceLineNo">227</span>    if (endBuffer == this.bufferCount) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>      endBuffer--;<a name="line.228"></a>
+<span class="sourceLineNo">229</span>      endBufferOffset = bufferSize;<a name="line.229"></a>
+<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
+<span class="sourceLineNo">231</span>    assert startBuffer &gt;= 0 &amp;&amp; startBuffer &lt; bufferCount;<a name="line.231"></a>
+<span class="sourceLineNo">232</span>    assert endBuffer &gt;= 0 &amp;&amp; endBuffer &lt; bufferCount<a name="line.232"></a>
+<span class="sourceLineNo">233</span>        || (endBuffer == bufferCount &amp;&amp; endBufferOffset == 0);<a name="line.233"></a>
+<span class="sourceLineNo">234</span>    if (startBuffer &gt;= locks.length || startBuffer &lt; 0) {<a name="line.234"></a>
+<span class="sourceLineNo">235</span>      String msg = "Failed subArray, start=" + offset + ",startBuffer=" + startBuffer<a name="line.235"></a>
+<span class="sourceLineNo">236</span>          + ",bufferSize=" + bufferSize;<a name="line.236"></a>
+<span class="sourceLineNo">237</span>      LOG.error(msg);<a name="line.237"></a>
+<span class="sourceLineNo">238</span>      throw new RuntimeException(msg);<a name="line.238"></a>
+<span class="sourceLineNo">239</span>    }<a name="line.239"></a>
+<span class="sourceLineNo">240</span>    int srcIndex = 0, cnt = -1;<a name="line.240"></a>
+<span class="sourceLineNo">241</span>    ByteBuffer[] mbb = new ByteBuffer[endBuffer - startBuffer + 1];<a name="line.241"></a>
+<span class="sourceLineNo">242</span>    for (int i = startBuffer,j=0; i &lt;= endBuffer; ++i,j++) {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>      Lock lock = locks[i];<a name="line.243"></a>
+<span class="sourceLineNo">244</span>      lock.lock();<a name="line.244"></a>
+<span class="sourceLineNo">245</span>      try {<a name="line.245"></a>
+<span class="sourceLineNo">246</span>        ByteBuffer bb = buffers[i];<a name="line.246"></a>
+<span class="sourceLineNo">247</span>        if (i == startBuffer) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>          cnt = bufferSize - startBufferOffset;<a name="line.248"></a>
+<span class="sourceLineNo">249</span>          if (cnt &gt; len) cnt = len;<a name="line.249"></a>
+<span class="sourceLineNo">250</span>          ByteBuffer dup = bb.duplicate();<a name="line.250"></a>
+<span class="sourceLineNo">251</span>          dup.limit(startBufferOffset + cnt).position(startBufferOffset);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>          mbb[j] = dup.slice();<a name="line.252"></a>
+<span class="sourceLineNo">253</span>        } else if (i == endBuffer) {<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          cnt = endBufferOffset;<a name="line.254"></a>
+<span class="sourceLineNo">255</span>          ByteBuffer dup = bb.duplicate();<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          dup.position(0).limit(cnt);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          mbb[j] = dup.slice();<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        } else {<a name="line.258"></a>
+<span class="sourceLineNo">259</span>          cnt = bufferSize ;<a name="line.259"></a>
+<span class="sourceLineNo">260</span>          ByteBuffer dup = bb.duplicate();<a name="line.260"></a>
+<span class="sourceLineNo">261</span>          dup.position(0).limit(cnt);<a name="line.261"></a>
+<span class="sourceLineNo">262</span>          mbb[j] = dup.slice();<a name="line.262"></a>
+<span class="sourceLineNo">263</span>        }<a name="line.263"></a>
+<span class="sourceLineNo">264</span>        srcIndex += cnt;<a name="line.264"></a>
+<span class="sourceLineNo">265</span>      } finally {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>        lock.unlock();<a name="line.266"></a>
+<span class="sourceLineNo">267</span>      }<a name="line.267"></a>
+<span class="sourceLineNo">268</span>    }<a name="line.268"></a>
+<span class="sourceLineNo">269</span>    assert srcIndex == len;<a name="line.269"></a>
+<span class="sourceLineNo">270</span>    if (mbb.length &gt; 1) {<a name="line.270"></a>
+<span class="sourceLineNo">271</span>      return new MultiByteBuff(mbb);<a name="line.271"></a>
+<span class="sourceLineNo">272</span>    } else {<a name="line.272"></a>
+<span class="sourceLineNo">273</span>      return new SingleByteBuff(mbb[0]);<a name="line.273"></a>
+<span class="sourceLineNo">274</span>    }<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  }<a name="line.275"></a>
+<span class="sourceLineNo">276</span>}<a name="line.276"></a>
 
 
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/distribution-management.html
----------------------------------------------------------------------
diff --git a/distribution-management.html b/distribution-management.html
index 5ae84f8..0f3be3b 100644
--- a/distribution-management.html
+++ b/distribution-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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; Project Distribution Management</title>
     <link rel="stylesheet" href="./css/apache-maven-fluido-1.5-HBASE.min.css" />
@@ -290,7 +290,7 @@
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/export_control.html
----------------------------------------------------------------------
diff --git a/export_control.html b/export_control.html
index 4cd5063..3a68b48 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013; 
       Export Control
@@ -330,7 +330,7 @@ for more details.</p>
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>
 

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/checkstyle.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/checkstyle.html b/hbase-annotations/checkstyle.html
index d06891f..8d6ec30 100644
--- a/hbase-annotations/checkstyle.html
+++ b/hbase-annotations/checkstyle.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependencies.html b/hbase-annotations/dependencies.html
index 3a924ff..beadbbb 100644
--- a/hbase-annotations/dependencies.html
+++ b/hbase-annotations/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-convergence.html b/hbase-annotations/dependency-convergence.html
index a459c58..ddd60ad 100644
--- a/hbase-annotations/dependency-convergence.html
+++ b/hbase-annotations/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-info.html b/hbase-annotations/dependency-info.html
index 6e46b77..569c060 100644
--- a/hbase-annotations/dependency-info.html
+++ b/hbase-annotations/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/dependency-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/dependency-management.html b/hbase-annotations/dependency-management.html
index 8c2553b..38a2eb3 100644
--- a/hbase-annotations/dependency-management.html
+++ b/hbase-annotations/dependency-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/distribution-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/distribution-management.html b/hbase-annotations/distribution-management.html
index fbedcc5..2b23e18 100644
--- a/hbase-annotations/distribution-management.html
+++ b/hbase-annotations/distribution-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/index.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/index.html b/hbase-annotations/index.html
index 16527f0..4501f00 100644
--- a/hbase-annotations/index.html
+++ b/hbase-annotations/index.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/integration.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/integration.html b/hbase-annotations/integration.html
index 2ed33d0..92b8a67 100644
--- a/hbase-annotations/integration.html
+++ b/hbase-annotations/integration.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/issue-tracking.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/issue-tracking.html b/hbase-annotations/issue-tracking.html
index bfa6670..cbb0f8d 100644
--- a/hbase-annotations/issue-tracking.html
+++ b/hbase-annotations/issue-tracking.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/license.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/license.html b/hbase-annotations/license.html
index 605c469..641cd16 100644
--- a/hbase-annotations/license.html
+++ b/hbase-annotations/license.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/mail-lists.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/mail-lists.html b/hbase-annotations/mail-lists.html
index 94098fb..a7ca01e 100644
--- a/hbase-annotations/mail-lists.html
+++ b/hbase-annotations/mail-lists.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/plugin-management.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugin-management.html b/hbase-annotations/plugin-management.html
index ecd6afd..e9ec80d 100644
--- a/hbase-annotations/plugin-management.html
+++ b/hbase-annotations/plugin-management.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/plugins.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/plugins.html b/hbase-annotations/plugins.html
index 1f1c95c..8a54123 100644
--- a/hbase-annotations/plugins.html
+++ b/hbase-annotations/plugins.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/project-info.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-info.html b/hbase-annotations/project-info.html
index 8b0c64e..b0b422c 100644
--- a/hbase-annotations/project-info.html
+++ b/hbase-annotations/project-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/project-reports.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-reports.html b/hbase-annotations/project-reports.html
index c34b85b..ce7cefb 100644
--- a/hbase-annotations/project-reports.html
+++ b/hbase-annotations/project-reports.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/project-summary.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/project-summary.html b/hbase-annotations/project-summary.html
index 55f0d0c..66ac302 100644
--- a/hbase-annotations/project-summary.html
+++ b/hbase-annotations/project-summary.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/source-repository.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/source-repository.html b/hbase-annotations/source-repository.html
index 41cb984..917e671 100644
--- a/hbase-annotations/source-repository.html
+++ b/hbase-annotations/source-repository.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-annotations/team-list.html
----------------------------------------------------------------------
diff --git a/hbase-annotations/team-list.html b/hbase-annotations/team-list.html
index 1eed6fc..3442654 100644
--- a/hbase-annotations/team-list.html
+++ b/hbase-annotations/team-list.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Annotations">Apache HBase - Annotations</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/dependencies.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependencies.html b/hbase-archetypes/dependencies.html
index b33c2ca..473b667 100644
--- a/hbase-archetypes/dependencies.html
+++ b/hbase-archetypes/dependencies.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/dependency-convergence.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-convergence.html b/hbase-archetypes/dependency-convergence.html
index 4810b49..c927542 100644
--- a/hbase-archetypes/dependency-convergence.html
+++ b/hbase-archetypes/dependency-convergence.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/hbase-archetypes/dependency-info.html
----------------------------------------------------------------------
diff --git a/hbase-archetypes/dependency-info.html b/hbase-archetypes/dependency-info.html
index b9b66c6..650524f 100644
--- a/hbase-archetypes/dependency-info.html
+++ b/hbase-archetypes/dependency-info.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-22 -->
+<!-- Generated by Apache Maven Doxia Site Renderer 1.6 at 2016-02-23 -->
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
@@ -10,7 +10,7 @@
       @import url("./css/site.css");
     </style>
     <link rel="stylesheet" href="./css/print.css" type="text/css" media="print" />
-    <meta name="Date-Revision-yyyymmdd" content="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
         
         </head>
@@ -27,7 +27,7 @@
             
                     
                 <div class="xleft">
-        <span id="publishDate">Last Published: 2016-02-22</span>
+        <span id="publishDate">Last Published: 2016-02-23</span>
                   &nbsp;| <span id="projectVersion">Version: 2.0.0-SNAPSHOT</span>
                       </div>
             <div class="xright">                    <a href="./" title="Apache HBase - Archetypes">Apache HBase - Archetypes</a>


[23/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
----------------------------------------------------------------------
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
index 1b54cf8..195ffb2 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.FlushWorker.html
@@ -202,474 +202,467 @@
 <span class="sourceLineNo">194</span>   * @return true if the request can be accepted by its corresponding buffer queue.<a name="line.194"></a>
 <span class="sourceLineNo">195</span>   */<a name="line.195"></a>
 <span class="sourceLineNo">196</span>  public boolean put(final TableName tableName, final Put put, int maxAttempts) {<a name="line.196"></a>
-<span class="sourceLineNo">197</span>    return _put(tableName, put, maxAttempts, false);<a name="line.197"></a>
-<span class="sourceLineNo">198</span>  }<a name="line.198"></a>
-<span class="sourceLineNo">199</span><a name="line.199"></a>
-<span class="sourceLineNo">200</span>  /**<a name="line.200"></a>
-<span class="sourceLineNo">201</span>   * Internal "put" which exposes a boolean flag to control whether or not the region location<a name="line.201"></a>
-<span class="sourceLineNo">202</span>   * cache should be reloaded when trying to queue the {@link Put}.<a name="line.202"></a>
-<span class="sourceLineNo">203</span>   * @param tableName Destination table for the Put<a name="line.203"></a>
-<span class="sourceLineNo">204</span>   * @param put The Put to send<a name="line.204"></a>
-<span class="sourceLineNo">205</span>   * @param maxAttempts Number of attempts to retry the {@code put}<a name="line.205"></a>
-<span class="sourceLineNo">206</span>   * @param reloadCache Should the region location cache be reloaded<a name="line.206"></a>
-<span class="sourceLineNo">207</span>   * @return true if the request was accepted in the queue, otherwise false<a name="line.207"></a>
-<span class="sourceLineNo">208</span>   */<a name="line.208"></a>
-<span class="sourceLineNo">209</span>  boolean _put(final TableName tableName, final Put put, int maxAttempts, boolean reloadCache) {<a name="line.209"></a>
-<span class="sourceLineNo">210</span>    if (maxAttempts &lt;= 0) {<a name="line.210"></a>
-<span class="sourceLineNo">211</span>      return false;<a name="line.211"></a>
-<span class="sourceLineNo">212</span>    }<a name="line.212"></a>
-<span class="sourceLineNo">213</span><a name="line.213"></a>
-<span class="sourceLineNo">214</span>    try {<a name="line.214"></a>
-<span class="sourceLineNo">215</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.215"></a>
-<span class="sourceLineNo">216</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.217"></a>
-<span class="sourceLineNo">218</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), reloadCache);<a name="line.218"></a>
-<span class="sourceLineNo">219</span>      if (loc != null) {<a name="line.219"></a>
-<span class="sourceLineNo">220</span>        // Add the put pair into its corresponding queue.<a name="line.220"></a>
-<span class="sourceLineNo">221</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.221"></a>
+<span class="sourceLineNo">197</span>    if (maxAttempts &lt;= 0) {<a name="line.197"></a>
+<span class="sourceLineNo">198</span>      return false;<a name="line.198"></a>
+<span class="sourceLineNo">199</span>    }<a name="line.199"></a>
+<span class="sourceLineNo">200</span><a name="line.200"></a>
+<span class="sourceLineNo">201</span>    try {<a name="line.201"></a>
+<span class="sourceLineNo">202</span>      HTable.validatePut(put, maxKeyValueSize);<a name="line.202"></a>
+<span class="sourceLineNo">203</span>      // Allow mocking to get at the connection, but don't expose the connection to users.<a name="line.203"></a>
+<span class="sourceLineNo">204</span>      ClusterConnection conn = (ClusterConnection) getConnection();<a name="line.204"></a>
+<span class="sourceLineNo">205</span>      // AsyncProcess in the FlushWorker should take care of refreshing the location cache<a name="line.205"></a>
+<span class="sourceLineNo">206</span>      // as necessary. We shouldn't have to do that here.<a name="line.206"></a>
+<span class="sourceLineNo">207</span>      HRegionLocation loc = conn.getRegionLocation(tableName, put.getRow(), false);<a name="line.207"></a>
+<span class="sourceLineNo">208</span>      if (loc != null) {<a name="line.208"></a>
+<span class="sourceLineNo">209</span>        // Add the put pair into its corresponding queue.<a name="line.209"></a>
+<span class="sourceLineNo">210</span>        LinkedBlockingQueue&lt;PutStatus&gt; queue = getQueue(loc);<a name="line.210"></a>
+<span class="sourceLineNo">211</span><a name="line.211"></a>
+<span class="sourceLineNo">212</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.212"></a>
+<span class="sourceLineNo">213</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.213"></a>
+<span class="sourceLineNo">214</span><a name="line.214"></a>
+<span class="sourceLineNo">215</span>        return queue.offer(s);<a name="line.215"></a>
+<span class="sourceLineNo">216</span>      }<a name="line.216"></a>
+<span class="sourceLineNo">217</span>    } catch (IOException e) {<a name="line.217"></a>
+<span class="sourceLineNo">218</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.218"></a>
+<span class="sourceLineNo">219</span>    }<a name="line.219"></a>
+<span class="sourceLineNo">220</span>    return false;<a name="line.220"></a>
+<span class="sourceLineNo">221</span>  }<a name="line.221"></a>
 <span class="sourceLineNo">222</span><a name="line.222"></a>
-<span class="sourceLineNo">223</span>        // Generate a MultiPutStatus object and offer it into the queue<a name="line.223"></a>
-<span class="sourceLineNo">224</span>        PutStatus s = new PutStatus(loc.getRegionInfo(), put, maxAttempts);<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>        return queue.offer(s);<a name="line.226"></a>
-<span class="sourceLineNo">227</span>      }<a name="line.227"></a>
-<span class="sourceLineNo">228</span>    } catch (IOException e) {<a name="line.228"></a>
-<span class="sourceLineNo">229</span>      LOG.debug("Cannot process the put " + put, e);<a name="line.229"></a>
-<span class="sourceLineNo">230</span>    }<a name="line.230"></a>
-<span class="sourceLineNo">231</span>    return false;<a name="line.231"></a>
-<span class="sourceLineNo">232</span>  }<a name="line.232"></a>
-<span class="sourceLineNo">233</span><a name="line.233"></a>
-<span class="sourceLineNo">234</span>  /**<a name="line.234"></a>
-<span class="sourceLineNo">235</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.235"></a>
-<span class="sourceLineNo">236</span>   */<a name="line.236"></a>
-<span class="sourceLineNo">237</span>  @Deprecated<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.238"></a>
-<span class="sourceLineNo">239</span>    return put(TableName.valueOf(tableName), put, retry);<a name="line.239"></a>
-<span class="sourceLineNo">240</span>  }<a name="line.240"></a>
-<span class="sourceLineNo">241</span><a name="line.241"></a>
-<span class="sourceLineNo">242</span>  /**<a name="line.242"></a>
-<span class="sourceLineNo">243</span>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   */<a name="line.244"></a>
-<span class="sourceLineNo">245</span>  @Deprecated<a name="line.245"></a>
-<span class="sourceLineNo">246</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.246"></a>
-<span class="sourceLineNo">247</span>    return put(TableName.valueOf(tableName), put);<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  }<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * @return the current HTableMultiplexerStatus<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   */<a name="line.252"></a>
-<span class="sourceLineNo">253</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.253"></a>
-<span class="sourceLineNo">254</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  }<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  @VisibleForTesting<a name="line.257"></a>
-<span class="sourceLineNo">258</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.258"></a>
-<span class="sourceLineNo">259</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.259"></a>
-<span class="sourceLineNo">260</span>    if (worker == null) {<a name="line.260"></a>
-<span class="sourceLineNo">261</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.261"></a>
-<span class="sourceLineNo">262</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.262"></a>
-<span class="sourceLineNo">263</span>        if (worker == null) {<a name="line.263"></a>
-<span class="sourceLineNo">264</span>          // Create the flush worker<a name="line.264"></a>
-<span class="sourceLineNo">265</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.265"></a>
-<span class="sourceLineNo">266</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.266"></a>
-<span class="sourceLineNo">267</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.267"></a>
-<span class="sourceLineNo">268</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.268"></a>
-<span class="sourceLineNo">269</span>        }<a name="line.269"></a>
-<span class="sourceLineNo">270</span>      }<a name="line.270"></a>
-<span class="sourceLineNo">271</span>    }<a name="line.271"></a>
-<span class="sourceLineNo">272</span>    return worker.getQueue();<a name="line.272"></a>
-<span class="sourceLineNo">273</span>  }<a name="line.273"></a>
-<span class="sourceLineNo">274</span><a name="line.274"></a>
-<span class="sourceLineNo">275</span>  @VisibleForTesting<a name="line.275"></a>
-<span class="sourceLineNo">276</span>  ClusterConnection getConnection() {<a name="line.276"></a>
-<span class="sourceLineNo">277</span>    return this.conn;<a name="line.277"></a>
-<span class="sourceLineNo">278</span>  }<a name="line.278"></a>
-<span class="sourceLineNo">279</span><a name="line.279"></a>
-<span class="sourceLineNo">280</span>  /**<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.281"></a>
-<span class="sourceLineNo">282</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.282"></a>
-<span class="sourceLineNo">283</span>   * in total or on per region server basis.<a name="line.283"></a>
-<span class="sourceLineNo">284</span>   */<a name="line.284"></a>
-<span class="sourceLineNo">285</span>  @InterfaceAudience.Public<a name="line.285"></a>
-<span class="sourceLineNo">286</span>  @InterfaceStability.Evolving<a name="line.286"></a>
-<span class="sourceLineNo">287</span>  public static class HTableMultiplexerStatus {<a name="line.287"></a>
-<span class="sourceLineNo">288</span>    private long totalFailedPutCounter;<a name="line.288"></a>
-<span class="sourceLineNo">289</span>    private long totalBufferedPutCounter;<a name="line.289"></a>
-<span class="sourceLineNo">290</span>    private long maxLatency;<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    private long overallAverageLatency;<a name="line.291"></a>
-<span class="sourceLineNo">292</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.292"></a>
-<span class="sourceLineNo">293</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.293"></a>
-<span class="sourceLineNo">294</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.294"></a>
-<span class="sourceLineNo">295</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.295"></a>
-<span class="sourceLineNo">296</span><a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public HTableMultiplexerStatus(<a name="line.297"></a>
-<span class="sourceLineNo">298</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.298"></a>
-<span class="sourceLineNo">299</span>      this.totalBufferedPutCounter = 0;<a name="line.299"></a>
-<span class="sourceLineNo">300</span>      this.totalFailedPutCounter = 0;<a name="line.300"></a>
-<span class="sourceLineNo">301</span>      this.maxLatency = 0;<a name="line.301"></a>
-<span class="sourceLineNo">302</span>      this.overallAverageLatency = 0;<a name="line.302"></a>
-<span class="sourceLineNo">303</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.303"></a>
-<span class="sourceLineNo">304</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.initialize(serverToFlushWorkerMap);<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 void initialize(<a name="line.310"></a>
-<span class="sourceLineNo">311</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.311"></a>
-<span class="sourceLineNo">312</span>      if (serverToFlushWorkerMap == null) {<a name="line.312"></a>
-<span class="sourceLineNo">313</span>        return;<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>      long averageCalcSum = 0;<a name="line.316"></a>
-<span class="sourceLineNo">317</span>      int averageCalcCount = 0;<a name="line.317"></a>
-<span class="sourceLineNo">318</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.318"></a>
-<span class="sourceLineNo">319</span>          .entrySet()) {<a name="line.319"></a>
-<span class="sourceLineNo">320</span>        HRegionLocation addr = entry.getKey();<a name="line.320"></a>
-<span class="sourceLineNo">321</span>        FlushWorker worker = entry.getValue();<a name="line.321"></a>
-<span class="sourceLineNo">322</span><a name="line.322"></a>
-<span class="sourceLineNo">323</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.323"></a>
-<span class="sourceLineNo">324</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.324"></a>
-<span class="sourceLineNo">325</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.325"></a>
-<span class="sourceLineNo">326</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.326"></a>
-<span class="sourceLineNo">327</span>        // Get sum and count pieces separately to compute overall average<a name="line.327"></a>
-<span class="sourceLineNo">328</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.328"></a>
-<span class="sourceLineNo">329</span>            .getComponents();<a name="line.329"></a>
-<span class="sourceLineNo">330</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.330"></a>
-<span class="sourceLineNo">331</span><a name="line.331"></a>
-<span class="sourceLineNo">332</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.332"></a>
-<span class="sourceLineNo">333</span>        this.totalFailedPutCounter += failedCounter;<a name="line.333"></a>
-<span class="sourceLineNo">334</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.334"></a>
-<span class="sourceLineNo">335</span>          this.maxLatency = serverMaxLatency;<a name="line.335"></a>
-<span class="sourceLineNo">336</span>        }<a name="line.336"></a>
-<span class="sourceLineNo">337</span>        averageCalcSum += averageComponents.getKey();<a name="line.337"></a>
-<span class="sourceLineNo">338</span>        averageCalcCount += averageComponents.getValue();<a name="line.338"></a>
-<span class="sourceLineNo">339</span><a name="line.339"></a>
-<span class="sourceLineNo">340</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.340"></a>
-<span class="sourceLineNo">341</span>            bufferedCounter);<a name="line.341"></a>
-<span class="sourceLineNo">342</span>        this.serverToFailedCounterMap<a name="line.342"></a>
-<span class="sourceLineNo">343</span>            .put(addr.getHostnamePort(),<a name="line.343"></a>
-<span class="sourceLineNo">344</span>            failedCounter);<a name="line.344"></a>
-<span class="sourceLineNo">345</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.345"></a>
-<span class="sourceLineNo">346</span>            serverAvgLatency);<a name="line.346"></a>
-<span class="sourceLineNo">347</span>        this.serverToMaxLatencyMap<a name="line.347"></a>
-<span class="sourceLineNo">348</span>            .put(addr.getHostnamePort(),<a name="line.348"></a>
-<span class="sourceLineNo">349</span>            serverMaxLatency);<a name="line.349"></a>
-<span class="sourceLineNo">350</span>      }<a name="line.350"></a>
-<span class="sourceLineNo">351</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.351"></a>
-<span class="sourceLineNo">352</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.355"></a>
-<span class="sourceLineNo">356</span>      return this.totalBufferedPutCounter;<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    }<a name="line.357"></a>
-<span class="sourceLineNo">358</span><a name="line.358"></a>
-<span class="sourceLineNo">359</span>    public long getTotalFailedCounter() {<a name="line.359"></a>
-<span class="sourceLineNo">360</span>      return this.totalFailedPutCounter;<a name="line.360"></a>
-<span class="sourceLineNo">361</span>    }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>    public long getMaxLatency() {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>      return this.maxLatency;<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    }<a name="line.365"></a>
-<span class="sourceLineNo">366</span><a name="line.366"></a>
-<span class="sourceLineNo">367</span>    public long getOverallAverageLatency() {<a name="line.367"></a>
-<span class="sourceLineNo">368</span>      return this.overallAverageLatency;<a name="line.368"></a>
-<span class="sourceLineNo">369</span>    }<a name="line.369"></a>
-<span class="sourceLineNo">370</span><a name="line.370"></a>
-<span class="sourceLineNo">371</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.371"></a>
-<span class="sourceLineNo">372</span>      return this.serverToBufferedCounterMap;<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    }<a name="line.373"></a>
-<span class="sourceLineNo">374</span><a name="line.374"></a>
-<span class="sourceLineNo">375</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.375"></a>
-<span class="sourceLineNo">376</span>      return this.serverToFailedCounterMap;<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    }<a name="line.377"></a>
-<span class="sourceLineNo">378</span><a name="line.378"></a>
-<span class="sourceLineNo">379</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.379"></a>
-<span class="sourceLineNo">380</span>      return this.serverToMaxLatencyMap;<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    }<a name="line.381"></a>
+<span class="sourceLineNo">223</span>  /**<a name="line.223"></a>
+<span class="sourceLineNo">224</span>   * @deprecated Use {@link #put(TableName, Put) } instead.<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   */<a name="line.225"></a>
+<span class="sourceLineNo">226</span>  @Deprecated<a name="line.226"></a>
+<span class="sourceLineNo">227</span>  public boolean put(final byte[] tableName, final Put put, int retry) {<a name="line.227"></a>
+<span class="sourceLineNo">228</span>    return put(TableName.valueOf(tableName), put, retry);<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>   * @deprecated Use {@link #put(TableName, Put)} instead.<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   */<a name="line.233"></a>
+<span class="sourceLineNo">234</span>  @Deprecated<a name="line.234"></a>
+<span class="sourceLineNo">235</span>  public boolean put(final byte[] tableName, Put put) {<a name="line.235"></a>
+<span class="sourceLineNo">236</span>    return put(TableName.valueOf(tableName), put);<a name="line.236"></a>
+<span class="sourceLineNo">237</span>  }<a name="line.237"></a>
+<span class="sourceLineNo">238</span><a name="line.238"></a>
+<span class="sourceLineNo">239</span>  /**<a name="line.239"></a>
+<span class="sourceLineNo">240</span>   * @return the current HTableMultiplexerStatus<a name="line.240"></a>
+<span class="sourceLineNo">241</span>   */<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  public HTableMultiplexerStatus getHTableMultiplexerStatus() {<a name="line.242"></a>
+<span class="sourceLineNo">243</span>    return new HTableMultiplexerStatus(serverToFlushWorkerMap);<a name="line.243"></a>
+<span class="sourceLineNo">244</span>  }<a name="line.244"></a>
+<span class="sourceLineNo">245</span><a name="line.245"></a>
+<span class="sourceLineNo">246</span>  @VisibleForTesting<a name="line.246"></a>
+<span class="sourceLineNo">247</span>  LinkedBlockingQueue&lt;PutStatus&gt; getQueue(HRegionLocation addr) {<a name="line.247"></a>
+<span class="sourceLineNo">248</span>    FlushWorker worker = serverToFlushWorkerMap.get(addr);<a name="line.248"></a>
+<span class="sourceLineNo">249</span>    if (worker == null) {<a name="line.249"></a>
+<span class="sourceLineNo">250</span>      synchronized (this.serverToFlushWorkerMap) {<a name="line.250"></a>
+<span class="sourceLineNo">251</span>        worker = serverToFlushWorkerMap.get(addr);<a name="line.251"></a>
+<span class="sourceLineNo">252</span>        if (worker == null) {<a name="line.252"></a>
+<span class="sourceLineNo">253</span>          // Create the flush worker<a name="line.253"></a>
+<span class="sourceLineNo">254</span>          worker = new FlushWorker(workerConf, this.conn, addr, this,<a name="line.254"></a>
+<span class="sourceLineNo">255</span>              perRegionServerBufferQueueSize, pool, executor);<a name="line.255"></a>
+<span class="sourceLineNo">256</span>          this.serverToFlushWorkerMap.put(addr, worker);<a name="line.256"></a>
+<span class="sourceLineNo">257</span>          executor.scheduleAtFixedRate(worker, flushPeriod, flushPeriod, TimeUnit.MILLISECONDS);<a name="line.257"></a>
+<span class="sourceLineNo">258</span>        }<a name="line.258"></a>
+<span class="sourceLineNo">259</span>      }<a name="line.259"></a>
+<span class="sourceLineNo">260</span>    }<a name="line.260"></a>
+<span class="sourceLineNo">261</span>    return worker.getQueue();<a name="line.261"></a>
+<span class="sourceLineNo">262</span>  }<a name="line.262"></a>
+<span class="sourceLineNo">263</span><a name="line.263"></a>
+<span class="sourceLineNo">264</span>  @VisibleForTesting<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  ClusterConnection getConnection() {<a name="line.265"></a>
+<span class="sourceLineNo">266</span>    return this.conn;<a name="line.266"></a>
+<span class="sourceLineNo">267</span>  }<a name="line.267"></a>
+<span class="sourceLineNo">268</span><a name="line.268"></a>
+<span class="sourceLineNo">269</span>  /**<a name="line.269"></a>
+<span class="sourceLineNo">270</span>   * HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.<a name="line.270"></a>
+<span class="sourceLineNo">271</span>   * report the number of buffered requests and the number of the failed (dropped) requests<a name="line.271"></a>
+<span class="sourceLineNo">272</span>   * in total or on per region server basis.<a name="line.272"></a>
+<span class="sourceLineNo">273</span>   */<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  @InterfaceAudience.Public<a name="line.274"></a>
+<span class="sourceLineNo">275</span>  @InterfaceStability.Evolving<a name="line.275"></a>
+<span class="sourceLineNo">276</span>  public static class HTableMultiplexerStatus {<a name="line.276"></a>
+<span class="sourceLineNo">277</span>    private long totalFailedPutCounter;<a name="line.277"></a>
+<span class="sourceLineNo">278</span>    private long totalBufferedPutCounter;<a name="line.278"></a>
+<span class="sourceLineNo">279</span>    private long maxLatency;<a name="line.279"></a>
+<span class="sourceLineNo">280</span>    private long overallAverageLatency;<a name="line.280"></a>
+<span class="sourceLineNo">281</span>    private Map&lt;String, Long&gt; serverToFailedCounterMap;<a name="line.281"></a>
+<span class="sourceLineNo">282</span>    private Map&lt;String, Long&gt; serverToBufferedCounterMap;<a name="line.282"></a>
+<span class="sourceLineNo">283</span>    private Map&lt;String, Long&gt; serverToAverageLatencyMap;<a name="line.283"></a>
+<span class="sourceLineNo">284</span>    private Map&lt;String, Long&gt; serverToMaxLatencyMap;<a name="line.284"></a>
+<span class="sourceLineNo">285</span><a name="line.285"></a>
+<span class="sourceLineNo">286</span>    public HTableMultiplexerStatus(<a name="line.286"></a>
+<span class="sourceLineNo">287</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.287"></a>
+<span class="sourceLineNo">288</span>      this.totalBufferedPutCounter = 0;<a name="line.288"></a>
+<span class="sourceLineNo">289</span>      this.totalFailedPutCounter = 0;<a name="line.289"></a>
+<span class="sourceLineNo">290</span>      this.maxLatency = 0;<a name="line.290"></a>
+<span class="sourceLineNo">291</span>      this.overallAverageLatency = 0;<a name="line.291"></a>
+<span class="sourceLineNo">292</span>      this.serverToBufferedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.292"></a>
+<span class="sourceLineNo">293</span>      this.serverToFailedCounterMap = new HashMap&lt;String, Long&gt;();<a name="line.293"></a>
+<span class="sourceLineNo">294</span>      this.serverToAverageLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.294"></a>
+<span class="sourceLineNo">295</span>      this.serverToMaxLatencyMap = new HashMap&lt;String, Long&gt;();<a name="line.295"></a>
+<span class="sourceLineNo">296</span>      this.initialize(serverToFlushWorkerMap);<a name="line.296"></a>
+<span class="sourceLineNo">297</span>    }<a name="line.297"></a>
+<span class="sourceLineNo">298</span><a name="line.298"></a>
+<span class="sourceLineNo">299</span>    private void initialize(<a name="line.299"></a>
+<span class="sourceLineNo">300</span>        Map&lt;HRegionLocation, FlushWorker&gt; serverToFlushWorkerMap) {<a name="line.300"></a>
+<span class="sourceLineNo">301</span>      if (serverToFlushWorkerMap == null) {<a name="line.301"></a>
+<span class="sourceLineNo">302</span>        return;<a name="line.302"></a>
+<span class="sourceLineNo">303</span>      }<a name="line.303"></a>
+<span class="sourceLineNo">304</span><a name="line.304"></a>
+<span class="sourceLineNo">305</span>      long averageCalcSum = 0;<a name="line.305"></a>
+<span class="sourceLineNo">306</span>      int averageCalcCount = 0;<a name="line.306"></a>
+<span class="sourceLineNo">307</span>      for (Map.Entry&lt;HRegionLocation, FlushWorker&gt; entry : serverToFlushWorkerMap<a name="line.307"></a>
+<span class="sourceLineNo">308</span>          .entrySet()) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>        HRegionLocation addr = entry.getKey();<a name="line.309"></a>
+<span class="sourceLineNo">310</span>        FlushWorker worker = entry.getValue();<a name="line.310"></a>
+<span class="sourceLineNo">311</span><a name="line.311"></a>
+<span class="sourceLineNo">312</span>        long bufferedCounter = worker.getTotalBufferedCount();<a name="line.312"></a>
+<span class="sourceLineNo">313</span>        long failedCounter = worker.getTotalFailedCount();<a name="line.313"></a>
+<span class="sourceLineNo">314</span>        long serverMaxLatency = worker.getMaxLatency();<a name="line.314"></a>
+<span class="sourceLineNo">315</span>        AtomicAverageCounter averageCounter = worker.getAverageLatencyCounter();<a name="line.315"></a>
+<span class="sourceLineNo">316</span>        // Get sum and count pieces separately to compute overall average<a name="line.316"></a>
+<span class="sourceLineNo">317</span>        SimpleEntry&lt;Long, Integer&gt; averageComponents = averageCounter<a name="line.317"></a>
+<span class="sourceLineNo">318</span>            .getComponents();<a name="line.318"></a>
+<span class="sourceLineNo">319</span>        long serverAvgLatency = averageCounter.getAndReset();<a name="line.319"></a>
+<span class="sourceLineNo">320</span><a name="line.320"></a>
+<span class="sourceLineNo">321</span>        this.totalBufferedPutCounter += bufferedCounter;<a name="line.321"></a>
+<span class="sourceLineNo">322</span>        this.totalFailedPutCounter += failedCounter;<a name="line.322"></a>
+<span class="sourceLineNo">323</span>        if (serverMaxLatency &gt; this.maxLatency) {<a name="line.323"></a>
+<span class="sourceLineNo">324</span>          this.maxLatency = serverMaxLatency;<a name="line.324"></a>
+<span class="sourceLineNo">325</span>        }<a name="line.325"></a>
+<span class="sourceLineNo">326</span>        averageCalcSum += averageComponents.getKey();<a name="line.326"></a>
+<span class="sourceLineNo">327</span>        averageCalcCount += averageComponents.getValue();<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>        this.serverToBufferedCounterMap.put(addr.getHostnamePort(),<a name="line.329"></a>
+<span class="sourceLineNo">330</span>            bufferedCounter);<a name="line.330"></a>
+<span class="sourceLineNo">331</span>        this.serverToFailedCounterMap<a name="line.331"></a>
+<span class="sourceLineNo">332</span>            .put(addr.getHostnamePort(),<a name="line.332"></a>
+<span class="sourceLineNo">333</span>            failedCounter);<a name="line.333"></a>
+<span class="sourceLineNo">334</span>        this.serverToAverageLatencyMap.put(addr.getHostnamePort(),<a name="line.334"></a>
+<span class="sourceLineNo">335</span>            serverAvgLatency);<a name="line.335"></a>
+<span class="sourceLineNo">336</span>        this.serverToMaxLatencyMap<a name="line.336"></a>
+<span class="sourceLineNo">337</span>            .put(addr.getHostnamePort(),<a name="line.337"></a>
+<span class="sourceLineNo">338</span>            serverMaxLatency);<a name="line.338"></a>
+<span class="sourceLineNo">339</span>      }<a name="line.339"></a>
+<span class="sourceLineNo">340</span>      this.overallAverageLatency = averageCalcCount != 0 ? averageCalcSum<a name="line.340"></a>
+<span class="sourceLineNo">341</span>          / averageCalcCount : 0;<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>    public long getTotalBufferedCounter() {<a name="line.344"></a>
+<span class="sourceLineNo">345</span>      return this.totalBufferedPutCounter;<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>    public long getTotalFailedCounter() {<a name="line.348"></a>
+<span class="sourceLineNo">349</span>      return this.totalFailedPutCounter;<a name="line.349"></a>
+<span class="sourceLineNo">350</span>    }<a name="line.350"></a>
+<span class="sourceLineNo">351</span><a name="line.351"></a>
+<span class="sourceLineNo">352</span>    public long getMaxLatency() {<a name="line.352"></a>
+<span class="sourceLineNo">353</span>      return this.maxLatency;<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>    public long getOverallAverageLatency() {<a name="line.356"></a>
+<span class="sourceLineNo">357</span>      return this.overallAverageLatency;<a name="line.357"></a>
+<span class="sourceLineNo">358</span>    }<a name="line.358"></a>
+<span class="sourceLineNo">359</span><a name="line.359"></a>
+<span class="sourceLineNo">360</span>    public Map&lt;String, Long&gt; getBufferedCounterForEachRegionServer() {<a name="line.360"></a>
+<span class="sourceLineNo">361</span>      return this.serverToBufferedCounterMap;<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    }<a name="line.362"></a>
+<span class="sourceLineNo">363</span><a name="line.363"></a>
+<span class="sourceLineNo">364</span>    public Map&lt;String, Long&gt; getFailedCounterForEachRegionServer() {<a name="line.364"></a>
+<span class="sourceLineNo">365</span>      return this.serverToFailedCounterMap;<a name="line.365"></a>
+<span class="sourceLineNo">366</span>    }<a name="line.366"></a>
+<span class="sourceLineNo">367</span><a name="line.367"></a>
+<span class="sourceLineNo">368</span>    public Map&lt;String, Long&gt; getMaxLatencyForEachRegionServer() {<a name="line.368"></a>
+<span class="sourceLineNo">369</span>      return this.serverToMaxLatencyMap;<a name="line.369"></a>
+<span class="sourceLineNo">370</span>    }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.372"></a>
+<span class="sourceLineNo">373</span>      return this.serverToAverageLatencyMap;<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    }<a name="line.374"></a>
+<span class="sourceLineNo">375</span>  }<a name="line.375"></a>
+<span class="sourceLineNo">376</span><a name="line.376"></a>
+<span class="sourceLineNo">377</span>  @VisibleForTesting<a name="line.377"></a>
+<span class="sourceLineNo">378</span>  static class PutStatus {<a name="line.378"></a>
+<span class="sourceLineNo">379</span>    final HRegionInfo regionInfo;<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    final Put put;<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    final int maxAttempCount;<a name="line.381"></a>
 <span class="sourceLineNo">382</span><a name="line.382"></a>
-<span class="sourceLineNo">383</span>    public Map&lt;String, Long&gt; getAverageLatencyForEachRegionServer() {<a name="line.383"></a>
-<span class="sourceLineNo">384</span>      return this.serverToAverageLatencyMap;<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    }<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  @VisibleForTesting<a name="line.388"></a>
-<span class="sourceLineNo">389</span>  static class PutStatus {<a name="line.389"></a>
-<span class="sourceLineNo">390</span>    final HRegionInfo regionInfo;<a name="line.390"></a>
-<span class="sourceLineNo">391</span>    final Put put;<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    final int maxAttempCount;<a name="line.392"></a>
-<span class="sourceLineNo">393</span><a name="line.393"></a>
-<span class="sourceLineNo">394</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.394"></a>
-<span class="sourceLineNo">395</span>      this.regionInfo = regionInfo;<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      this.put = put;<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      this.maxAttempCount = maxAttempCount;<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><a name="line.400"></a>
-<span class="sourceLineNo">401</span>  /**<a name="line.401"></a>
-<span class="sourceLineNo">402</span>   * Helper to count the average over an interval until reset.<a name="line.402"></a>
-<span class="sourceLineNo">403</span>   */<a name="line.403"></a>
-<span class="sourceLineNo">404</span>  private static class AtomicAverageCounter {<a name="line.404"></a>
-<span class="sourceLineNo">405</span>    private long sum;<a name="line.405"></a>
-<span class="sourceLineNo">406</span>    private int count;<a name="line.406"></a>
+<span class="sourceLineNo">383</span>    public PutStatus(HRegionInfo regionInfo, Put put, int maxAttempCount) {<a name="line.383"></a>
+<span class="sourceLineNo">384</span>      this.regionInfo = regionInfo;<a name="line.384"></a>
+<span class="sourceLineNo">385</span>      this.put = put;<a name="line.385"></a>
+<span class="sourceLineNo">386</span>      this.maxAttempCount = maxAttempCount;<a name="line.386"></a>
+<span class="sourceLineNo">387</span>    }<a name="line.387"></a>
+<span class="sourceLineNo">388</span>  }<a name="line.388"></a>
+<span class="sourceLineNo">389</span><a name="line.389"></a>
+<span class="sourceLineNo">390</span>  /**<a name="line.390"></a>
+<span class="sourceLineNo">391</span>   * Helper to count the average over an interval until reset.<a name="line.391"></a>
+<span class="sourceLineNo">392</span>   */<a name="line.392"></a>
+<span class="sourceLineNo">393</span>  private static class AtomicAverageCounter {<a name="line.393"></a>
+<span class="sourceLineNo">394</span>    private long sum;<a name="line.394"></a>
+<span class="sourceLineNo">395</span>    private int count;<a name="line.395"></a>
+<span class="sourceLineNo">396</span><a name="line.396"></a>
+<span class="sourceLineNo">397</span>    public AtomicAverageCounter() {<a name="line.397"></a>
+<span class="sourceLineNo">398</span>      this.sum = 0L;<a name="line.398"></a>
+<span class="sourceLineNo">399</span>      this.count = 0;<a name="line.399"></a>
+<span class="sourceLineNo">400</span>    }<a name="line.400"></a>
+<span class="sourceLineNo">401</span><a name="line.401"></a>
+<span class="sourceLineNo">402</span>    public synchronized long getAndReset() {<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      long result = this.get();<a name="line.403"></a>
+<span class="sourceLineNo">404</span>      this.reset();<a name="line.404"></a>
+<span class="sourceLineNo">405</span>      return result;<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    }<a name="line.406"></a>
 <span class="sourceLineNo">407</span><a name="line.407"></a>
-<span class="sourceLineNo">408</span>    public AtomicAverageCounter() {<a name="line.408"></a>
-<span class="sourceLineNo">409</span>      this.sum = 0L;<a name="line.409"></a>
-<span class="sourceLineNo">410</span>      this.count = 0;<a name="line.410"></a>
-<span class="sourceLineNo">411</span>    }<a name="line.411"></a>
-<span class="sourceLineNo">412</span><a name="line.412"></a>
-<span class="sourceLineNo">413</span>    public synchronized long getAndReset() {<a name="line.413"></a>
-<span class="sourceLineNo">414</span>      long result = this.get();<a name="line.414"></a>
-<span class="sourceLineNo">415</span>      this.reset();<a name="line.415"></a>
-<span class="sourceLineNo">416</span>      return result;<a name="line.416"></a>
+<span class="sourceLineNo">408</span>    public synchronized long get() {<a name="line.408"></a>
+<span class="sourceLineNo">409</span>      if (this.count == 0) {<a name="line.409"></a>
+<span class="sourceLineNo">410</span>        return 0;<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      }<a name="line.411"></a>
+<span class="sourceLineNo">412</span>      return this.sum / this.count;<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>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<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>    public synchronized long get() {<a name="line.419"></a>
-<span class="sourceLineNo">420</span>      if (this.count == 0) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>        return 0;<a name="line.421"></a>
-<span class="sourceLineNo">422</span>      }<a name="line.422"></a>
-<span class="sourceLineNo">423</span>      return this.sum / this.count;<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    }<a name="line.424"></a>
-<span class="sourceLineNo">425</span><a name="line.425"></a>
-<span class="sourceLineNo">426</span>    public synchronized SimpleEntry&lt;Long, Integer&gt; getComponents() {<a name="line.426"></a>
-<span class="sourceLineNo">427</span>      return new SimpleEntry&lt;Long, Integer&gt;(sum, count);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    }<a name="line.428"></a>
+<span class="sourceLineNo">419</span>    public synchronized void reset() {<a name="line.419"></a>
+<span class="sourceLineNo">420</span>      this.sum = 0L;<a name="line.420"></a>
+<span class="sourceLineNo">421</span>      this.count = 0;<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>    public synchronized void add(long value) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      this.sum += value;<a name="line.425"></a>
+<span class="sourceLineNo">426</span>      this.count++;<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>  }<a name="line.428"></a>
 <span class="sourceLineNo">429</span><a name="line.429"></a>
-<span class="sourceLineNo">430</span>    public synchronized void reset() {<a name="line.430"></a>
-<span class="sourceLineNo">431</span>      this.sum = 0L;<a name="line.431"></a>
-<span class="sourceLineNo">432</span>      this.count = 0;<a name="line.432"></a>
-<span class="sourceLineNo">433</span>    }<a name="line.433"></a>
-<span class="sourceLineNo">434</span><a name="line.434"></a>
-<span class="sourceLineNo">435</span>    public synchronized void add(long value) {<a name="line.435"></a>
-<span class="sourceLineNo">436</span>      this.sum += value;<a name="line.436"></a>
-<span class="sourceLineNo">437</span>      this.count++;<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>  @VisibleForTesting<a name="line.441"></a>
-<span class="sourceLineNo">442</span>  static class FlushWorker implements Runnable {<a name="line.442"></a>
-<span class="sourceLineNo">443</span>    private final HRegionLocation addr;<a name="line.443"></a>
-<span class="sourceLineNo">444</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.444"></a>
-<span class="sourceLineNo">445</span>    private final HTableMultiplexer multiplexer;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.446"></a>
-<span class="sourceLineNo">447</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.447"></a>
-<span class="sourceLineNo">448</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    private final AsyncProcess ap;<a name="line.451"></a>
-<span class="sourceLineNo">452</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.452"></a>
-<span class="sourceLineNo">453</span>    private final ScheduledExecutorService executor;<a name="line.453"></a>
-<span class="sourceLineNo">454</span>    private final int maxRetryInQueue;<a name="line.454"></a>
-<span class="sourceLineNo">455</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.455"></a>
-<span class="sourceLineNo">456</span><a name="line.456"></a>
-<span class="sourceLineNo">457</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.457"></a>
-<span class="sourceLineNo">458</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.458"></a>
-<span class="sourceLineNo">459</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      this.addr = addr;<a name="line.460"></a>
-<span class="sourceLineNo">461</span>      this.multiplexer = htableMultiplexer;<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.462"></a>
-<span class="sourceLineNo">463</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.463"></a>
-<span class="sourceLineNo">464</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.465"></a>
-<span class="sourceLineNo">466</span>      this.executor = executor;<a name="line.466"></a>
-<span class="sourceLineNo">467</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    }<a name="line.468"></a>
-<span class="sourceLineNo">469</span><a name="line.469"></a>
-<span class="sourceLineNo">470</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.470"></a>
-<span class="sourceLineNo">471</span>      return this.queue;<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    }<a name="line.472"></a>
-<span class="sourceLineNo">473</span><a name="line.473"></a>
-<span class="sourceLineNo">474</span>    public long getTotalFailedCount() {<a name="line.474"></a>
-<span class="sourceLineNo">475</span>      return totalFailedPutCount.get();<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    }<a name="line.476"></a>
-<span class="sourceLineNo">477</span><a name="line.477"></a>
-<span class="sourceLineNo">478</span>    public long getTotalBufferedCount() {<a name="line.478"></a>
-<span class="sourceLineNo">479</span>      return queue.size() + currentProcessingCount.get();<a name="line.479"></a>
-<span class="sourceLineNo">480</span>    }<a name="line.480"></a>
-<span class="sourceLineNo">481</span><a name="line.481"></a>
-<span class="sourceLineNo">482</span>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.482"></a>
-<span class="sourceLineNo">483</span>      return this.averageLatency;<a name="line.483"></a>
-<span class="sourceLineNo">484</span>    }<a name="line.484"></a>
-<span class="sourceLineNo">485</span><a name="line.485"></a>
-<span class="sourceLineNo">486</span>    public long getMaxLatency() {<a name="line.486"></a>
-<span class="sourceLineNo">487</span>      return this.maxLatency.getAndSet(0);<a name="line.487"></a>
-<span class="sourceLineNo">488</span>    }<a name="line.488"></a>
-<span class="sourceLineNo">489</span><a name="line.489"></a>
-<span class="sourceLineNo">490</span>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.490"></a>
-<span class="sourceLineNo">491</span>      // Decrease the retry count<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.492"></a>
-<span class="sourceLineNo">493</span><a name="line.493"></a>
-<span class="sourceLineNo">494</span>      if (retryCount &lt;= 0) {<a name="line.494"></a>
-<span class="sourceLineNo">495</span>        // Update the failed counter and no retry any more.<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return false;<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
+<span class="sourceLineNo">430</span>  @VisibleForTesting<a name="line.430"></a>
+<span class="sourceLineNo">431</span>  static class FlushWorker implements Runnable {<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    private final HRegionLocation addr;<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    private final LinkedBlockingQueue&lt;PutStatus&gt; queue;<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    private final HTableMultiplexer multiplexer;<a name="line.434"></a>
+<span class="sourceLineNo">435</span>    private final AtomicLong totalFailedPutCount = new AtomicLong(0);<a name="line.435"></a>
+<span class="sourceLineNo">436</span>    private final AtomicInteger currentProcessingCount = new AtomicInteger(0);<a name="line.436"></a>
+<span class="sourceLineNo">437</span>    private final AtomicAverageCounter averageLatency = new AtomicAverageCounter();<a name="line.437"></a>
+<span class="sourceLineNo">438</span>    private final AtomicLong maxLatency = new AtomicLong(0);<a name="line.438"></a>
+<span class="sourceLineNo">439</span><a name="line.439"></a>
+<span class="sourceLineNo">440</span>    private final AsyncProcess ap;<a name="line.440"></a>
+<span class="sourceLineNo">441</span>    private final List&lt;PutStatus&gt; processingList = new ArrayList&lt;&gt;();<a name="line.441"></a>
+<span class="sourceLineNo">442</span>    private final ScheduledExecutorService executor;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>    private final int maxRetryInQueue;<a name="line.443"></a>
+<span class="sourceLineNo">444</span>    private final AtomicInteger retryInQueue = new AtomicInteger(0);<a name="line.444"></a>
+<span class="sourceLineNo">445</span><a name="line.445"></a>
+<span class="sourceLineNo">446</span>    public FlushWorker(Configuration conf, ClusterConnection conn, HRegionLocation addr,<a name="line.446"></a>
+<span class="sourceLineNo">447</span>        HTableMultiplexer htableMultiplexer, int perRegionServerBufferQueueSize,<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        ExecutorService pool, ScheduledExecutorService executor) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>      this.addr = addr;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>      this.multiplexer = htableMultiplexer;<a name="line.450"></a>
+<span class="sourceLineNo">451</span>      this.queue = new LinkedBlockingQueue&lt;&gt;(perRegionServerBufferQueueSize);<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      RpcRetryingCallerFactory rpcCallerFactory = RpcRetryingCallerFactory.instantiate(conf);<a name="line.452"></a>
+<span class="sourceLineNo">453</span>      RpcControllerFactory rpcControllerFactory = RpcControllerFactory.instantiate(conf);<a name="line.453"></a>
+<span class="sourceLineNo">454</span>      this.ap = new AsyncProcess(conn, conf, pool, rpcCallerFactory, false, rpcControllerFactory);<a name="line.454"></a>
+<span class="sourceLineNo">455</span>      this.executor = executor;<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      this.maxRetryInQueue = conf.getInt(TABLE_MULTIPLEXER_MAX_RETRIES_IN_QUEUE, 10000);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>    }<a name="line.457"></a>
+<span class="sourceLineNo">458</span><a name="line.458"></a>
+<span class="sourceLineNo">459</span>    protected LinkedBlockingQueue&lt;PutStatus&gt; getQueue() {<a name="line.459"></a>
+<span class="sourceLineNo">460</span>      return this.queue;<a name="line.460"></a>
+<span class="sourceLineNo">461</span>    }<a name="line.461"></a>
+<span class="sourceLineNo">462</span><a name="line.462"></a>
+<span class="sourceLineNo">463</span>    public long getTotalFailedCount() {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      return totalFailedPutCount.get();<a name="line.464"></a>
+<span class="sourceLineNo">465</span>    }<a name="line.465"></a>
+<span class="sourceLineNo">466</span><a name="line.466"></a>
+<span class="sourceLineNo">467</span>    public long getTotalBufferedCount() {<a name="line.467"></a>
+<span class="sourceLineNo">468</span>      return queue.size() + currentProcessingCount.get();<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>    public AtomicAverageCounter getAverageLatencyCounter() {<a name="line.471"></a>
+<span class="sourceLineNo">472</span>      return this.averageLatency;<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>    public long getMaxLatency() {<a name="line.475"></a>
+<span class="sourceLineNo">476</span>      return this.maxLatency.getAndSet(0);<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>    boolean resubmitFailedPut(PutStatus ps, HRegionLocation oldLoc) throws IOException {<a name="line.479"></a>
+<span class="sourceLineNo">480</span>      // Decrease the retry count<a name="line.480"></a>
+<span class="sourceLineNo">481</span>      final int retryCount = ps.maxAttempCount - 1;<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>      if (retryCount &lt;= 0) {<a name="line.483"></a>
+<span class="sourceLineNo">484</span>        // Update the failed counter and no retry any more.<a name="line.484"></a>
+<span class="sourceLineNo">485</span>        return false;<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      }<a name="line.486"></a>
+<span class="sourceLineNo">487</span><a name="line.487"></a>
+<span class="sourceLineNo">488</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.488"></a>
+<span class="sourceLineNo">489</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.489"></a>
+<span class="sourceLineNo">490</span>        // Too many Puts in queue for resubmit, give up this<a name="line.490"></a>
+<span class="sourceLineNo">491</span>        getRetryInQueue().decrementAndGet();<a name="line.491"></a>
+<span class="sourceLineNo">492</span>        return false;<a name="line.492"></a>
+<span class="sourceLineNo">493</span>      }<a name="line.493"></a>
+<span class="sourceLineNo">494</span><a name="line.494"></a>
+<span class="sourceLineNo">495</span>      final Put failedPut = ps.put;<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.496"></a>
+<span class="sourceLineNo">497</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.497"></a>
 <span class="sourceLineNo">498</span><a name="line.498"></a>
-<span class="sourceLineNo">499</span>      int cnt = getRetryInQueue().incrementAndGet();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>      if (cnt &gt; getMaxRetryInQueue()) {<a name="line.500"></a>
-<span class="sourceLineNo">501</span>        // Too many Puts in queue for resubmit, give up this<a name="line.501"></a>
-<span class="sourceLineNo">502</span>        getRetryInQueue().decrementAndGet();<a name="line.502"></a>
-<span class="sourceLineNo">503</span>        return false;<a name="line.503"></a>
-<span class="sourceLineNo">504</span>      }<a name="line.504"></a>
-<span class="sourceLineNo">505</span><a name="line.505"></a>
-<span class="sourceLineNo">506</span>      final Put failedPut = ps.put;<a name="line.506"></a>
-<span class="sourceLineNo">507</span>      // The currentPut is failed. So get the table name for the currentPut.<a name="line.507"></a>
-<span class="sourceLineNo">508</span>      final TableName tableName = ps.regionInfo.getTable();<a name="line.508"></a>
-<span class="sourceLineNo">509</span><a name="line.509"></a>
-<span class="sourceLineNo">510</span>      long delayMs = getNextDelay(retryCount);<a name="line.510"></a>
-<span class="sourceLineNo">511</span>      if (LOG.isDebugEnabled()) {<a name="line.511"></a>
-<span class="sourceLineNo">512</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.512"></a>
-<span class="sourceLineNo">513</span>      }<a name="line.513"></a>
-<span class="sourceLineNo">514</span><a name="line.514"></a>
-<span class="sourceLineNo">515</span>      getExecutor().schedule(new Runnable() {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>        @Override<a name="line.516"></a>
-<span class="sourceLineNo">517</span>        public void run() {<a name="line.517"></a>
-<span class="sourceLineNo">518</span>          boolean succ = false;<a name="line.518"></a>
-<span class="sourceLineNo">519</span>          try {<a name="line.519"></a>
-<span class="sourceLineNo">520</span>            succ = FlushWorker.this.getMultiplexer()._put(tableName, failedPut, retryCount, true);<a name="line.520"></a>
-<span class="sourceLineNo">521</span>          } finally {<a name="line.521"></a>
-<span class="sourceLineNo">522</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.522"></a>
-<span class="sourceLineNo">523</span>            if (!succ) {<a name="line.523"></a>
-<span class="sourceLineNo">524</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.524"></a>
-<span class="sourceLineNo">525</span>            }<a name="line.525"></a>
-<span class="sourceLineNo">526</span>          }<a name="line.526"></a>
-<span class="sourceLineNo">527</span>        }<a name="line.527"></a>
-<span class="sourceLineNo">528</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.528"></a>
-<span class="sourceLineNo">529</span>      return true;<a name="line.529"></a>
-<span class="sourceLineNo">530</span>    }<a name="line.530"></a>
-<span class="sourceLineNo">531</span><a name="line.531"></a>
-<span class="sourceLineNo">532</span>    @VisibleForTesting<a name="line.532"></a>
-<span class="sourceLineNo">533</span>    long getNextDelay(int retryCount) {<a name="line.533"></a>
-<span class="sourceLineNo">534</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.534"></a>
-<span class="sourceLineNo">535</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    }<a name="line.536"></a>
-<span class="sourceLineNo">537</span><a name="line.537"></a>
-<span class="sourceLineNo">538</span>    @VisibleForTesting<a name="line.538"></a>
-<span class="sourceLineNo">539</span>    AtomicInteger getRetryInQueue() {<a name="line.539"></a>
-<span class="sourceLineNo">540</span>      return this.retryInQueue;<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    }<a name="line.541"></a>
-<span class="sourceLineNo">542</span><a name="line.542"></a>
-<span class="sourceLineNo">543</span>    @VisibleForTesting<a name="line.543"></a>
-<span class="sourceLineNo">544</span>    int getMaxRetryInQueue() {<a name="line.544"></a>
-<span class="sourceLineNo">545</span>      return this.maxRetryInQueue;<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    }<a name="line.546"></a>
-<span class="sourceLineNo">547</span><a name="line.547"></a>
-<span class="sourceLineNo">548</span>    @VisibleForTesting<a name="line.548"></a>
-<span class="sourceLineNo">549</span>    AtomicLong getTotalFailedPutCount() {<a name="line.549"></a>
-<span class="sourceLineNo">550</span>      return this.totalFailedPutCount;<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    }<a name="line.551"></a>
-<span class="sourceLineNo">552</span><a name="line.552"></a>
-<span class="sourceLineNo">553</span>    @VisibleForTesting<a name="line.553"></a>
-<span class="sourceLineNo">554</span>    HTableMultiplexer getMultiplexer() {<a name="line.554"></a>
-<span class="sourceLineNo">555</span>      return this.multiplexer;<a name="line.555"></a>
-<span class="sourceLineNo">556</span>    }<a name="line.556"></a>
-<span class="sourceLineNo">557</span><a name="line.557"></a>
-<span class="sourceLineNo">558</span>    @VisibleForTesting<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    ScheduledExecutorService getExecutor() {<a name="line.559"></a>
-<span class="sourceLineNo">560</span>      return this.executor;<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    }<a name="line.561"></a>
-<span class="sourceLineNo">562</span><a name="line.562"></a>
-<span class="sourceLineNo">563</span>    @Override<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    public void run() {<a name="line.564"></a>
-<span class="sourceLineNo">565</span>      int failedCount = 0;<a name="line.565"></a>
-<span class="sourceLineNo">566</span>      try {<a name="line.566"></a>
-<span class="sourceLineNo">567</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.567"></a>
-<span class="sourceLineNo">568</span><a name="line.568"></a>
-<span class="sourceLineNo">569</span>        // drain all the queued puts into the tmp list<a name="line.569"></a>
-<span class="sourceLineNo">570</span>        processingList.clear();<a name="line.570"></a>
-<span class="sourceLineNo">571</span>        queue.drainTo(processingList);<a name="line.571"></a>
-<span class="sourceLineNo">572</span>        if (processingList.size() == 0) {<a name="line.572"></a>
-<span class="sourceLineNo">573</span>          // Nothing to flush<a name="line.573"></a>
-<span class="sourceLineNo">574</span>          return;<a name="line.574"></a>
-<span class="sourceLineNo">575</span>        }<a name="line.575"></a>
-<span class="sourceLineNo">576</span><a name="line.576"></a>
-<span class="sourceLineNo">577</span>        currentProcessingCount.set(processingList.size());<a name="line.577"></a>
-<span class="sourceLineNo">578</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.578"></a>
-<span class="sourceLineNo">579</span>        failedCount = processingList.size();<a name="line.579"></a>
-<span class="sourceLineNo">580</span><a name="line.580"></a>
-<span class="sourceLineNo">581</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.581"></a>
-<span class="sourceLineNo">582</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.582"></a>
-<span class="sourceLineNo">583</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.583"></a>
-<span class="sourceLineNo">584</span>          PutStatus putStatus = processingList.get(i);<a name="line.584"></a>
-<span class="sourceLineNo">585</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.585"></a>
-<span class="sourceLineNo">586</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>          retainedActions.add(action);<a name="line.587"></a>
-<span class="sourceLineNo">588</span>        }<a name="line.588"></a>
-<span class="sourceLineNo">589</span><a name="line.589"></a>
-<span class="sourceLineNo">590</span>        // Process this multi-put request<a name="line.590"></a>
-<span class="sourceLineNo">591</span>        List&lt;PutStatus&gt; failed = null;<a name="line.591"></a>
-<span class="sourceLineNo">592</span>        Object[] results = new Object[actions.size()];<a name="line.592"></a>
-<span class="sourceLineNo">593</span>        ServerName server = addr.getServerName();<a name="line.593"></a>
-<span class="sourceLineNo">594</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.594"></a>
-<span class="sourceLineNo">595</span>            Collections.singletonMap(server, actions);<a name="line.595"></a>
-<span class="sourceLineNo">596</span>        try {<a name="line.596"></a>
-<span class="sourceLineNo">597</span>          AsyncRequestFuture arf =<a name="line.597"></a>
-<span class="sourceLineNo">598</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.598"></a>
-<span class="sourceLineNo">599</span>                null, actionsByServer, null);<a name="line.599"></a>
-<span class="sourceLineNo">600</span>          arf.waitUntilDone();<a name="line.600"></a>
-<span class="sourceLineNo">601</span>          if (arf.hasError()) {<a name="line.601"></a>
-<span class="sourceLineNo">602</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.602"></a>
-<span class="sourceLineNo">603</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.603"></a>
-<span class="sourceLineNo">604</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.604"></a>
-<span class="sourceLineNo">605</span>          }<a name="line.605"></a>
-<span class="sourceLineNo">606</span>        } finally {<a name="line.606"></a>
-<span class="sourceLineNo">607</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>            if (results[i] instanceof Result) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>              failedCount--;<a name="line.609"></a>
-<span class="sourceLineNo">610</span>            } else {<a name="line.610"></a>
-<span class="sourceLineNo">611</span>              if (failed == null) {<a name="line.611"></a>
-<span class="sourceLineNo">612</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.612"></a>
-<span class="sourceLineNo">613</span>              }<a name="line.613"></a>
-<span class="sourceLineNo">614</span>              failed.add(processingList.get(i));<a name="line.614"></a>
-<span class="sourceLineNo">615</span>            }<a name="line.615"></a>
-<span class="sourceLineNo">616</span>          }<a name="line.616"></a>
-<span class="sourceLineNo">617</span>        }<a name="line.617"></a>
-<span class="sourceLineNo">618</span><a name="line.618"></a>
-<span class="sourceLineNo">619</span>        if (failed != null) {<a name="line.619"></a>
-<span class="sourceLineNo">620</span>          // Resubmit failed puts<a name="line.620"></a>
-<span class="sourceLineNo">621</span>          for (PutStatus putStatus : failed) {<a name="line.621"></a>
-<span class="sourceLineNo">622</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.622"></a>
-<span class="sourceLineNo">623</span>              failedCount--;<a name="line.623"></a>
-<span class="sourceLineNo">624</span>            }<a name="line.624"></a>
-<span class="sourceLineNo">625</span>          }<a name="line.625"></a>
+<span class="sourceLineNo">499</span>      long delayMs = getNextDelay(retryCount);<a name="line.499"></a>
+<span class="sourceLineNo">500</span>      if (LOG.isDebugEnabled()) {<a name="line.500"></a>
+<span class="sourceLineNo">501</span>        LOG.debug("resubmitting after " + delayMs + "ms: " + retryCount);<a name="line.501"></a>
+<span class="sourceLineNo">502</span>      }<a name="line.502"></a>
+<span class="sourceLineNo">503</span><a name="line.503"></a>
+<span class="sourceLineNo">504</span>      // HBASE-12198, HBASE-15221, HBASE-15232: AsyncProcess should be responsible for updating<a name="line.504"></a>
+<span class="sourceLineNo">505</span>      // the region location cache when the Put original failed with some exception. If we keep<a name="line.505"></a>
+<span class="sourceLineNo">506</span>      // re-trying the same Put to the same location, AsyncProcess isn't doing the right stuff<a name="line.506"></a>
+<span class="sourceLineNo">507</span>      // that we expect it to.<a name="line.507"></a>
+<span class="sourceLineNo">508</span>      getExecutor().schedule(new Runnable() {<a name="line.508"></a>
+<span class="sourceLineNo">509</span>        @Override<a name="line.509"></a>
+<span class="sourceLineNo">510</span>        public void run() {<a name="line.510"></a>
+<span class="sourceLineNo">511</span>          boolean succ = false;<a name="line.511"></a>
+<span class="sourceLineNo">512</span>          try {<a name="line.512"></a>
+<span class="sourceLineNo">513</span>            succ = FlushWorker.this.getMultiplexer().put(tableName, failedPut, retryCount);<a name="line.513"></a>
+<span class="sourceLineNo">514</span>          } finally {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>            FlushWorker.this.getRetryInQueue().decrementAndGet();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>            if (!succ) {<a name="line.516"></a>
+<span class="sourceLineNo">517</span>              FlushWorker.this.getTotalFailedPutCount().incrementAndGet();<a name="line.517"></a>
+<span class="sourceLineNo">518</span>            }<a name="line.518"></a>
+<span class="sourceLineNo">519</span>          }<a name="line.519"></a>
+<span class="sourceLineNo">520</span>        }<a name="line.520"></a>
+<span class="sourceLineNo">521</span>      }, delayMs, TimeUnit.MILLISECONDS);<a name="line.521"></a>
+<span class="sourceLineNo">522</span>      return true;<a name="line.522"></a>
+<span class="sourceLineNo">523</span>    }<a name="line.523"></a>
+<span class="sourceLineNo">524</span><a name="line.524"></a>
+<span class="sourceLineNo">525</span>    @VisibleForTesting<a name="line.525"></a>
+<span class="sourceLineNo">526</span>    long getNextDelay(int retryCount) {<a name="line.526"></a>
+<span class="sourceLineNo">527</span>      return ConnectionUtils.getPauseTime(multiplexer.flushPeriod,<a name="line.527"></a>
+<span class="sourceLineNo">528</span>          multiplexer.maxAttempts - retryCount - 1);<a name="line.528"></a>
+<span class="sourceLineNo">529</span>    }<a name="line.529"></a>
+<span class="sourceLineNo">530</span><a name="line.530"></a>
+<span class="sourceLineNo">531</span>    @VisibleForTesting<a name="line.531"></a>
+<span class="sourceLineNo">532</span>    AtomicInteger getRetryInQueue() {<a name="line.532"></a>
+<span class="sourceLineNo">533</span>      return this.retryInQueue;<a name="line.533"></a>
+<span class="sourceLineNo">534</span>    }<a name="line.534"></a>
+<span class="sourceLineNo">535</span><a name="line.535"></a>
+<span class="sourceLineNo">536</span>    @VisibleForTesting<a name="line.536"></a>
+<span class="sourceLineNo">537</span>    int getMaxRetryInQueue() {<a name="line.537"></a>
+<span class="sourceLineNo">538</span>      return this.maxRetryInQueue;<a name="line.538"></a>
+<span class="sourceLineNo">539</span>    }<a name="line.539"></a>
+<span class="sourceLineNo">540</span><a name="line.540"></a>
+<span class="sourceLineNo">541</span>    @VisibleForTesting<a name="line.541"></a>
+<span class="sourceLineNo">542</span>    AtomicLong getTotalFailedPutCount() {<a name="line.542"></a>
+<span class="sourceLineNo">543</span>      return this.totalFailedPutCount;<a name="line.543"></a>
+<span class="sourceLineNo">544</span>    }<a name="line.544"></a>
+<span class="sourceLineNo">545</span><a name="line.545"></a>
+<span class="sourceLineNo">546</span>    @VisibleForTesting<a name="line.546"></a>
+<span class="sourceLineNo">547</span>    HTableMultiplexer getMultiplexer() {<a name="line.547"></a>
+<span class="sourceLineNo">548</span>      return this.multiplexer;<a name="line.548"></a>
+<span class="sourceLineNo">549</span>    }<a name="line.549"></a>
+<span class="sourceLineNo">550</span><a name="line.550"></a>
+<span class="sourceLineNo">551</span>    @VisibleForTesting<a name="line.551"></a>
+<span class="sourceLineNo">552</span>    ScheduledExecutorService getExecutor() {<a name="line.552"></a>
+<span class="sourceLineNo">553</span>      return this.executor;<a name="line.553"></a>
+<span class="sourceLineNo">554</span>    }<a name="line.554"></a>
+<span class="sourceLineNo">555</span><a name="line.555"></a>
+<span class="sourceLineNo">556</span>    @Override<a name="line.556"></a>
+<span class="sourceLineNo">557</span>    public void run() {<a name="line.557"></a>
+<span class="sourceLineNo">558</span>      int failedCount = 0;<a name="line.558"></a>
+<span class="sourceLineNo">559</span>      try {<a name="line.559"></a>
+<span class="sourceLineNo">560</span>        long start = EnvironmentEdgeManager.currentTime();<a name="line.560"></a>
+<span class="sourceLineNo">561</span><a name="line.561"></a>
+<span class="sourceLineNo">562</span>        // drain all the queued puts into the tmp list<a name="line.562"></a>
+<span class="sourceLineNo">563</span>        processingList.clear();<a name="line.563"></a>
+<span class="sourceLineNo">564</span>        queue.drainTo(processingList);<a name="line.564"></a>
+<span class="sourceLineNo">565</span>        if (processingList.size() == 0) {<a name="line.565"></a>
+<span class="sourceLineNo">566</span>          // Nothing to flush<a name="line.566"></a>
+<span class="sourceLineNo">567</span>          return;<a name="line.567"></a>
+<span class="sourceLineNo">568</span>        }<a name="line.568"></a>
+<span class="sourceLineNo">569</span><a name="line.569"></a>
+<span class="sourceLineNo">570</span>        currentProcessingCount.set(processingList.size());<a name="line.570"></a>
+<span class="sourceLineNo">571</span>        // failedCount is decreased whenever a Put is success or resubmit.<a name="line.571"></a>
+<span class="sourceLineNo">572</span>        failedCount = processingList.size();<a name="line.572"></a>
+<span class="sourceLineNo">573</span><a name="line.573"></a>
+<span class="sourceLineNo">574</span>        List&lt;Action&lt;Row&gt;&gt; retainedActions = new ArrayList&lt;&gt;(processingList.size());<a name="line.574"></a>
+<span class="sourceLineNo">575</span>        MultiAction&lt;Row&gt; actions = new MultiAction&lt;&gt;();<a name="line.575"></a>
+<span class="sourceLineNo">576</span>        for (int i = 0; i &lt; processingList.size(); i++) {<a name="line.576"></a>
+<span class="sourceLineNo">577</span>          PutStatus putStatus = processingList.get(i);<a name="line.577"></a>
+<span class="sourceLineNo">578</span>          Action&lt;Row&gt; action = new Action&lt;Row&gt;(putStatus.put, i);<a name="line.578"></a>
+<span class="sourceLineNo">579</span>          actions.add(putStatus.regionInfo.getRegionName(), action);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>          retainedActions.add(action);<a name="line.580"></a>
+<span class="sourceLineNo">581</span>        }<a name="line.581"></a>
+<span class="sourceLineNo">582</span><a name="line.582"></a>
+<span class="sourceLineNo">583</span>        // Process this multi-put request<a name="line.583"></a>
+<span class="sourceLineNo">584</span>        List&lt;PutStatus&gt; failed = null;<a name="line.584"></a>
+<span class="sourceLineNo">585</span>        Object[] results = new Object[actions.size()];<a name="line.585"></a>
+<span class="sourceLineNo">586</span>        ServerName server = addr.getServerName();<a name="line.586"></a>
+<span class="sourceLineNo">587</span>        Map&lt;ServerName, MultiAction&lt;Row&gt;&gt; actionsByServer =<a name="line.587"></a>
+<span class="sourceLineNo">588</span>            Collections.singletonMap(server, actions);<a name="line.588"></a>
+<span class="sourceLineNo">589</span>        try {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>          AsyncRequestFuture arf =<a name="line.590"></a>
+<span class="sourceLineNo">591</span>              ap.submitMultiActions(null, retainedActions, 0L, null, results, true, null,<a name="line.591"></a>
+<span class="sourceLineNo">592</span>                null, actionsByServer, null);<a name="line.592"></a>
+<span class="sourceLineNo">593</span>          arf.waitUntilDone();<a name="line.593"></a>
+<span class="sourceLineNo">594</span>          if (arf.hasError()) {<a name="line.594"></a>
+<span class="sourceLineNo">595</span>            // We just log and ignore the exception here since failed Puts will be resubmit again.<a name="line.595"></a>
+<span class="sourceLineNo">596</span>            LOG.debug("Caught some exceptions when flushing puts to region server "<a name="line.596"></a>
+<span class="sourceLineNo">597</span>                + addr.getHostnamePort(), arf.getErrors());<a name="line.597"></a>
+<span class="sourceLineNo">598</span>          }<a name="line.598"></a>
+<span class="sourceLineNo">599</span>        } finally {<a name="line.599"></a>
+<span class="sourceLineNo">600</span>          for (int i = 0; i &lt; results.length; i++) {<a name="line.600"></a>
+<span class="sourceLineNo">601</span>            if (results[i] instanceof Result) {<a name="line.601"></a>
+<span class="sourceLineNo">602</span>              failedCount--;<a name="line.602"></a>
+<span class="sourceLineNo">603</span>            } else {<a name="line.603"></a>
+<span class="sourceLineNo">604</span>              if (failed == null) {<a name="line.604"></a>
+<span class="sourceLineNo">605</span>                failed = new ArrayList&lt;PutStatus&gt;();<a name="line.605"></a>
+<span class="sourceLineNo">606</span>              }<a name="line.606"></a>
+<span class="sourceLineNo">607</span>              failed.add(processingList.get(i));<a name="line.607"></a>
+<span class="sourceLineNo">608</span>            }<a name="line.608"></a>
+<span class="sourceLineNo">609</span>          }<a name="line.609"></a>
+<span class="sourceLineNo">610</span>        }<a name="line.610"></a>
+<span class="sourceLineNo">611</span><a name="line.611"></a>
+<span class="sourceLineNo">612</span>        if (failed != null) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>          // Resubmit failed puts<a name="line.613"></a>
+<span class="sourceLineNo">614</span>          for (PutStatus putStatus : failed) {<a name="line.614"></a>
+<span class="sourceLineNo">615</span>            if (resubmitFailedPut(putStatus, this.addr)) {<a name="line.615"></a>
+<span class="sourceLineNo">616</span>              failedCount--;<a name="line.616"></a>
+<span class="sourceLineNo">617</span>            }<a name="line.617"></a>
+<span class="sourceLineNo">618</span>          }<a name="line.618"></a>
+<span class="sourceLineNo">619</span>        }<a name="line.619"></a>
+<span class="sourceLineNo">620</span><a name="line.620"></a>
+<span class="sourceLineNo">621</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.621"></a>
+<span class="sourceLineNo">622</span>        // Update latency counters<a name="line.622"></a>
+<span class="sourceLineNo">623</span>        averageLatency.add(elapsed);<a name="line.623"></a>
+<span class="sourceLineNo">624</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>          maxLatency.set(elapsed);<a name="line.625"></a>
 <span class="sourceLineNo">626</span>        }<a name="line.626"></a>
 <span class="sourceLineNo">627</span><a name="line.627"></a>
-<span class="sourceLineNo">628</span>        long elapsed = EnvironmentEdgeManager.currentTime() - start;<a name="line.628"></a>
-<span class="sourceLineNo">629</span>        // Update latency counters<a name="line.629"></a>
-<span class="sourceLineNo">630</span>        averageLatency.add(elapsed);<a name="line.630"></a>
-<span class="sourceLineNo">631</span>        if (elapsed &gt; maxLatency.get()) {<a name="line.631"></a>
-<span class="sourceLineNo">632</span>          maxLatency.set(elapsed);<a name="line.632"></a>
+<span class="sourceLineNo">628</span>        // Log some basic info<a name="line.628"></a>
+<span class="sourceLineNo">629</span>        if (LOG.isDebugEnabled()) {<a name="line.629"></a>
+<span class="sourceLineNo">630</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.630"></a>
+<span class="sourceLineNo">631</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.631"></a>
+<span class="sourceLineNo">632</span>              + ", latency for this send: " + elapsed);<a name="line.632"></a>
 <span class="sourceLineNo">633</span>        }<a name="line.633"></a>
 <span class="sourceLineNo">634</span><a name="line.634"></a>
-<span class="sourceLineNo">635</span>        // Log some basic info<a name="line.635"></a>
-<span class="sourceLineNo">636</span>        if (LOG.isDebugEnabled()) {<a name="line.636"></a>
-<span class="sourceLineNo">637</span>          LOG.debug("Processed " + currentProcessingCount + " put requests for "<a name="line.637"></a>
-<span class="sourceLineNo">638</span>              + addr.getHostnamePort() + " and " + failedCount + " failed"<a name="line.638"></a>
-<span class="sourceLineNo">639</span>              + ", latency for this send: " + elapsed);<a name="line.639"></a>
-<span class="sourceLineNo">640</span>        }<a name="line.640"></a>
-<span class="sourceLineNo">641</span><a name="line.641"></a>
-<span class="sourceLineNo">642</span>        // Reset the current processing put count<a name="line.642"></a>
-<span class="sourceLineNo">643</span>        currentProcessingCount.set(0);<a name="line.643"></a>
-<span class="sourceLineNo">644</span>      } catch (RuntimeException e) {<a name="line.644"></a>
-<span class="sourceLineNo">645</span>        // To make findbugs happy<a name="line.645"></a>
-<span class="sourceLineNo">646</span>        // Log all the exceptions and move on<a name="line.646"></a>
-<span class="sourceLineNo">647</span>        LOG.debug(<a name="line.647"></a>
-<span class="sourceLineNo">648</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.648"></a>
-<span class="sourceLineNo">649</span>              + addr.getHostnamePort(), e);<a name="line.649"></a>
-<span class="sourceLineNo">650</span>      } catch (Exception e) {<a name="line.650"></a>
-<span class="sourceLineNo">651</span>        if (e instanceof InterruptedException) {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>          Thread.currentThread().interrupt();<a name="line.652"></a>
-<span class="sourceLineNo">653</span>        }<a name="line.653"></a>
-<span class="sourceLineNo">654</span>        // Log all the exceptions and move on<a name="line.654"></a>
-<span class="sourceLineNo">655</span>        LOG.debug(<a name="line.655"></a>
-<span class="sourceLineNo">656</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.656"></a>
-<span class="sourceLineNo">657</span>              + addr.getHostnamePort(), e);<a name="line.657"></a>
-<span class="sourceLineNo">658</span>      } finally {<a name="line.658"></a>
-<span class="sourceLineNo">659</span>        // Update the totalFailedCount<a name="line.659"></a>
-<span class="sourceLineNo">660</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.660"></a>
-<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
-<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
-<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
-<span class="sourceLineNo">664</span>}<a name="line.664"></a>
+<span class="sourceLineNo">635</span>        // Reset the current processing put count<a name="line.635"></a>
+<span class="sourceLineNo">636</span>        currentProcessingCount.set(0);<a name="line.636"></a>
+<span class="sourceLineNo">637</span>      } catch (RuntimeException e) {<a name="line.637"></a>
+<span class="sourceLineNo">638</span>        // To make findbugs happy<a name="line.638"></a>
+<span class="sourceLineNo">639</span>        // Log all the exceptions and move on<a name="line.639"></a>
+<span class="sourceLineNo">640</span>        LOG.debug(<a name="line.640"></a>
+<span class="sourceLineNo">641</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.641"></a>
+<span class="sourceLineNo">642</span>              + addr.getHostnamePort(), e);<a name="line.642"></a>
+<span class="sourceLineNo">643</span>      } catch (Exception e) {<a name="line.643"></a>
+<span class="sourceLineNo">644</span>        if (e instanceof InterruptedException) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>          Thread.currentThread().interrupt();<a name="line.645"></a>
+<span class="sourceLineNo">646</span>        }<a name="line.646"></a>
+<span class="sourceLineNo">647</span>        // Log all the exceptions and move on<a name="line.647"></a>
+<span class="sourceLineNo">648</span>        LOG.debug(<a name="line.648"></a>
+<span class="sourceLineNo">649</span>          "Caught some exceptions " + e + " when flushing puts to region server "<a name="line.649"></a>
+<span class="sourceLineNo">650</span>              + addr.getHostnamePort(), e);<a name="line.650"></a>
+<span class="sourceLineNo">651</span>      } finally {<a name="line.651"></a>
+<span class="sourceLineNo">652</span>        // Update the totalFailedCount<a name="line.652"></a>
+<span class="sourceLineNo">653</span>        this.totalFailedPutCount.addAndGet(failedCount);<a name="line.653"></a>
+<span class="sourceLineNo">654</span>      }<a name="line.654"></a>
+<span class="sourceLineNo">655</span>    }<a name="line.655"></a>
+<span class="sourceLineNo">656</span>  }<a name="line.656"></a>
+<span class="sourceLineNo">657</span>}<a name="line.657"></a>
 
 
 


[35/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html b/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
index 22b494a..3e33526 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html
@@ -103,7 +103,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.357">SecureBulkLoadEndpoint.SecureBulkLoadListener</a>
+<pre>private static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.367">SecureBulkLoadEndpoint.SecureBulkLoadListener</a>
 extends <a href="http://docs.oracle.com/javase/7/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/regionserver/Region.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.BulkLoadListener</a></pre>
 </li>
@@ -233,7 +233,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.359">fs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.369">fs</a></pre>
 </li>
 </ul>
 <a name="stagingDir">
@@ -242,7 +242,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>stagingDir</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.360">stagingDir</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.370">stagingDir</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -251,7 +251,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.361">conf</a></pre>
+<pre>private&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.371">conf</a></pre>
 </li>
 </ul>
 <a name="srcFs">
@@ -260,7 +260,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>srcFs</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.363">srcFs</a></pre>
+<pre>private&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.373">srcFs</a></pre>
 </li>
 </ul>
 <a name="origPermissions">
@@ -269,7 +269,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockListLast">
 <li class="blockList">
 <h4>origPermissions</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.fs.permission.FsPermission&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.364">origPermissions</a></pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,org.apache.hadoop.fs.permission.FsPermission&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.374">origPermissions</a></pre>
 </li>
 </ul>
 </li>
@@ -286,7 +286,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SecureBulkLoadEndpoint.SecureBulkLoadListener</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.366">SecureBulkLoadEndpoint.SecureBulkLoadListener</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.376">SecureBulkLoadEndpoint.SecureBulkLoadListener</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                              <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;stagingDir,
                                              org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 </li>
@@ -305,7 +305,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareBulkLoad</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.374">prepareBulkLoad</a>(byte[]&nbsp;family,
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.384">prepareBulkLoad</a>(byte[]&nbsp;family,
                      <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#prepareBulkLoad(byte[],%20java.lang.String)">Region.BulkLoadListener</a></code></strong></div>
@@ -325,7 +325,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>doneBulkLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.411">doneBulkLoad</a>(byte[]&nbsp;family,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.421">doneBulkLoad</a>(byte[]&nbsp;family,
                 <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
                   throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#doneBulkLoad(byte[],%20java.lang.String)">Region.BulkLoadListener</a></code></strong></div>
@@ -344,7 +344,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockList">
 <li class="blockList">
 <h4>failedBulkLoad</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.416">failedBulkLoad</a>(byte[]&nbsp;family,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.426">failedBulkLoad</a>(byte[]&nbsp;family,
                   <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
                     throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><strong>Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/Region.BulkLoadListener.html#failedBulkLoad(byte[],%20java.lang.String)">Region.BulkLoadListener</a></code></strong></div>
@@ -363,7 +363,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/regionserver/Regio
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isFile</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.451">isFile</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.SecureBulkLoadListener.html#line.461">isFile</a>(org.apache.hadoop.fs.Path&nbsp;p)
                 throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Check if the path is referencing a file.
  This is mainly needed to avoid symlinks.</div>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html b/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
index d7cbdc4..bdacb58 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html
@@ -576,7 +576,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Coproc
 <ul class="blockList">
 <li class="blockList">
 <h4>getBulkLoadObservers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/coprocessor/BulkLoadObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">BulkLoadObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.312">getBulkLoadObservers</a>()</pre>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/coprocessor/BulkLoadObserver.html" title="interface in org.apache.hadoop.hbase.coprocessor">BulkLoadObserver</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.322">getBulkLoadObservers</a>()</pre>
 </li>
 </ul>
 <a name="createStagingDir(org.apache.hadoop.fs.Path, org.apache.hadoop.hbase.security.User, org.apache.hadoop.hbase.TableName)">
@@ -585,7 +585,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Coproc
 <ul class="blockList">
 <li class="blockList">
 <h4>createStagingDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.319">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.329">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
                                          <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                          <a href="../../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -599,7 +599,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Coproc
 <ul class="blockList">
 <li class="blockList">
 <h4>createStagingDir</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.328">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.338">createStagingDir</a>(org.apache.hadoop.fs.Path&nbsp;baseDir,
                                          <a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user,
                                          <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;randomDir)
                                             throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -613,7 +613,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Coproc
 <ul class="blockList">
 <li class="blockList">
 <h4>getActiveUser</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.337">getActiveUser</a>()</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.347">getActiveUser</a>()</pre>
 </li>
 </ul>
 <a name="getService()">
@@ -622,7 +622,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/coprocessor/Coproc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getService</h4>
-<pre>public&nbsp;com.google.protobuf.Service&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.353">getService</a>()</pre>
+<pre>public&nbsp;com.google.protobuf.Service&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/security/access/SecureBulkLoadEndpoint.html#line.363">getService</a>()</pre>
 <dl>
 <dt><strong>Specified by:</strong></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorService.html#getService()">getService</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/coprocessor/CoprocessorService.html" title="interface in org.apache.hadoop.hbase.coprocessor">CoprocessorService</a></code></dd>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index bdae472..86e9213 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -140,9 +140,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessController.OpType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="strong">AccessControlFilter.Strategy</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index 6aea795..86f4d59 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -152,9 +152,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">SaslUtil.QualityOfProtection</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">AuthMethod</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">SaslStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="strong">SaslUtil.QualityOfProtection</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index 3936917..92b652b 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -159,9 +159,9 @@
 <ul>
 <li type="circle">java.lang.<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="strong">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="http://docs.oracle.com/javase/7/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="http://docs.oracle.com/javase/7/docs/api/java/io/Serializable.html?is-external=true" title="class or interface in java.io">Serializable</a>)
 <ul>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="strong">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="strong">ThriftMetrics.ThriftServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftServerRunner.ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="strong">ThriftServerRunner.ImplType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="strong">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
index 4caaca8..257a2c6 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html
@@ -397,148 +397,148 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.127">m_frags__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_format">
+<a name="m_catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_format</a></pre>
+<h4>m_catalogJanitorEnabled</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.139">m_catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="m_format__IsNotDefault">
+<a name="m_catalogJanitorEnabled__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_format__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_format__IsNotDefault</a></pre>
+<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.144">m_catalogJanitorEnabled__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_deadServers">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_deadServers</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.156">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_deadServers__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_deadServers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_deadServers__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.161">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager">
+<a name="m_deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_assignmentManager</a></pre>
+<h4>m_deadServers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.173">m_deadServers</a></pre>
 </li>
 </ul>
-<a name="m_assignmentManager__IsNotDefault">
+<a name="m_deadServers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_assignmentManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_assignmentManager__IsNotDefault</a></pre>
+<h4>m_deadServers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.178">m_deadServers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_servers">
+<a name="m_format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.190">m_servers</a></pre>
+<h4>m_format</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.190">m_format</a></pre>
 </li>
 </ul>
-<a name="m_servers__IsNotDefault">
+<a name="m_format__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_servers__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_servers__IsNotDefault</a></pre>
+<h4>m_format__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.195">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_filter</a></pre>
+<h4>m_servers</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.207">m_servers</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_servers__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_filter__IsNotDefault</a></pre>
+<h4>m_servers__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.212">m_servers__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_serverManager">
+<a name="m_metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_serverManager</a></pre>
+<h4>m_metaLocation</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.224">m_metaLocation</a></pre>
 </li>
 </ul>
-<a name="m_serverManager__IsNotDefault">
+<a name="m_metaLocation__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_serverManager__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_serverManager__IsNotDefault</a></pre>
+<h4>m_metaLocation__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.229">m_metaLocation__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation">
+<a name="m_assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_metaLocation</a></pre>
+<h4>m_assignmentManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.241">m_assignmentManager</a></pre>
 </li>
 </ul>
-<a name="m_metaLocation__IsNotDefault">
+<a name="m_assignmentManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_metaLocation__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_metaLocation__IsNotDefault</a></pre>
+<h4>m_assignmentManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.246">m_assignmentManager__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled">
+<a name="m_serverManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_catalogJanitorEnabled</a></pre>
+<h4>m_serverManager</h4>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.258">m_serverManager</a></pre>
 </li>
 </ul>
-<a name="m_catalogJanitorEnabled__IsNotDefault">
+<a name="m_serverManager__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_catalogJanitorEnabled__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_catalogJanitorEnabled__IsNotDefault</a></pre>
+<h4>m_serverManager__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.263">m_serverManager__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -611,220 +611,220 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.123">getFrags__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.129">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="getFormat()">
+<a name="getCatalogJanitorEnabled()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getFormat</a>()</pre>
+<h4>getCatalogJanitorEnabled</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.135">getCatalogJanitorEnabled</a>()</pre>
 </li>
 </ul>
-<a name="getFormat__IsNotDefault()">
+<a name="getCatalogJanitorEnabled__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFormat__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getFormat__IsNotDefault</a>()</pre>
+<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.140">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.146">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getDeadServers()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getDeadServers</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.152">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getDeadServers__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getDeadServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getDeadServers__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.157">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.163">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;deadServers)</pre>
 </li>
 </ul>
-<a name="getAssignmentManager()">
+<a name="getDeadServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getAssignmentManager</a>()</pre>
+<h4>getDeadServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.169">getDeadServers</a>()</pre>
 </li>
 </ul>
-<a name="getAssignmentManager__IsNotDefault()">
+<a name="getDeadServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getAssignmentManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getAssignmentManager__IsNotDefault</a>()</pre>
+<h4>getDeadServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.174">getDeadServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
+<h4>setFormat</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.180">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;format)</pre>
 </li>
 </ul>
-<a name="getServers()">
+<a name="getFormat()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.186">getServers</a>()</pre>
+<h4>getFormat</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.186">getFormat</a>()</pre>
 </li>
 </ul>
-<a name="getServers__IsNotDefault()">
+<a name="getFormat__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServers__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getServers__IsNotDefault</a>()</pre>
+<h4>getFormat__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.191">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setServers</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.197">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;servers)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getServers()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getFilter</a>()</pre>
+<h4>getServers</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.203">getServers</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getServers__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getFilter__IsNotDefault</a>()</pre>
+<h4>getServers__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.208">getServers__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
+<h4>setMetaLocation</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.214">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
 </li>
 </ul>
-<a name="getServerManager()">
+<a name="getMetaLocation()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getServerManager</a>()</pre>
+<h4>getMetaLocation</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.220">getMetaLocation</a>()</pre>
 </li>
 </ul>
-<a name="getServerManager__IsNotDefault()">
+<a name="getMetaLocation__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getServerManager__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getServerManager__IsNotDefault</a>()</pre>
+<h4>getMetaLocation__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.225">getMetaLocation__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;metaLocation)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.231">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;assignmentManager)</pre>
 </li>
 </ul>
-<a name="getMetaLocation()">
+<a name="getAssignmentManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getMetaLocation</a>()</pre>
+<h4>getAssignmentManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.237">getAssignmentManager</a>()</pre>
 </li>
 </ul>
-<a name="getMetaLocation__IsNotDefault()">
+<a name="getAssignmentManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getMetaLocation__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getMetaLocation__IsNotDefault</a>()</pre>
+<h4>getAssignmentManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.242">getAssignmentManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setCatalogJanitorEnabled</a>(boolean&nbsp;catalogJanitorEnabled)</pre>
+<h4>setServerManager</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.248">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;serverManager)</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled()">
+<a name="getServerManager()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getCatalogJanitorEnabled</a>()</pre>
+<h4>getServerManager</h4>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.254">getServerManager</a>()</pre>
 </li>
 </ul>
-<a name="getCatalogJanitorEnabled__IsNotDefault()">
+<a name="getServerManager__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getCatalogJanitorEnabled__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getCatalogJanitorEnabled__IsNotDefault</a>()</pre>
+<h4>getServerManager__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.ImplData.html#line.259">getServerManager__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
index 8aaa409..1f1378e 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html
@@ -332,76 +332,76 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.275">frags</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.282">format</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.282">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.289">deadServers</a></pre>
+<h4>filter</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.289">filter</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">assignmentManager</a></pre>
+<h4>deadServers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.296">deadServers</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.303">servers</a></pre>
+<h4>format</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.303">format</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmpl.html#line.310">filter</a></pre>
+<h4>servers</h4>
+<pre>protected&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.310">servers</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">serverManager</a></pre>
+<h4>metaLocation</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.317">metaLocation</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">metaLocation</a></pre>
+<h4>assignmentManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.324">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.331">catalogJanitorEnabled</a></pre>
+<h4>serverManager</h4>
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.331">serverManager</a></pre>
 </li>
 </ul>
 </li>
@@ -482,76 +482,76 @@ extends org.jamon.AbstractTemplateProxy</pre>
 <pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.276">setFrags</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;p_frags)</pre>
 </li>
 </ul>
-<a name="setFormat(java.lang.String)">
+<a name="setCatalogJanitorEnabled(boolean)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFormat</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
+<h4>setCatalogJanitorEnabled</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.283">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
 </li>
 </ul>
-<a name="setDeadServers(java.util.Set)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setDeadServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
+<h4>setFilter</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.290">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
 </li>
 </ul>
-<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
+<a name="setDeadServers(java.util.Set)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setAssignmentManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
+<h4>setDeadServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.297">setDeadServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_deadServers)</pre>
 </li>
 </ul>
-<a name="setServers(java.util.List)">
+<a name="setFormat(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServers</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
+<h4>setFormat</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.304">setFormat</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_format)</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setServers(java.util.List)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;p_filter)</pre>
+<h4>setServers</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.311">setServers</a>(<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt;&nbsp;p_servers)</pre>
 </li>
 </ul>
-<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
+<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setServerManager</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
+<h4>setMetaLocation</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.318">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
 </li>
 </ul>
-<a name="setMetaLocation(org.apache.hadoop.hbase.ServerName)">
+<a name="setAssignmentManager(org.apache.hadoop.hbase.master.AssignmentManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setMetaLocation</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setMetaLocation</a>(<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&nbsp;p_metaLocation)</pre>
+<h4>setAssignmentManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.325">setAssignmentManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a>&nbsp;p_assignmentManager)</pre>
 </li>
 </ul>
-<a name="setCatalogJanitorEnabled(boolean)">
+<a name="setServerManager(org.apache.hadoop.hbase.master.ServerManager)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setCatalogJanitorEnabled</h4>
-<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setCatalogJanitorEnabled</a>(boolean&nbsp;p_catalogJanitorEnabled)</pre>
+<h4>setServerManager</h4>
+<pre>public final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html" title="class in org.apache.hadoop.hbase.tmpl.master">MasterStatusTmpl</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmpl.html#line.332">setServerManager</a>(<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a>&nbsp;p_serverManager)</pre>
 </li>
 </ul>
 <a name="constructImpl(java.lang.Class)">

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
index 89cf189..7eec126 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html
@@ -273,76 +273,76 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/tmpl/master/Master
 <pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.63">frags</a></pre>
 </li>
 </ul>
-<a name="format">
+<a name="catalogJanitorEnabled">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>format</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.64">format</a></pre>
+<h4>catalogJanitorEnabled</h4>
+<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.64">catalogJanitorEnabled</a></pre>
 </li>
 </ul>
-<a name="deadServers">
+<a name="filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>deadServers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.65">deadServers</a></pre>
+<h4>filter</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.65">filter</a></pre>
 </li>
 </ul>
-<a name="assignmentManager">
+<a name="deadServers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>assignmentManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">assignmentManager</a></pre>
+<h4>deadServers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.66">deadServers</a></pre>
 </li>
 </ul>
-<a name="servers">
+<a name="format">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>servers</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.67">servers</a></pre>
+<h4>format</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.67">format</a></pre>
 </li>
 </ul>
-<a name="filter">
+<a name="servers">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>filter</h4>
-<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/master/MasterStatusTmplImpl.html#line.68">filter</a></pre>
+<h4>servers</h4>
+<pre>private final&nbsp;<a href="http://docs.oracle.com/javase/7/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/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.68">servers</a></pre>
 </li>
 </ul>
-<a name="serverManager">
+<a name="metaLocation">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>serverManager</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">serverManager</a></pre>
+<h4>metaLocation</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.69">metaLocation</a></pre>
 </li>
 </ul>
-<a name="metaLocation">
+<a name="assignmentManager">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>metaLocation</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/ServerName.html" title="class in org.apache.hadoop.hbase">ServerName</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">metaLocation</a></pre>
+<h4>assignmentManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/AssignmentManager.html" title="class in org.apache.hadoop.hbase.master">AssignmentManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.70">assignmentManager</a></pre>
 </li>
 </ul>
-<a name="catalogJanitorEnabled">
+<a name="serverManager">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>catalogJanitorEnabled</h4>
-<pre>private final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">catalogJanitorEnabled</a></pre>
+<h4>serverManager</h4>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/master/ServerManager.html" title="class in org.apache.hadoop.hbase.master">ServerManager</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/master/MasterStatusTmplImpl.html#line.71">serverManager</a></pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
----------------------------------------------------------------------
diff --git a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
index 0b5d3ba..9013517 100644
--- a/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
+++ b/devapidocs/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html
@@ -297,22 +297,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.88">m_format__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_bcn">
+<a name="m_filter">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_bcn</a></pre>
+<h4>m_filter</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.100">m_filter</a></pre>
 </li>
 </ul>
-<a name="m_bcn__IsNotDefault">
+<a name="m_filter__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_bcn__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_bcn__IsNotDefault</a></pre>
+<h4>m_filter__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.105">m_filter__IsNotDefault</a></pre>
 </li>
 </ul>
 <a name="m_bcv">
@@ -333,22 +333,22 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.122">m_bcv__IsNotDefault</a></pre>
 </li>
 </ul>
-<a name="m_filter">
+<a name="m_bcn">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>m_filter</h4>
-<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_filter</a></pre>
+<h4>m_bcn</h4>
+<pre>private&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.134">m_bcn</a></pre>
 </li>
 </ul>
-<a name="m_filter__IsNotDefault">
+<a name="m_bcn__IsNotDefault">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>m_filter__IsNotDefault</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_filter__IsNotDefault</a></pre>
+<h4>m_bcn__IsNotDefault</h4>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.139">m_bcn__IsNotDefault</a></pre>
 </li>
 </ul>
 </li>
@@ -421,31 +421,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.84">getFormat__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setBcn(java.lang.String)">
+<a name="setFilter(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setBcn</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcn)</pre>
+<h4>setFilter</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.90">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
 </li>
 </ul>
-<a name="getBcn()">
+<a name="getFilter()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getBcn</a>()</pre>
+<h4>getFilter</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.96">getFilter</a>()</pre>
 </li>
 </ul>
-<a name="getBcn__IsNotDefault()">
+<a name="getFilter__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getBcn__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getBcn__IsNotDefault</a>()</pre>
+<h4>getFilter__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.101">getFilter__IsNotDefault</a>()</pre>
 </li>
 </ul>
 <a name="setBcv(java.lang.String)">
@@ -475,31 +475,31 @@ extends org.jamon.AbstractTemplateProxy.ImplData</pre>
 <pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.118">getBcv__IsNotDefault</a>()</pre>
 </li>
 </ul>
-<a name="setFilter(java.lang.String)">
+<a name="setBcn(java.lang.String)">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>setFilter</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setFilter</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;filter)</pre>
+<h4>setBcn</h4>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.124">setBcn</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;bcn)</pre>
 </li>
 </ul>
-<a name="getFilter()">
+<a name="getBcn()">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
-<h4>getFilter</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getFilter</a>()</pre>
+<h4>getBcn</h4>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.130">getBcn</a>()</pre>
 </li>
 </ul>
-<a name="getFilter__IsNotDefault()">
+<a name="getBcn__IsNotDefault()">
 <!--   -->
 </a>
 <ul class="blockListLast">
 <li class="blockList">
-<h4>getFilter__IsNotDefault</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getFilter__IsNotDefault</a>()</pre>
+<h4>getBcn__IsNotDefault</h4>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/tmpl/regionserver/RSStatusTmpl.ImplData.html#line.135">getBcn__IsNotDefault</a>()</pre>
 </li>
 </ul>
 </li>


[46/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
----------------------------------------------------------------------
diff --git a/apidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html b/apidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
index ce497c5..0da4ea6 100644
--- a/apidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
+++ b/apidocs/src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
@@ -70,68 +70,66 @@
 <span class="sourceLineNo">062</span>  public boolean filterRowKey(Cell firstRowCell) {<a name="line.62"></a>
 <span class="sourceLineNo">063</span>    // if stopRowKey is &lt;= buffer, then true, filter row.<a name="line.63"></a>
 <span class="sourceLineNo">064</span>    int cmp = CellComparator.COMPARATOR.compareRows(firstRowCell, stopRowKey, 0, stopRowKey.length);<a name="line.64"></a>
-<span class="sourceLineNo">065</span>    if (cmp &gt; 0) {<a name="line.65"></a>
-<span class="sourceLineNo">066</span>      done = true;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>    }<a name="line.67"></a>
-<span class="sourceLineNo">068</span>    return done;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>  }<a name="line.69"></a>
-<span class="sourceLineNo">070</span><a name="line.70"></a>
-<span class="sourceLineNo">071</span>  public boolean filterAllRemaining() {<a name="line.71"></a>
-<span class="sourceLineNo">072</span>    return done;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>  }<a name="line.73"></a>
-<span class="sourceLineNo">074</span><a name="line.74"></a>
-<span class="sourceLineNo">075</span>  public static Filter createFilterFromArguments (ArrayList&lt;byte []&gt; filterArguments) {<a name="line.75"></a>
-<span class="sourceLineNo">076</span>    Preconditions.checkArgument(filterArguments.size() == 1,<a name="line.76"></a>
-<span class="sourceLineNo">077</span>                                "Expected 1 but got: %s", filterArguments.size());<a name="line.77"></a>
-<span class="sourceLineNo">078</span>    byte [] stopRowKey = ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a name="line.78"></a>
-<span class="sourceLineNo">079</span>    return new InclusiveStopFilter(stopRowKey);<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>  /**<a name="line.82"></a>
-<span class="sourceLineNo">083</span>   * @return The filter serialized using pb<a name="line.83"></a>
-<span class="sourceLineNo">084</span>   */<a name="line.84"></a>
-<span class="sourceLineNo">085</span>  public byte [] toByteArray() {<a name="line.85"></a>
-<span class="sourceLineNo">086</span>    FilterProtos.InclusiveStopFilter.Builder builder =<a name="line.86"></a>
-<span class="sourceLineNo">087</span>      FilterProtos.InclusiveStopFilter.newBuilder();<a name="line.87"></a>
-<span class="sourceLineNo">088</span>    if (this.stopRowKey != null) builder.setStopRowKey(ByteStringer.wrap(this.stopRowKey));<a name="line.88"></a>
-<span class="sourceLineNo">089</span>    return builder.build().toByteArray();<a name="line.89"></a>
-<span class="sourceLineNo">090</span>  }<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>  /**<a name="line.92"></a>
-<span class="sourceLineNo">093</span>   * @param pbBytes A pb serialized {@link InclusiveStopFilter} instance<a name="line.93"></a>
-<span class="sourceLineNo">094</span>   * @return An instance of {@link InclusiveStopFilter} made from &lt;code&gt;bytes&lt;/code&gt;<a name="line.94"></a>
-<span class="sourceLineNo">095</span>   * @throws DeserializationException<a name="line.95"></a>
-<span class="sourceLineNo">096</span>   * @see #toByteArray<a name="line.96"></a>
-<span class="sourceLineNo">097</span>   */<a name="line.97"></a>
-<span class="sourceLineNo">098</span>  public static InclusiveStopFilter parseFrom(final byte [] pbBytes)<a name="line.98"></a>
-<span class="sourceLineNo">099</span>  throws DeserializationException {<a name="line.99"></a>
-<span class="sourceLineNo">100</span>    FilterProtos.InclusiveStopFilter proto;<a name="line.100"></a>
-<span class="sourceLineNo">101</span>    try {<a name="line.101"></a>
-<span class="sourceLineNo">102</span>      proto = FilterProtos.InclusiveStopFilter.parseFrom(pbBytes);<a name="line.102"></a>
-<span class="sourceLineNo">103</span>    } catch (InvalidProtocolBufferException e) {<a name="line.103"></a>
-<span class="sourceLineNo">104</span>      throw new DeserializationException(e);<a name="line.104"></a>
-<span class="sourceLineNo">105</span>    }<a name="line.105"></a>
-<span class="sourceLineNo">106</span>    return new InclusiveStopFilter(proto.hasStopRowKey()?proto.getStopRowKey().toByteArray():null);<a name="line.106"></a>
-<span class="sourceLineNo">107</span>  }<a name="line.107"></a>
-<span class="sourceLineNo">108</span><a name="line.108"></a>
-<span class="sourceLineNo">109</span>  /**<a name="line.109"></a>
-<span class="sourceLineNo">110</span>   * @param other<a name="line.110"></a>
-<span class="sourceLineNo">111</span>   * @return true if and only if the fields of the filter that are serialized<a name="line.111"></a>
-<span class="sourceLineNo">112</span>   * are equal to the corresponding fields in other.  Used for testing.<a name="line.112"></a>
-<span class="sourceLineNo">113</span>   */<a name="line.113"></a>
-<span class="sourceLineNo">114</span>  boolean areSerializedFieldsEqual(Filter o) {<a name="line.114"></a>
-<span class="sourceLineNo">115</span>    if (o == this) return true;<a name="line.115"></a>
-<span class="sourceLineNo">116</span>    if (!(o instanceof InclusiveStopFilter)) return false;<a name="line.116"></a>
-<span class="sourceLineNo">117</span><a name="line.117"></a>
-<span class="sourceLineNo">118</span>    InclusiveStopFilter other = (InclusiveStopFilter)o;<a name="line.118"></a>
-<span class="sourceLineNo">119</span>    return Bytes.equals(this.getStopRowKey(), other.getStopRowKey());<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  }<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  @Override<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  public String toString() {<a name="line.123"></a>
-<span class="sourceLineNo">124</span>    return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.stopRowKey);<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">065</span>    done = reversed ? cmp &lt; 0 : cmp &gt; 0;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>    return done;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>  }<a name="line.67"></a>
+<span class="sourceLineNo">068</span><a name="line.68"></a>
+<span class="sourceLineNo">069</span>  public boolean filterAllRemaining() {<a name="line.69"></a>
+<span class="sourceLineNo">070</span>    return done;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>  }<a name="line.71"></a>
+<span class="sourceLineNo">072</span><a name="line.72"></a>
+<span class="sourceLineNo">073</span>  public static Filter createFilterFromArguments (ArrayList&lt;byte []&gt; filterArguments) {<a name="line.73"></a>
+<span class="sourceLineNo">074</span>    Preconditions.checkArgument(filterArguments.size() == 1,<a name="line.74"></a>
+<span class="sourceLineNo">075</span>                                "Expected 1 but got: %s", filterArguments.size());<a name="line.75"></a>
+<span class="sourceLineNo">076</span>    byte [] stopRowKey = ParseFilter.removeQuotesFromByteArray(filterArguments.get(0));<a name="line.76"></a>
+<span class="sourceLineNo">077</span>    return new InclusiveStopFilter(stopRowKey);<a name="line.77"></a>
+<span class="sourceLineNo">078</span>  }<a name="line.78"></a>
+<span class="sourceLineNo">079</span><a name="line.79"></a>
+<span class="sourceLineNo">080</span>  /**<a name="line.80"></a>
+<span class="sourceLineNo">081</span>   * @return The filter serialized using pb<a name="line.81"></a>
+<span class="sourceLineNo">082</span>   */<a name="line.82"></a>
+<span class="sourceLineNo">083</span>  public byte [] toByteArray() {<a name="line.83"></a>
+<span class="sourceLineNo">084</span>    FilterProtos.InclusiveStopFilter.Builder builder =<a name="line.84"></a>
+<span class="sourceLineNo">085</span>      FilterProtos.InclusiveStopFilter.newBuilder();<a name="line.85"></a>
+<span class="sourceLineNo">086</span>    if (this.stopRowKey != null) builder.setStopRowKey(ByteStringer.wrap(this.stopRowKey));<a name="line.86"></a>
+<span class="sourceLineNo">087</span>    return builder.build().toByteArray();<a name="line.87"></a>
+<span class="sourceLineNo">088</span>  }<a name="line.88"></a>
+<span class="sourceLineNo">089</span><a name="line.89"></a>
+<span class="sourceLineNo">090</span>  /**<a name="line.90"></a>
+<span class="sourceLineNo">091</span>   * @param pbBytes A pb serialized {@link InclusiveStopFilter} instance<a name="line.91"></a>
+<span class="sourceLineNo">092</span>   * @return An instance of {@link InclusiveStopFilter} made from &lt;code&gt;bytes&lt;/code&gt;<a name="line.92"></a>
+<span class="sourceLineNo">093</span>   * @throws DeserializationException<a name="line.93"></a>
+<span class="sourceLineNo">094</span>   * @see #toByteArray<a name="line.94"></a>
+<span class="sourceLineNo">095</span>   */<a name="line.95"></a>
+<span class="sourceLineNo">096</span>  public static InclusiveStopFilter parseFrom(final byte [] pbBytes)<a name="line.96"></a>
+<span class="sourceLineNo">097</span>  throws DeserializationException {<a name="line.97"></a>
+<span class="sourceLineNo">098</span>    FilterProtos.InclusiveStopFilter proto;<a name="line.98"></a>
+<span class="sourceLineNo">099</span>    try {<a name="line.99"></a>
+<span class="sourceLineNo">100</span>      proto = FilterProtos.InclusiveStopFilter.parseFrom(pbBytes);<a name="line.100"></a>
+<span class="sourceLineNo">101</span>    } catch (InvalidProtocolBufferException e) {<a name="line.101"></a>
+<span class="sourceLineNo">102</span>      throw new DeserializationException(e);<a name="line.102"></a>
+<span class="sourceLineNo">103</span>    }<a name="line.103"></a>
+<span class="sourceLineNo">104</span>    return new InclusiveStopFilter(proto.hasStopRowKey()?proto.getStopRowKey().toByteArray():null);<a name="line.104"></a>
+<span class="sourceLineNo">105</span>  }<a name="line.105"></a>
+<span class="sourceLineNo">106</span><a name="line.106"></a>
+<span class="sourceLineNo">107</span>  /**<a name="line.107"></a>
+<span class="sourceLineNo">108</span>   * @param other<a name="line.108"></a>
+<span class="sourceLineNo">109</span>   * @return true if and only if the fields of the filter that are serialized<a name="line.109"></a>
+<span class="sourceLineNo">110</span>   * are equal to the corresponding fields in other.  Used for testing.<a name="line.110"></a>
+<span class="sourceLineNo">111</span>   */<a name="line.111"></a>
+<span class="sourceLineNo">112</span>  boolean areSerializedFieldsEqual(Filter o) {<a name="line.112"></a>
+<span class="sourceLineNo">113</span>    if (o == this) return true;<a name="line.113"></a>
+<span class="sourceLineNo">114</span>    if (!(o instanceof InclusiveStopFilter)) return false;<a name="line.114"></a>
+<span class="sourceLineNo">115</span><a name="line.115"></a>
+<span class="sourceLineNo">116</span>    InclusiveStopFilter other = (InclusiveStopFilter)o;<a name="line.116"></a>
+<span class="sourceLineNo">117</span>    return Bytes.equals(this.getStopRowKey(), other.getStopRowKey());<a name="line.117"></a>
+<span class="sourceLineNo">118</span>  }<a name="line.118"></a>
+<span class="sourceLineNo">119</span><a name="line.119"></a>
+<span class="sourceLineNo">120</span>  @Override<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  public String toString() {<a name="line.121"></a>
+<span class="sourceLineNo">122</span>    return this.getClass().getSimpleName() + " " + Bytes.toStringBinary(this.stopRowKey);<a name="line.122"></a>
+<span class="sourceLineNo">123</span>  }<a name="line.123"></a>
+<span class="sourceLineNo">124</span>}<a name="line.124"></a>
 
 
 


[49/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apache_hbase_reference_guide.pdfmarks
----------------------------------------------------------------------
diff --git a/apache_hbase_reference_guide.pdfmarks b/apache_hbase_reference_guide.pdfmarks
index f4acf1b..bdbcd2f 100644
--- a/apache_hbase_reference_guide.pdfmarks
+++ b/apache_hbase_reference_guide.pdfmarks
@@ -2,8 +2,8 @@
   /Author (Apache HBase Team)
   /Subject ()
   /Keywords ()
-  /ModDate (D:20160222154215)
-  /CreationDate (D:20160222154215)
+  /ModDate (D:20160223152541)
+  /CreationDate (D:20160223152541)
   /Creator (Asciidoctor PDF 1.5.0.alpha.6, based on Prawn 1.2.1)
   /Producer ()
   /DOCINFO pdfmark

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html b/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
index 4878524..62fe1c5 100644
--- a/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
+++ b/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html
@@ -101,7 +101,7 @@
 <br>
 <pre>@InterfaceAudience.Public
 @InterfaceStability.Evolving
-public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.287">HTableMultiplexer.HTableMultiplexerStatus</a>
+public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.276">HTableMultiplexer.HTableMultiplexerStatus</a>
 extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">HTableMultiplexerStatus keeps track of the current status of the HTableMultiplexer.
  report the number of buffered requests and the number of the failed (dropped) requests
@@ -201,7 +201,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>HTableMultiplexer.HTableMultiplexerStatus</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.297">HTableMultiplexer.HTableMultiplexerStatus</a>(<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,org.apache.hadoop.hbase.client.HTableMultiplexer.FlushWorker&gt;&nbsp;serverToFlushWorkerMap)</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.286">HTableMultiplexer.HTableMultiplexerStatus</a>(<a href="http://docs.oracle.com/javase/7/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/HRegionLocation.html" title="class in org.apache.hadoop.hbase">HRegionLocation</a>,org.apache.hadoop.hbase.client.HTableMultiplexer.FlushWorker&gt;&nbsp;serverToFlushWorkerMap)</pre>
 </li>
 </ul>
 </li>
@@ -218,7 +218,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalBufferedCounter</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.355">getTotalBufferedCounter</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.344">getTotalBufferedCounter</a>()</pre>
 </li>
 </ul>
 <a name="getTotalFailedCounter()">
@@ -227,7 +227,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getTotalFailedCounter</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.359">getTotalFailedCounter</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.348">getTotalFailedCounter</a>()</pre>
 </li>
 </ul>
 <a name="getMaxLatency()">
@@ -236,7 +236,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLatency</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.363">getMaxLatency</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.352">getMaxLatency</a>()</pre>
 </li>
 </ul>
 <a name="getOverallAverageLatency()">
@@ -245,7 +245,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getOverallAverageLatency</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.367">getOverallAverageLatency</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.356">getOverallAverageLatency</a>()</pre>
 </li>
 </ul>
 <a name="getBufferedCounterForEachRegionServer()">
@@ -254,7 +254,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getBufferedCounterForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.371">getBufferedCounterForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.360">getBufferedCounterForEachRegionServer</a>()</pre>
 </li>
 </ul>
 <a name="getFailedCounterForEachRegionServer()">
@@ -263,7 +263,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getFailedCounterForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.375">getFailedCounterForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.364">getFailedCounterForEachRegionServer</a>()</pre>
 </li>
 </ul>
 <a name="getMaxLatencyForEachRegionServer()">
@@ -272,7 +272,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxLatencyForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.379">getMaxLatencyForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.368">getMaxLatencyForEachRegionServer</a>()</pre>
 </li>
 </ul>
 <a name="getAverageLatencyForEachRegionServer()">
@@ -281,7 +281,7 @@ extends <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html?
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getAverageLatencyForEachRegionServer</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.383">getAverageLatencyForEachRegionServer</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html#line.372">getAverageLatencyForEachRegionServer</a>()</pre>
 </li>
 </ul>
 </li>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html b/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
index 2e4b62f..cada150 100644
--- a/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
+++ b/apidocs/org/apache/hadoop/hbase/client/HTableMultiplexer.html
@@ -432,7 +432,7 @@ public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.htm
 <li class="blockList">
 <h4>put</h4>
 <pre><a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.html#line.238">put</a>(byte[]&nbsp;tableName,
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.227">put</a>(byte[]&nbsp;tableName,
                      <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put,
                      int&nbsp;retry)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>Use <a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put)"><code>put(TableName, Put)</code></a> instead.</i></div>
@@ -445,7 +445,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <li class="blockList">
 <h4>put</h4>
 <pre><a href="http://docs.oracle.com/javase/7/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/HTableMultiplexer.html#line.246">put</a>(byte[]&nbsp;tableName,
+public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.235">put</a>(byte[]&nbsp;tableName,
                      <a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)</pre>
 <div class="block"><span class="strong">Deprecated.</span>&nbsp;<i>Use <a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.html#put(org.apache.hadoop.hbase.TableName,%20org.apache.hadoop.hbase.client.Put)"><code>put(TableName, Put)</code></a> instead.</i></div>
 </li>
@@ -456,7 +456,7 @@ public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbas
 <ul class="blockListLast">
 <li class="blockList">
 <h4>getHTableMultiplexerStatus</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.HTableMultiplexerStatus</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.253">getHTableMultiplexerStatus</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/HTableMultiplexer.HTableMultiplexerStatus.html" title="class in org.apache.hadoop.hbase.client">HTableMultiplexer.HTableMultiplexerStatus</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/client/HTableMultiplexer.html#line.242">getHTableMultiplexerStatus</a>()</pre>
 <dl><dt><span class="strong">Returns:</span></dt><dd>the current HTableMultiplexerStatus</dd></dl>
 </li>
 </ul>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html b/apidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
index e6d228b..0221ea0 100644
--- a/apidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
+++ b/apidocs/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html
@@ -338,7 +338,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>filterAllRemaining</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.71">filterAllRemaining</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.69">filterAllRemaining</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code>org.apache.hadoop.hbase.filter.FilterBase</code></strong></div>
 <div class="block">Filters that never filter all remaining can inherit this implementation that
  never stops the filter early.
@@ -359,7 +359,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>createFilterFromArguments</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.75">createFilterFromArguments</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;byte[]&gt;&nbsp;filterArguments)</pre>
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.html" title="class in org.apache.hadoop.hbase.filter">Filter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.73">createFilterFromArguments</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html?is-external=true" title="class or interface in java.util">ArrayList</a>&lt;byte[]&gt;&nbsp;filterArguments)</pre>
 </li>
 </ul>
 <a name="toByteArray()">
@@ -368,7 +368,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>toByteArray</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.85">toByteArray</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.83">toByteArray</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code>org.apache.hadoop.hbase.filter.FilterBase</code></strong></div>
 <div class="block">Return length 0 byte array for Filters that don't require special serialization</div>
 <dl>
@@ -383,7 +383,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockList">
 <li class="blockList">
 <h4>parseFrom</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter">InclusiveStopFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.98">parseFrom</a>(byte[]&nbsp;pbBytes)
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter">InclusiveStopFilter</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/filter/InclusiveStopFilter.html#line.96">parseFrom</a>(byte[]&nbsp;pbBytes)
                                      throws org.apache.hadoop.hbase.exceptions.DeserializationException</pre>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>pbBytes</code> - A pb serialized <a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>InclusiveStopFilter</code></a> instance</dd>
 <dt><span class="strong">Returns:</span></dt><dd>An instance of <a href="../../../../../org/apache/hadoop/hbase/filter/InclusiveStopFilter.html" title="class in org.apache.hadoop.hbase.filter"><code>InclusiveStopFilter</code></a> made from <code>bytes</code></dd>
@@ -397,7 +397,7 @@ extends org.apache.hadoop.hbase.filter.FilterBase</pre>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/filter/InclusiveStopFilter.html#line.123">toString</a>()</pre>
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/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/filter/InclusiveStopFilter.html#line.121">toString</a>()</pre>
 <div class="block"><strong>Description copied from class:&nbsp;<code>org.apache.hadoop.hbase.filter.FilterBase</code></strong></div>
 <div class="block">Return filter's info for debugging and logging purpose.</div>
 <dl>

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
----------------------------------------------------------------------
diff --git a/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html b/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
index c9208ac..57979da 100644
--- a/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
+++ b/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html
@@ -106,7 +106,7 @@
 <br>
 <pre>@InterfaceAudience.Public
 @InterfaceStability.Stable
-public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.103">TableInputFormatBase</a>
+public abstract class <a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.101">TableInputFormatBase</a>
 extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;</pre>
 <div class="block">A base for <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableInputFormat.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableInputFormat</code></a>s. Receives a <a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client"><code>Connection</code></a>, a <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase"><code>TableName</code></a>,
  an <a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client"><code>Scan</code></a> instance that defines the input columns etc. Subclasses may use
@@ -325,7 +325,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>MAPREDUCE_INPUT_AUTOBALANCE</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.107">MAPREDUCE_INPUT_AUTOBALANCE</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.105">MAPREDUCE_INPUT_AUTOBALANCE</a></pre>
 <div class="block">Specify if we enable auto-balance for input in M/R jobs.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.MAPREDUCE_INPUT_AUTOBALANCE">Constant Field Values</a></dd></dl>
 </li>
@@ -336,7 +336,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>INPUT_AUTOBALANCE_MAXSKEWRATIO</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.110">INPUT_AUTOBALANCE_MAXSKEWRATIO</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.108">INPUT_AUTOBALANCE_MAXSKEWRATIO</a></pre>
 <div class="block">Specify if ratio for data skew in M/R jobs, it goes well with the enabling hbase.mapreduce
  .input.autobalance property.</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.INPUT_AUTOBALANCE_MAXSKEWRATIO">Constant Field Values</a></dd></dl>
@@ -348,7 +348,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TABLE_ROW_TEXTKEY</h4>
-<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.114">TABLE_ROW_TEXTKEY</a></pre>
+<pre>public static final&nbsp;<a href="http://docs.oracle.com/javase/7/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/mapreduce/TableInputFormatBase.html#line.112">TABLE_ROW_TEXTKEY</a></pre>
 <div class="block">Specify if the row key in table is text (ASCII between 32~126),
  default is true. False means the table is using binary row key</div>
 <dl><dt><span class="strong">See Also:</span></dt><dd><a href="../../../../../constant-values.html#org.apache.hadoop.hbase.mapreduce.TableInputFormatBase.TABLE_ROW_TEXTKEY">Constant Field Values</a></dd></dl>
@@ -368,7 +368,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockListLast">
 <li class="blockList">
 <h4>TableInputFormatBase</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.103">TableInputFormatBase</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.101">TableInputFormatBase</a>()</pre>
 </li>
 </ul>
 </li>
@@ -385,7 +385,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>createRecordReader</h4>
-<pre>public&nbsp;org.apache.hadoop.mapreduce.RecordReader&lt;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.158">createRecordReader</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;split,
+<pre>public&nbsp;org.apache.hadoop.mapreduce.RecordReader&lt;<a href="../../../../../org/apache/hadoop/hbase/io/ImmutableBytesWritable.html" title="class in org.apache.hadoop.hbase.io">ImmutableBytesWritable</a>,<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.156">createRecordReader</a>(org.apache.hadoop.mapreduce.InputSplit&nbsp;split,
                                                                                          org.apache.hadoop.mapreduce.TaskAttemptContext&nbsp;context)
                                                                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Builds a <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a>. If no <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a> was provided, uses
@@ -407,7 +407,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getStartEndKeys</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.219">getStartEndKeys</a>()
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[][],byte[][]&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.217">getStartEndKeys</a>()
                                            throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl><dt><span class="strong">Throws:</span></dt>
 <dd><code><a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></code></dd></dl>
@@ -419,7 +419,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplits</h4>
-<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.234">getSplits</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
+<pre>public&nbsp;<a href="http://docs.oracle.com/javase/7/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.mapreduce.InputSplit&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.232">getSplits</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
                                                        throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Calculates the splits that will serve as input for the map tasks. The
  number of splits matches the number of regions in a table.</div>
@@ -439,7 +439,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>includeRegionInSplit</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.552">includeRegionInSplit</a>(byte[]&nbsp;startKey,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.545">includeRegionInSplit</a>(byte[]&nbsp;startKey,
                            byte[]&nbsp;endKey)</pre>
 <div class="block">Test if the given region is to be included in the InputSplit while splitting
  the regions of a table.
@@ -463,7 +463,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionLocator</h4>
-<pre>protected&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/mapreduce/TableInputFormatBase.html#line.559">getRegionLocator</a>()</pre>
+<pre>protected&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/mapreduce/TableInputFormatBase.html#line.552">getRegionLocator</a>()</pre>
 <div class="block">Allows subclasses to get the <a href="../../../../../org/apache/hadoop/hbase/client/RegionLocator.html" title="interface in org.apache.hadoop.hbase.client"><code>RegionLocator</code></a>.</div>
 </li>
 </ul>
@@ -473,7 +473,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getTable</h4>
-<pre>protected&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/mapreduce/TableInputFormatBase.html#line.569">getTable</a>()</pre>
+<pre>protected&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/mapreduce/TableInputFormatBase.html#line.562">getTable</a>()</pre>
 <div class="block">Allows subclasses to get the <a href="../../../../../org/apache/hadoop/hbase/client/Table.html" title="interface in org.apache.hadoop.hbase.client"><code>Table</code></a>.</div>
 </li>
 </ul>
@@ -483,7 +483,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getAdmin</h4>
-<pre>protected&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/mapreduce/TableInputFormatBase.html#line.579">getAdmin</a>()</pre>
+<pre>protected&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/mapreduce/TableInputFormatBase.html#line.572">getAdmin</a>()</pre>
 <div class="block">Allows subclasses to get the <a href="../../../../../org/apache/hadoop/hbase/client/Admin.html" title="interface in org.apache.hadoop.hbase.client"><code>Admin</code></a>.</div>
 </li>
 </ul>
@@ -493,7 +493,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeTable</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.593">initializeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.586">initializeTable</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Connection.html" title="interface in org.apache.hadoop.hbase.client">Connection</a>&nbsp;connection,
                    <a href="../../../../../org/apache/hadoop/hbase/TableName.html" title="class in org.apache.hadoop.hbase">TableName</a>&nbsp;tableName)
                         throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Allows subclasses to initialize the table information.</div>
@@ -508,7 +508,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>getScan</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.609">getScan</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.602">getScan</a>()</pre>
 <div class="block">Gets the scan defining the actual details like columns etc.</div>
 <dl><dt><span class="strong">Returns:</span></dt><dd>The internal scan instance.</dd></dl>
 </li>
@@ -519,7 +519,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>setScan</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.619">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.612">setScan</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)</pre>
 <div class="block">Sets the scan defining the actual details like columns etc.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>scan</code> - The scan to set.</dd></dl>
 </li>
@@ -530,7 +530,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableRecordReader</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.629">setTableRecordReader</a>(<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReader</a>&nbsp;tableRecordReader)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.622">setTableRecordReader</a>(<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce">TableRecordReader</a>&nbsp;tableRecordReader)</pre>
 <div class="block">Allows subclasses to set the <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a>.</div>
 <dl><dt><span class="strong">Parameters:</span></dt><dd><code>tableRecordReader</code> - A different <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableRecordReader.html" title="class in org.apache.hadoop.hbase.mapreduce"><code>TableRecordReader</code></a>
    implementation.</dd></dl>
@@ -542,7 +542,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockList">
 <li class="blockList">
 <h4>initialize</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.648">initialize</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.641">initialize</a>(org.apache.hadoop.mapreduce.JobContext&nbsp;context)
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Handle subclass specific set up.
  Each of the entry points used by the MapReduce framework,
@@ -566,7 +566,7 @@ extends org.apache.hadoop.mapreduce.InputFormat&lt;<a href="../../../../../org/a
 <ul class="blockListLast">
 <li class="blockList">
 <h4>closeTable</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.657">closeTable</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#line.650">closeTable</a>()
                    throws <a href="http://docs.oracle.com/javase/7/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Close the Table and related objects that were initialized via
  <a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableInputFormatBase.html#initializeTable(org.apache.hadoop.hbase.client.Connection,%20org.apache.hadoop.hbase.TableName)"><code>initializeTable(Connection, TableName)</code></a>.</div>


[51/51] [partial] hbase-site git commit: Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.

Posted by mi...@apache.org.
Published site at 58283fa1b1b10beec62cefa40babff6a1424b06c.


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

Branch: refs/heads/asf-site
Commit: d02dd5db7307294a5532521627cc0e324be2a550
Parents: f6cc922
Author: jenkins <bu...@apache.org>
Authored: Tue Feb 23 15:34:04 2016 +0000
Committer: Misty Stanley-Jones <ms...@cloudera.com>
Committed: Tue Feb 23 09:06:51 2016 -0800

----------------------------------------------------------------------
 acid-semantics.html                             |     4 +-
 apache_hbase_reference_guide.pdf                | 22500 +++++++++--------
 apache_hbase_reference_guide.pdfmarks           |     4 +-
 ...ableMultiplexer.HTableMultiplexerStatus.html |    20 +-
 .../hadoop/hbase/client/HTableMultiplexer.html  |     6 +-
 .../hbase/filter/InclusiveStopFilter.html       |    10 +-
 .../hbase/mapreduce/TableInputFormatBase.html   |    36 +-
 ...ableMultiplexer.HTableMultiplexerStatus.html |   907 +-
 .../hadoop/hbase/client/HTableMultiplexer.html  |   907 +-
 .../hbase/filter/InclusiveStopFilter.html       |   122 +-
 .../hbase/mapreduce/TableInputFormatBase.html   |  1269 +-
 book.html                                       |   146 +-
 bulk-loads.html                                 |     4 +-
 checkstyle-aggregate.html                       |  9832 ++++---
 checkstyle.rss                                  |    44 +-
 coc.html                                        |     4 +-
 cygwin.html                                     |     4 +-
 dependencies.html                               |     4 +-
 dependency-convergence.html                     |     4 +-
 dependency-info.html                            |     4 +-
 dependency-management.html                      |     4 +-
 devapidocs/allclasses-frame.html                |     2 +
 devapidocs/allclasses-noframe.html              |     2 +
 devapidocs/constant-values.html                 |     2 +-
 devapidocs/index-all.html                       |    60 +-
 .../hadoop/hbase/class-use/TableName.html       |   382 +-
 .../class-use/InterfaceAudience.Private.html    |   165 +-
 .../class-use/InterfaceStability.Unstable.html  |    12 +-
 .../hbase/classification/package-tree.html      |     6 +-
 .../AsyncProcess.AsyncRequestFutureImpl.html    |    26 +-
 .../hadoop/hbase/client/AsyncProcess.Retry.html |    12 +-
 .../hadoop/hbase/client/AsyncProcess.html       |    22 +-
 .../HTableMultiplexer.AtomicAverageCounter.html |    18 +-
 .../client/HTableMultiplexer.FlushWorker.html   |    54 +-
 ...ableMultiplexer.HTableMultiplexerStatus.html |    38 +-
 .../client/HTableMultiplexer.PutStatus.html     |    10 +-
 .../hadoop/hbase/client/HTableMultiplexer.html  |    54 +-
 .../hadoop/hbase/client/class-use/Put.html      |    42 +-
 .../hadoop/hbase/client/package-tree.html       |     6 +-
 .../hbase/exceptions/ClientExceptionsUtil.html  |    10 +-
 .../hadoop/hbase/executor/package-tree.html     |     2 +-
 .../hbase/filter/InclusiveStopFilter.html       |    12 +-
 .../hadoop/hbase/filter/package-tree.html       |    12 +-
 .../hfile/bucket/BucketCache.BucketEntry.html   |    42 +-
 .../bucket/BucketCache.BucketEntryGroup.html    |    22 +-
 .../hfile/bucket/BucketCache.RAMQueueEntry.html |    20 +-
 .../bucket/BucketCache.StatisticsThread.html    |     8 +-
 .../hfile/bucket/BucketCache.WriterThread.html  |    14 +-
 .../hbase/io/hfile/bucket/BucketCache.html      |    72 +-
 .../io/hfile/bucket/ByteBufferIOEngine.html     |    28 +-
 .../hbase/io/hfile/bucket/FileIOEngine.html     |     4 +-
 .../hbase/io/hfile/bucket/FileMmapEngine.html   |   531 +
 .../hadoop/hbase/io/hfile/bucket/IOEngine.html  |     6 +-
 .../hfile/bucket/class-use/FileMmapEngine.html  |   115 +
 .../io/hfile/bucket/class-use/IOEngine.html     |     7 +
 .../hbase/io/hfile/bucket/package-frame.html    |     1 +
 .../hbase/io/hfile/bucket/package-summary.html  |     7 +
 .../hbase/io/hfile/bucket/package-tree.html     |     1 +
 .../hbase/io/hfile/class-use/Cacheable.html     |    12 +
 .../hfile/class-use/CacheableDeserializer.html  |     6 +
 .../hadoop/hbase/io/hfile/package-tree.html     |     6 +-
 .../hbase/mapreduce/TableInputFormatBase.html   |    68 +-
 .../hadoop/hbase/mapreduce/package-tree.html    |     6 +-
 .../hadoop/hbase/master/package-tree.html       |     6 +-
 .../hbase/master/procedure/package-tree.html    |     2 +-
 .../hadoop/hbase/nio/class-use/ByteBuff.html    |     5 +
 .../org/apache/hadoop/hbase/package-tree.html   |    10 +-
 .../hadoop/hbase/procedure2/package-tree.html   |     2 +-
 .../hadoop/hbase/quotas/package-tree.html       |     4 +-
 .../hadoop/hbase/regionserver/package-tree.html |    24 +-
 .../hadoop/hbase/rest/model/package-tree.html   |     2 +-
 ...BulkLoadEndpoint.SecureBulkLoadListener.html |    22 +-
 .../security/access/SecureBulkLoadEndpoint.html |    10 +-
 .../hbase/security/access/package-tree.html     |     2 +-
 .../hadoop/hbase/security/package-tree.html     |     2 +-
 .../hadoop/hbase/thrift/package-tree.html       |     2 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |    96 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    48 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    24 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    12 +-
 ...ndedPriorityBlockingQueue.PriorityQueue.html |     4 +-
 .../hadoop/hbase/util/ByteBufferAllocator.html  |   218 +
 .../hbase/util/ByteBufferArray.Visitor.html     |     4 +-
 .../hadoop/hbase/util/ByteBufferArray.html      |    82 +-
 .../util/class-use/ByteBufferAllocator.html     |   170 +
 .../hbase/util/class-use/ByteBufferArray.html   |     4 +
 .../apache/hadoop/hbase/util/package-frame.html |     1 +
 .../hadoop/hbase/util/package-summary.html      |    36 +-
 .../apache/hadoop/hbase/util/package-tree.html  |     7 +-
 .../apache/hadoop/hbase/util/package-use.html   |   139 +-
 .../apache/hadoop/hbase/wal/package-tree.html   |     2 +-
 devapidocs/overview-tree.html                   |     2 +
 .../client/AsyncProcess.AsyncRequestFuture.html |   919 +-
 ...stFutureImpl.ReplicaCallIssuingRunnable.html |   919 +-
 ...tFutureImpl.SingleServerRequestRunnable.html |   919 +-
 .../AsyncProcess.AsyncRequestFutureImpl.html    |   919 +-
 .../hbase/client/AsyncProcess.BatchErrors.html  |   919 +-
 .../client/AsyncProcess.ReplicaResultState.html |   919 +-
 .../hadoop/hbase/client/AsyncProcess.Retry.html |   919 +-
 .../hadoop/hbase/client/AsyncProcess.html       |   919 +-
 .../HTableMultiplexer.AtomicAverageCounter.html |   907 +-
 .../client/HTableMultiplexer.FlushWorker.html   |   907 +-
 ...ableMultiplexer.HTableMultiplexerStatus.html |   907 +-
 .../client/HTableMultiplexer.PutStatus.html     |   907 +-
 .../hadoop/hbase/client/HTableMultiplexer.html  |   907 +-
 .../hbase/exceptions/ClientExceptionsUtil.html  |   146 +-
 .../hbase/filter/InclusiveStopFilter.html       |   122 +-
 .../hfile/bucket/BucketCache.BucketEntry.html   |  2315 +-
 .../bucket/BucketCache.BucketEntryGroup.html    |  2315 +-
 .../hfile/bucket/BucketCache.RAMQueueEntry.html |  2315 +-
 .../bucket/BucketCache.StatisticsThread.html    |  2315 +-
 .../hfile/bucket/BucketCache.WriterThread.html  |  2315 +-
 .../hbase/io/hfile/bucket/BucketCache.html      |  2315 +-
 .../io/hfile/bucket/ByteBufferIOEngine.html     |   196 +-
 .../hbase/io/hfile/bucket/FileMmapEngine.html   |   238 +
 .../hbase/mapreduce/TableInputFormatBase.html   |  1269 +-
 ...BulkLoadEndpoint.SecureBulkLoadListener.html |   338 +-
 .../security/access/SecureBulkLoadEndpoint.html |   338 +-
 .../tmpl/master/MasterStatusTmpl.ImplData.html  |   240 +-
 .../tmpl/master/MasterStatusTmpl.Intf.html      |   240 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    68 +-
 .../regionserver/RSStatusTmpl.ImplData.html     |    60 +-
 .../tmpl/regionserver/RSStatusTmpl.Intf.html    |    60 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    60 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    20 +-
 .../hadoop/hbase/util/ByteBufferAllocator.html  |   111 +
 .../hbase/util/ByteBufferArray.Visitor.html     |   504 +-
 .../hadoop/hbase/util/ByteBufferArray.html      |   504 +-
 distribution-management.html                    |     4 +-
 export_control.html                             |     4 +-
 hbase-annotations/checkstyle.html               |     6 +-
 hbase-annotations/dependencies.html             |     6 +-
 hbase-annotations/dependency-convergence.html   |     6 +-
 hbase-annotations/dependency-info.html          |     6 +-
 hbase-annotations/dependency-management.html    |     6 +-
 hbase-annotations/distribution-management.html  |     6 +-
 hbase-annotations/index.html                    |     6 +-
 hbase-annotations/integration.html              |     6 +-
 hbase-annotations/issue-tracking.html           |     6 +-
 hbase-annotations/license.html                  |     6 +-
 hbase-annotations/mail-lists.html               |     6 +-
 hbase-annotations/plugin-management.html        |     6 +-
 hbase-annotations/plugins.html                  |     6 +-
 hbase-annotations/project-info.html             |     6 +-
 hbase-annotations/project-reports.html          |     6 +-
 hbase-annotations/project-summary.html          |     6 +-
 hbase-annotations/source-repository.html        |     6 +-
 hbase-annotations/team-list.html                |     6 +-
 hbase-archetypes/dependencies.html              |     6 +-
 hbase-archetypes/dependency-convergence.html    |     6 +-
 hbase-archetypes/dependency-info.html           |     6 +-
 hbase-archetypes/dependency-management.html     |     6 +-
 hbase-archetypes/distribution-management.html   |     6 +-
 .../hbase-archetype-builder/dependencies.html   |     6 +-
 .../dependency-convergence.html                 |     6 +-
 .../dependency-info.html                        |     6 +-
 .../dependency-management.html                  |     6 +-
 .../distribution-management.html                |     6 +-
 .../hbase-archetype-builder/index.html          |     6 +-
 .../hbase-archetype-builder/integration.html    |     6 +-
 .../hbase-archetype-builder/issue-tracking.html |     6 +-
 .../hbase-archetype-builder/license.html        |     6 +-
 .../hbase-archetype-builder/mail-lists.html     |     6 +-
 .../plugin-management.html                      |     6 +-
 .../hbase-archetype-builder/plugins.html        |     6 +-
 .../hbase-archetype-builder/project-info.html   |     6 +-
 .../project-summary.html                        |     6 +-
 .../source-repository.html                      |     6 +-
 .../hbase-archetype-builder/team-list.html      |     6 +-
 .../hbase-client-project/checkstyle.html        |     6 +-
 .../hbase-client-project/dependencies.html      |     6 +-
 .../dependency-convergence.html                 |     6 +-
 .../hbase-client-project/dependency-info.html   |     6 +-
 .../dependency-management.html                  |     6 +-
 .../distribution-management.html                |     6 +-
 .../hbase-client-project/index.html             |     6 +-
 .../hbase-client-project/integration.html       |     6 +-
 .../hbase-client-project/issue-tracking.html    |     6 +-
 .../hbase-client-project/license.html           |     6 +-
 .../hbase-client-project/mail-lists.html        |     6 +-
 .../hbase-client-project/plugin-management.html |     6 +-
 .../hbase-client-project/plugins.html           |     6 +-
 .../hbase-client-project/project-info.html      |     6 +-
 .../hbase-client-project/project-reports.html   |     6 +-
 .../hbase-client-project/project-summary.html   |     6 +-
 .../hbase-client-project/source-repository.html |     6 +-
 .../hbase-client-project/team-list.html         |     6 +-
 hbase-archetypes/index.html                     |     6 +-
 hbase-archetypes/integration.html               |     6 +-
 hbase-archetypes/issue-tracking.html            |     6 +-
 hbase-archetypes/license.html                   |     6 +-
 hbase-archetypes/mail-lists.html                |     6 +-
 hbase-archetypes/modules.html                   |     6 +-
 hbase-archetypes/plugin-management.html         |     6 +-
 hbase-archetypes/plugins.html                   |     6 +-
 hbase-archetypes/project-info.html              |     6 +-
 hbase-archetypes/project-summary.html           |     6 +-
 hbase-archetypes/source-repository.html         |     6 +-
 hbase-archetypes/team-list.html                 |     6 +-
 hbase-spark/checkstyle.html                     |     6 +-
 hbase-spark/dependencies.html                   |     6 +-
 hbase-spark/dependency-convergence.html         |     6 +-
 hbase-spark/dependency-info.html                |     6 +-
 hbase-spark/dependency-management.html          |     6 +-
 hbase-spark/distribution-management.html        |     6 +-
 hbase-spark/index.html                          |     6 +-
 hbase-spark/integration.html                    |     6 +-
 hbase-spark/issue-tracking.html                 |     6 +-
 hbase-spark/license.html                        |     6 +-
 hbase-spark/mail-lists.html                     |     6 +-
 hbase-spark/plugin-management.html              |     6 +-
 hbase-spark/plugins.html                        |     6 +-
 hbase-spark/project-info.html                   |     6 +-
 hbase-spark/project-reports.html                |     6 +-
 hbase-spark/project-summary.html                |     6 +-
 hbase-spark/source-repository.html              |     6 +-
 hbase-spark/team-list.html                      |     6 +-
 index.html                                      |     4 +-
 integration.html                                |     4 +-
 issue-tracking.html                             |     4 +-
 license.html                                    |     4 +-
 mail-lists.html                                 |     4 +-
 metrics.html                                    |     4 +-
 modules.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/constant-values.html             |    19 -
 testdevapidocs/index-all.html                   |    30 +-
 .../client/TestHTableMultiplexerFlushCache.html |    48 +-
 .../client/TestHTableMultiplexerViaMocks.html   |   150 +-
 .../hbase/filter/TestFilter.SlowScanFilter.html |    12 +-
 .../apache/hadoop/hbase/filter/TestFilter.html  |    94 +-
 .../hbase/io/hfile/bucket/TestFileIOEngine.html |     4 +-
 .../io/hfile/bucket/TestFileMmapEngine.html     |   260 +
 .../bucket/class-use/TestFileMmapEngine.html    |   115 +
 .../hbase/io/hfile/bucket/package-frame.html    |     1 +
 .../hbase/io/hfile/bucket/package-summary.html  |     6 +
 .../hbase/io/hfile/bucket/package-tree.html     |     1 +
 .../mapreduce/TestTableInputFormatBase.html     |    12 +-
 .../org/apache/hadoop/hbase/package-tree.html   |     8 +-
 .../hadoop/hbase/regionserver/package-tree.html |     2 +-
 .../hadoop/hbase/util/TestByteBufferArray.html  |     6 +-
 testdevapidocs/overview-tree.html               |     1 +
 .../client/TestHTableMultiplexerFlushCache.html |   242 +-
 .../client/TestHTableMultiplexerViaMocks.html   |   227 +-
 .../hbase/filter/TestFilter.OldTestFilter.html  |  2731 +-
 .../hbase/filter/TestFilter.SlowScanFilter.html |  2731 +-
 .../apache/hadoop/hbase/filter/TestFilter.html  |  2731 +-
 .../io/hfile/bucket/TestFileMmapEngine.html     |   140 +
 .../mapreduce/TestTableInputFormatBase.html     |    56 +-
 .../hadoop/hbase/util/TestByteBufferArray.html  |    54 +-
 xref-test/allclasses-frame.html                 |     3 +
 .../client/TestHTableMultiplexerFlushCache.html |   242 +-
 .../client/TestHTableMultiplexerViaMocks.html   |   227 +-
 .../apache/hadoop/hbase/filter/TestFilter.html  |  2731 +-
 .../io/hfile/bucket/TestFileMmapEngine.html     |    82 +
 .../hbase/io/hfile/bucket/package-frame.html    |     3 +
 .../hbase/io/hfile/bucket/package-summary.html  |     5 +
 .../mapreduce/TestTableInputFormatBase.html     |    56 +-
 .../hadoop/hbase/util/TestByteBufferArray.html  |    54 +-
 xref/allclasses-frame.html                      |     6 +
 .../hadoop/hbase/client/AsyncProcess.html       |   919 +-
 .../hadoop/hbase/client/HTableMultiplexer.html  |   907 +-
 .../hbase/exceptions/ClientExceptionsUtil.html  |   146 +-
 .../hbase/filter/InclusiveStopFilter.html       |   122 +-
 .../hbase/io/hfile/bucket/BucketCache.html      |  2315 +-
 .../io/hfile/bucket/ByteBufferIOEngine.html     |   196 +-
 .../hbase/io/hfile/bucket/FileMmapEngine.html   |   180 +
 .../hbase/io/hfile/bucket/package-frame.html    |     3 +
 .../hbase/io/hfile/bucket/package-summary.html  |     5 +
 .../hbase/mapreduce/TableInputFormatBase.html   |  1269 +-
 .../security/access/SecureBulkLoadEndpoint.html |   338 +-
 .../hbase/tmpl/common/TaskMonitorTmpl.html      |    60 +-
 .../hbase/tmpl/common/TaskMonitorTmplImpl.html  |    16 +-
 .../hbase/tmpl/master/MasterStatusTmpl.html     |   240 +-
 .../hbase/tmpl/master/MasterStatusTmplImpl.html |    68 +-
 .../hbase/tmpl/regionserver/RSStatusTmpl.html   |    60 +-
 .../tmpl/regionserver/RSStatusTmplImpl.html     |    20 +-
 .../hadoop/hbase/util/ByteBufferAllocator.html  |    53 +
 .../hadoop/hbase/util/ByteBufferArray.html      |   504 +-
 .../apache/hadoop/hbase/util/package-frame.html |     3 +
 .../hadoop/hbase/util/package-summary.html      |     5 +
 299 files changed, 46564 insertions(+), 44104 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase-site/blob/d02dd5db/acid-semantics.html
----------------------------------------------------------------------
diff --git a/acid-semantics.html b/acid-semantics.html
index f48a6dd..210f743 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="20160222" />
+    <meta name="Date-Revision-yyyymmdd" content="20160223" />
     <meta http-equiv="Content-Language" content="en" />
     <title>Apache HBase &#x2013;  
       Apache HBase (TM) ACID Properties
@@ -600,7 +600,7 @@ under the License. -->
                         <a href="http://www.apache.org/">The Apache Software Foundation</a>.
             All rights reserved.      
                     
-                  <li id="publishDate" class="pull-right">Last Published: 2016-02-22</li>
+                  <li id="publishDate" class="pull-right">Last Published: 2016-02-23</li>
             </p>
                 </div>