You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2019/08/14 14:42:04 UTC

[hbase-site] branch asf-site updated: Published site at 27ed2ac071f0867df315a7e5d8acf49aabcd9399.

This is an automated email from the ASF dual-hosted git repository.

git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hbase-site.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new 433d453  Published site at 27ed2ac071f0867df315a7e5d8acf49aabcd9399.
433d453 is described below

commit 433d453887335f1eda9816ed245c8f7e292bf2fb
Author: jenkins <bu...@apache.org>
AuthorDate: Wed Aug 14 14:41:52 2019 +0000

    Published site at 27ed2ac071f0867df315a7e5d8acf49aabcd9399.
---
 acid-semantics.html                                |     2 +-
 apache_hbase_reference_guide.pdf                   |     4 +-
 book.html                                          |     2 +-
 bulk-loads.html                                    |     2 +-
 checkstyle-aggregate.html                          |   354 +-
 coc.html                                           |     2 +-
 dependencies.html                                  |     2 +-
 dependency-convergence.html                        |     2 +-
 dependency-info.html                               |     2 +-
 dependency-management.html                         |     2 +-
 devapidocs/constant-values.html                    |     4 +-
 .../org/apache/hadoop/hbase/MetaTableAccessor.html |     6 +-
 .../apache/hadoop/hbase/client/class-use/Put.html  |     2 +-
 .../hadoop/hbase/client/class-use/TableState.html  |     2 +-
 .../HRegion.BatchOperation.Visitor.html            |     4 +-
 .../hbase/regionserver/HRegion.BatchOperation.html |    78 +-
 .../regionserver/HRegion.BulkLoadListener.html     |     8 +-
 .../regionserver/HRegion.FlushResult.Result.html   |    10 +-
 .../hbase/regionserver/HRegion.FlushResult.html    |     8 +-
 .../HRegion.MutationBatchOperation.html            |    44 +-
 .../regionserver/HRegion.RegionScannerImpl.html    |    90 +-
 .../regionserver/HRegion.ReplayBatchOperation.html |    32 +-
 .../hbase/regionserver/HRegion.RowLockContext.html |    28 +-
 .../hbase/regionserver/HRegion.RowLockImpl.html    |    16 +-
 .../apache/hadoop/hbase/regionserver/HRegion.html  |   462 +-
 .../hbase/MetaTableAccessor.CloseableVisitor.html  |     2 +-
 .../hbase/MetaTableAccessor.CollectAllVisitor.html |     2 +-
 .../hbase/MetaTableAccessor.CollectingVisitor.html |     2 +-
 .../MetaTableAccessor.DefaultVisitorBase.html      |     2 +-
 .../hadoop/hbase/MetaTableAccessor.QueryType.html  |     2 +-
 ...MetaTableAccessor.ReplicationBarrierResult.html |     2 +-
 .../hadoop/hbase/MetaTableAccessor.Visitor.html    |     2 +-
 .../org/apache/hadoop/hbase/MetaTableAccessor.html |     2 +-
 .../src-html/org/apache/hadoop/hbase/Version.html  |     4 +-
 .../HRegion.BatchOperation.Visitor.html            | 14435 ++++++++++---------
 .../hbase/regionserver/HRegion.BatchOperation.html | 14435 ++++++++++---------
 .../regionserver/HRegion.BulkLoadListener.html     | 14435 ++++++++++---------
 .../regionserver/HRegion.FlushResult.Result.html   | 14435 ++++++++++---------
 .../hbase/regionserver/HRegion.FlushResult.html    | 14435 ++++++++++---------
 .../regionserver/HRegion.FlushResultImpl.html      | 14435 ++++++++++---------
 .../HRegion.MutationBatchOperation.html            | 14435 ++++++++++---------
 .../HRegion.ObservedExceptionsInBatch.html         | 14435 ++++++++++---------
 .../regionserver/HRegion.PrepareFlushResult.html   | 14435 ++++++++++---------
 .../regionserver/HRegion.RegionScannerImpl.html    | 14435 ++++++++++---------
 .../regionserver/HRegion.ReplayBatchOperation.html | 14435 ++++++++++---------
 .../hbase/regionserver/HRegion.RowLockContext.html | 14435 ++++++++++---------
 .../hbase/regionserver/HRegion.RowLockImpl.html    | 14435 ++++++++++---------
 .../hbase/regionserver/HRegion.WriteState.html     | 14435 ++++++++++---------
 .../apache/hadoop/hbase/regionserver/HRegion.html  | 14435 ++++++++++---------
 downloads.html                                     |     2 +-
 export_control.html                                |     2 +-
 index.html                                         |     2 +-
 issue-tracking.html                                |     2 +-
 mail-lists.html                                    |     2 +-
 metrics.html                                       |     2 +-
 old_news.html                                      |     2 +-
 plugin-management.html                             |     2 +-
 plugins.html                                       |     2 +-
 poweredbyhbase.html                                |     2 +-
 project-info.html                                  |     2 +-
 project-reports.html                               |     2 +-
 project-summary.html                               |     2 +-
 pseudo-distributed.html                            |     2 +-
 replication.html                                   |     2 +-
 resources.html                                     |     2 +-
 source-repository.html                             |     2 +-
 sponsors.html                                      |     2 +-
 supportingprojects.html                            |     2 +-
 team-list.html                                     |     2 +-
 69 files changed, 108899 insertions(+), 108854 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index d5a9d53..a1c1266 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -450,7 +450,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/apache_hbase_reference_guide.pdf b/apache_hbase_reference_guide.pdf
index 6259d7f..998427d 100644
--- a/apache_hbase_reference_guide.pdf
+++ b/apache_hbase_reference_guide.pdf
@@ -5,8 +5,8 @@
 /Author (Apache HBase Team)
 /Creator (Asciidoctor PDF 1.5.0.alpha.15, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20190813143843+00'00')
-/CreationDate (D:20190813143843+00'00')
+/ModDate (D:20190814143859+00'00')
+/CreationDate (D:20190814143859+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index 83a1336..2f04cd9 100644
--- a/book.html
+++ b/book.html
@@ -42882,7 +42882,7 @@ org/apache/hadoop/hbase/security/access/AccessControlClient.revoke:(Lorg/apache/
 <div id="footer">
 <div id="footer-text">
 Version 3.0.0-SNAPSHOT<br>
-Last updated 2019-08-13 14:29:47 UTC
+Last updated 2019-08-14 14:29:43 UTC
 </div>
 </div>
 </body>
diff --git a/bulk-loads.html b/bulk-loads.html
index b6cfbcb..18a05ef 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -155,7 +155,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 573186d..ca8aff9 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -58800,1057 +58800,1057 @@
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 109).</td>
-<td>1568</td></tr>
+<td>1571</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>1570</td></tr>
+<td>1573</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 180 lines (max allowed is 150).</td>
-<td>1578</td></tr>
+<td>1581</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>1619</td></tr>
+<td>1622</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1809</td></tr>
+<td>1812</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>1816</td></tr>
+<td>1819</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2035</td></tr>
+<td>2038</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2051</td></tr>
+<td>2054</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2113</td></tr>
+<td>2116</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2281</td></tr>
+<td>2284</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>2304</td></tr>
+<td>2307</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>2307</td></tr>
+<td>2310</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>2354</td></tr>
+<td>2357</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>2355</td></tr>
+<td>2358</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>2544</td></tr>
+<td>2547</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>2652</td></tr>
+<td>2655</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2724</td></tr>
+<td>2727</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>2743</td></tr>
+<td>2746</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2765</td></tr>
+<td>2768</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>2797</td></tr>
+<td>2800</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>2941</td></tr>
+<td>2944</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def' child has incorrect indentation level 3, expected level should be 4.</td>
-<td>2956</td></tr>
+<td>2959</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3006</td></tr>
+<td>3009</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3046</td></tr>
+<td>3049</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3058</td></tr>
+<td>3061</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3059</td></tr>
+<td>3062</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3060</td></tr>
+<td>3063</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>3061</td></tr>
+<td>3064</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4156</td></tr>
+<td>4159</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>4206</td></tr>
+<td>4209</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>4303</td></tr>
+<td>4306</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4379</td></tr>
+<td>4382</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4389</td></tr>
+<td>4392</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4390</td></tr>
+<td>4393</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4395</td></tr>
+<td>4398</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4439</td></tr>
+<td>4442</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 3, expected level should be 4.</td>
-<td>4473</td></tr>
+<td>4476</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 5, expected level should be 6.</td>
-<td>4474</td></tr>
+<td>4477</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4553</td></tr>
+<td>4556</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4555</td></tr>
+<td>4558</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>4616</td></tr>
+<td>4619</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>4618</td></tr>
+<td>4621</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>4619</td></tr>
+<td>4622</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>4709</td></tr>
+<td>4712</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 195 lines (max allowed is 150).</td>
-<td>4761</td></tr>
+<td>4764</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 9, expected level should be 8.</td>
-<td>4954</td></tr>
+<td>4957</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>5042</td></tr>
+<td>5045</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5043</td></tr>
+<td>5046</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5044</td></tr>
+<td>5047</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>5045</td></tr>
+<td>5048</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5046</td></tr>
+<td>5049</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5047</td></tr>
+<td>5050</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>5048</td></tr>
+<td>5051</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5049</td></tr>
+<td>5052</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5050</td></tr>
+<td>5053</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>5051</td></tr>
+<td>5054</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5052</td></tr>
+<td>5055</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5053</td></tr>
+<td>5056</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>5054</td></tr>
+<td>5057</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5055</td></tr>
+<td>5058</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method call' child has incorrect indentation level 10, expected level should be 12.</td>
-<td>5056</td></tr>
+<td>5059</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>5058</td></tr>
+<td>5061</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5304</td></tr>
+<td>5307</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5305</td></tr>
+<td>5308</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5306</td></tr>
+<td>5309</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5307</td></tr>
+<td>5310</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5370</td></tr>
+<td>5373</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5810</td></tr>
+<td>5813</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>5899</td></tr>
+<td>5902</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>6137</td></tr>
+<td>6140</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6138</td></tr>
+<td>6141</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 114).</td>
-<td>6142</td></tr>
+<td>6145</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6158</td></tr>
+<td>6161</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6167</td></tr>
+<td>6170</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6175</td></tr>
+<td>6178</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6185</td></tr>
+<td>6188</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>6187</td></tr>
+<td>6190</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 193 lines (max allowed is 150).</td>
-<td>6192</td></tr>
+<td>6195</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 4, expected level should be 6.</td>
-<td>6573</td></tr>
+<td>6576</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6651</td></tr>
+<td>6654</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6652</td></tr>
+<td>6655</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>6672</td></tr>
+<td>6675</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6692</td></tr>
+<td>6695</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6693</td></tr>
+<td>6696</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
 <td>Method length is 221 lines (max allowed is 150).</td>
-<td>6712</td></tr>
+<td>6715</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>6767</td></tr>
+<td>6770</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>6924</td></tr>
+<td>6927</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>6938</td></tr>
+<td>6941</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>6944</td></tr>
+<td>6947</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6950</td></tr>
+<td>6953</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>6952</td></tr>
+<td>6955</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>6995</td></tr>
+<td>6998</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7080</td></tr>
+<td>7083</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7082</td></tr>
+<td>7085</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7083</td></tr>
+<td>7086</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7084</td></tr>
+<td>7087</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7085</td></tr>
+<td>7088</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7086</td></tr>
+<td>7089</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7090</td></tr>
+<td>7093</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>7122</td></tr>
+<td>7125</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7127</td></tr>
+<td>7130</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7167</td></tr>
+<td>7170</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7168</td></tr>
+<td>7171</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7169</td></tr>
+<td>7172</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>7172</td></tr>
+<td>7175</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7177</td></tr>
+<td>7180</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7186</td></tr>
+<td>7189</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7187</td></tr>
+<td>7190</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7188</td></tr>
+<td>7191</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>7194</td></tr>
+<td>7197</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7200</td></tr>
+<td>7203</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7210</td></tr>
+<td>7213</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7211</td></tr>
+<td>7214</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7212</td></tr>
+<td>7215</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>7215</td></tr>
+<td>7218</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7219</td></tr>
+<td>7222</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7229</td></tr>
+<td>7232</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7230</td></tr>
+<td>7233</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7231</td></tr>
+<td>7234</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>7236</td></tr>
+<td>7239</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7242</td></tr>
+<td>7245</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7261</td></tr>
+<td>7264</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7262</td></tr>
+<td>7265</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7263</td></tr>
+<td>7266</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7280</td></tr>
+<td>7283</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7281</td></tr>
+<td>7284</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7282</td></tr>
+<td>7285</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7303</td></tr>
+<td>7306</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7304</td></tr>
+<td>7307</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7305</td></tr>
+<td>7308</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7315</td></tr>
+<td>7318</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7353</td></tr>
+<td>7356</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7413</td></tr>
+<td>7416</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7538</td></tr>
+<td>7541</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7570</td></tr>
+<td>7573</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7574</td></tr>
+<td>7577</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>NonEmptyAtclauseDescription</td>
 <td>At-clause should have a non-empty description.</td>
-<td>7576</td></tr>
+<td>7579</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7747</td></tr>
+<td>7750</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7767</td></tr>
+<td>7770</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 104).</td>
-<td>7805</td></tr>
+<td>7808</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>7909</td></tr>
+<td>7912</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7934</td></tr>
+<td>7937</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>7992</td></tr>
+<td>7995</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'throws' has incorrect indentation level 2, expected level should be 4.</td>
-<td>7995</td></tr>
+<td>7998</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>8016</td></tr>
+<td>8019</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>8064</td></tr>
+<td>8067</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 110).</td>
-<td>8103</td></tr>
+<td>8106</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 120).</td>
-<td>8104</td></tr>
+<td>8107</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 101).</td>
-<td>8109</td></tr>
+<td>8112</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 106).</td>
-<td>8144</td></tr>
+<td>8147</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>javadoc</td>
 <td>JavadocTagContinuationIndentation</td>
 <td>Line continuation have incorrect indentation level, expected level should be 2.</td>
-<td>8267</td></tr>
+<td>8270</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def modifier' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>8335</td></tr>
+<td>8338</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>8337</td></tr>
+<td>8340</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be one of the following: 12, 14.</td>
-<td>8338</td></tr>
+<td>8341</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be one of the following: 10, 12.</td>
-<td>8339</td></tr>
+<td>8342</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'method def rcurly' has incorrect indentation level 6, expected level should be one of the following: 8, 10.</td>
-<td>8340</td></tr>
+<td>8343</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'object def rcurly' has incorrect indentation level 4, expected level should be one of the following: 6, 8.</td>
-<td>8341</td></tr>
+<td>8344</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>8507</td></tr>
+<td>8510</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td>8508</td></tr>
+<td>8511</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>8510</td></tr>
+<td>8513</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td>8511</td></tr>
+<td>8514</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'if' construct must use '{}'s.</td>
-<td>8521</td></tr>
+<td>8524</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>blocks</td>
 <td>NeedBraces</td>
 <td>'else' construct must use '{}'s.</td>
-<td>8522</td></tr>
+<td>8525</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8592</td></tr>
+<td>8595</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' has incorrect indentation level 8, expected level should be 10.</td>
-<td>8594</td></tr>
+<td>8597</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if' child has incorrect indentation level 10, expected level should be 12.</td>
-<td>8595</td></tr>
+<td>8598</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'if rcurly' has incorrect indentation level 8, expected level should be 10.</td>
-<td>8596</td></tr>
+<td>8599</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8597</td></tr>
+<td>8600</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8598</td></tr>
+<td>8601</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8600</td></tr>
+<td>8603</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8601</td></tr>
+<td>8604</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8603</td></tr>
+<td>8606</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8604</td></tr>
+<td>8607</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8607</td></tr>
+<td>8610</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'case' child has incorrect indentation level 6, expected level should be 8.</td>
-<td>8610</td></tr>
+<td>8613</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>indentation</td>
 <td>Indentation</td>
 <td>'block' child has incorrect indentation level 8, expected level should be 10.</td>
-<td>8611</td></tr></table></div>
+<td>8614</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.HRegionFileSystem.java">org/apache/hadoop/hbase/regionserver/HRegionFileSystem.java</h3>
 <table border="0" class="table table-striped">
@@ -93183,7 +93183,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/coc.html b/coc.html
index 1114a3e..01a3c53 100644
--- a/coc.html
+++ b/coc.html
@@ -224,7 +224,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependencies.html b/dependencies.html
index 45f43f3..92c36b2 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -296,7 +296,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-convergence.html b/dependency-convergence.html
index 36ed242..177f677 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -679,7 +679,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-info.html b/dependency-info.html
index aa9b383..5fd536e 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -177,7 +177,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/dependency-management.html b/dependency-management.html
index 70097bf..ff27b51 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -893,7 +893,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2019
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-13</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2019-08-14</li>
 </p>
         </div>
         <p id="poweredBy" class="pull-right"><a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
diff --git a/devapidocs/constant-values.html b/devapidocs/constant-values.html
index 6f6ac2b..8c6b8d1 100644
--- a/devapidocs/constant-values.html
+++ b/devapidocs/constant-values.html
@@ -3955,14 +3955,14 @@
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#date">date</a></code></td>
-<td class="colLast"><code>"Tue Aug 13 14:35:01 UTC 2019"</code></td>
+<td class="colLast"><code>"Wed Aug 14 14:35:17 UTC 2019"</code></td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.revision">
 <!--   -->
 </a><code>public&nbsp;static&nbsp;final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td><code><a href="org/apache/hadoop/hbase/Version.html#revision">revision</a></code></td>
-<td class="colLast"><code>"8c1edb3bba56677b0ee106f340d12b42e999cdaa"</code></td>
+<td class="colLast"><code>"27ed2ac071f0867df315a7e5d8acf49aabcd9399"</code></td>
 </tr>
 <tr class="altColor">
 <td class="colFirst"><a name="org.apache.hadoop.hbase.Version.srcChecksum">
diff --git a/devapidocs/org/apache/hadoop/hbase/MetaTableAccessor.html b/devapidocs/org/apache/hadoop/hbase/MetaTableAccessor.html
index 3c3a943..ea38cf9 100644
--- a/devapidocs/org/apache/hadoop/hbase/MetaTableAccessor.html
+++ b/devapidocs/org/apache/hadoop/hbase/MetaTableAccessor.html
@@ -823,7 +823,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 </td>
 </tr>
 <tr id="i83" class="rowColor">
-<td class="colFirst"><code>private static <a href="../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></code></td>
+<td class="colFirst"><code>static <a href="../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#makePutFromTableState-org.apache.hadoop.hbase.client.TableState-long-">makePutFromTableState</a></span>(<a href="../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;state,
                      long&nbsp;ts)</code>
 <div class="block">Construct PUT for given state</div>
@@ -2640,8 +2640,8 @@ public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/TableStat
 <ul class="blockList">
 <li class="blockList">
 <h4>makePutFromTableState</h4>
-<pre>private static&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaTableAccessor.html#line.1658">makePutFromTableState</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;state,
-                                         long&nbsp;ts)</pre>
+<pre>public static&nbsp;<a href="../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;<a href="../../../../src-html/org/apache/hadoop/hbase/MetaTableAccessor.html#line.1658">makePutFromTableState</a>(<a href="../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;state,
+                                        long&nbsp;ts)</pre>
 <div class="block">Construct PUT for given state</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
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 2fa494e..6a1aca2 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/Put.html
@@ -223,7 +223,7 @@ service.</div>
 </td>
 </tr>
 <tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></code></td>
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#makePutFromTableState-org.apache.hadoop.hbase.client.TableState-long-">makePutFromTableState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;state,
                      long&nbsp;ts)</code>
 <div class="block">Construct PUT for given state</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableState.html b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableState.html
index e177153..a9ac5b5 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/class-use/TableState.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/class-use/TableState.html
@@ -163,7 +163,7 @@
 </tr>
 <tbody>
 <tr class="altColor">
-<td class="colFirst"><code>private static <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></code></td>
+<td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a></code></td>
 <td class="colLast"><span class="typeNameLabel">MetaTableAccessor.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/MetaTableAccessor.html#makePutFromTableState-org.apache.hadoop.hbase.client.TableState-long-">makePutFromTableState</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/TableState.html" title="class in org.apache.hadoop.hbase.client">TableState</a>&nbsp;state,
                      long&nbsp;ts)</code>
 <div class="block">Construct PUT for given state</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
index 427c630..f8fbf98 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
@@ -110,7 +110,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/FunctionalInterface.html?is-external=true" title="class or interface in java.lang">@FunctionalInterface</a>
-public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3176">HRegion.BatchOperation.Visitor</a></pre>
+public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3179">HRegion.BatchOperation.Visitor</a></pre>
 <div class="block">Visitor interface for batch operations</div>
 </li>
 </ul>
@@ -155,7 +155,7 @@ public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase
 <ul class="blockListLast">
 <li class="blockList">
 <h4>visit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html#line.3181">visit</a>(int&nbsp;index)
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html#line.3184">visit</a>(int&nbsp;index)
        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
index 217c37f..5c84859 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3146">HRegion.BatchOperation</a>&lt;T&gt;
+<pre>private abstract static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3149">HRegion.BatchOperation</a>&lt;T&gt;
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">Class that tracks the progress of a batch operations, accumulating status codes and tracking
  the index at which processing is proceeding. These batch operations may get split into
@@ -408,7 +408,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>operations</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="type parameter in HRegion.BatchOperation">T</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3147">operations</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="type parameter in HRegion.BatchOperation">T</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3150">operations</a></pre>
 </li>
 </ul>
 <a name="retCodeDetails">
@@ -417,7 +417,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>retCodeDetails</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3148">retCodeDetails</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3151">retCodeDetails</a></pre>
 </li>
 </ul>
 <a name="walEditsFromCoprocessors">
@@ -426,7 +426,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>walEditsFromCoprocessors</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3149">walEditsFromCoprocessors</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3152">walEditsFromCoprocessors</a></pre>
 </li>
 </ul>
 <a name="familyCellMaps">
@@ -435,7 +435,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>familyCellMaps</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;[] <a href="../../../../../src-html/org/apache/hadoop/hbase [...]
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;[] <a href="../../../../../src-html/org/apache/hadoop/hbase [...]
 </li>
 </ul>
 <a name="region">
@@ -444,7 +444,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3153">region</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3156">region</a></pre>
 </li>
 </ul>
 <a name="nextIndexToProcess">
@@ -453,7 +453,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>nextIndexToProcess</h4>
-<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3154">nextIndexToProcess</a></pre>
+<pre>protected&nbsp;int <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3157">nextIndexToProcess</a></pre>
 </li>
 </ul>
 <a name="observedExceptions">
@@ -462,7 +462,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>observedExceptions</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.ObservedExceptionsInBatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3155">observedExceptions</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.ObservedExceptionsInBatch.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.ObservedExceptionsInBatch</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3158">observedExceptions</a></pre>
 </li>
 </ul>
 <a name="durability">
@@ -471,7 +471,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>durability</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3157">durability</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3160">durability</a></pre>
 </li>
 </ul>
 <a name="atomic">
@@ -480,7 +480,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>atomic</h4>
-<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3158">atomic</a></pre>
+<pre>protected&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3161">atomic</a></pre>
 </li>
 </ul>
 </li>
@@ -499,7 +499,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>BatchOperation</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3160">BatchOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3163">BatchOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                       <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="type parameter in HRegion.BatchOperation">T</a>[]&nbsp;operations)</pre>
 </li>
 </ul>
@@ -517,7 +517,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>visitBatchOperations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3187">visitBatchOperations</a>(boolean&nbsp;pendingOnly,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3190">visitBatchOperations</a>(boolean&nbsp;pendingOnly,
                                  int&nbsp;lastIndexExclusive,
                                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation.Visitor</a>&nbsp;visitor)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -534,7 +534,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMutation</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3199">getMutation</a>(int&nbsp;index)</pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3202">getMutation</a>(int&nbsp;index)</pre>
 </li>
 </ul>
 <a name="getNonceGroup-int-">
@@ -543,7 +543,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceGroup</h4>
-<pre>public abstract&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3201">getNonceGroup</a>(int&nbsp;index)</pre>
+<pre>public abstract&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3204">getNonceGroup</a>(int&nbsp;index)</pre>
 </li>
 </ul>
 <a name="getNonce-int-">
@@ -552,7 +552,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonce</h4>
-<pre>public abstract&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3203">getNonce</a>(int&nbsp;index)</pre>
+<pre>public abstract&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3206">getNonce</a>(int&nbsp;index)</pre>
 </li>
 </ul>
 <a name="getMutationsForCoprocs--">
@@ -561,7 +561,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getMutationsForCoprocs</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3208">getMutationsForCoprocs</a>()</pre>
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3211">getMutationsForCoprocs</a>()</pre>
 <div class="block">This method is potentially expensive and useful mostly for non-replay CP path.</div>
 </li>
 </ul>
@@ -571,7 +571,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isInReplay</h4>
-<pre>public abstract&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3210">isInReplay</a>()</pre>
+<pre>public abstract&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3213">isInReplay</a>()</pre>
 </li>
 </ul>
 <a name="getOrigLogSeqNum--">
@@ -580,7 +580,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrigLogSeqNum</h4>
-<pre>public abstract&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3212">getOrigLogSeqNum</a>()</pre>
+<pre>public abstract&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3215">getOrigLogSeqNum</a>()</pre>
 </li>
 </ul>
 <a name="startRegionOperation--">
@@ -589,7 +589,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3214">startRegionOperation</a>()
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3217">startRegionOperation</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -603,7 +603,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3216">closeRegionOperation</a>()
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3219">closeRegionOperation</a>()
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -617,7 +617,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPrepare</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3225">checkAndPrepare</a>()
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3228">checkAndPrepare</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Validates each mutation and prepares a batch for write. If necessary (non-replay case), runs
  CP prePut()/ preDelete() hooks for all mutations in a batch. This is intended to operate on
@@ -636,7 +636,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPreparePut</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3231">checkAndPreparePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3234">checkAndPreparePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)
                                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Implement any Put request specific check and prepare logic here. Please refer to
  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#checkAndPrepareMutation-org.apache.hadoop.hbase.client.Mutation-long-"><code>checkAndPrepareMutation(Mutation, long)</code></a> for how its used.</div>
@@ -652,7 +652,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareMiniBatchOperations</h4>
-<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3237">prepareMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> [...]
+<pre>public abstract&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3240">prepareMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> [...]
                                                 long&nbsp;timestamp,
                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;acquiredRowLocks)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -670,7 +670,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeMiniBatchOperationsToMemStore</h4>
-<pre>public abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3243">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="c [...]
+<pre>public abstract&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3246">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="c [...]
                                                                                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;writeEntry)
                                                                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Write mini-batch operations to MemStore</div>
@@ -686,7 +686,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>writeMiniBatchOperationsToMemStore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3247">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</ [...]
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3250">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</ [...]
                                                   long&nbsp;writeNumber)
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -701,7 +701,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3267">isDone</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3270">isDone</a>()</pre>
 </li>
 </ul>
 <a name="size--">
@@ -710,7 +710,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>size</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3271">size</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3274">size</a>()</pre>
 </li>
 </ul>
 <a name="isOperationPending-int-">
@@ -719,7 +719,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isOperationPending</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3275">isOperationPending</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3278">isOperationPending</a>(int&nbsp;index)</pre>
 </li>
 </ul>
 <a name="getClusterIds--">
@@ -728,7 +728,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getClusterIds</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3279">getClusterIds</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3282">getClusterIds</a>()</pre>
 </li>
 </ul>
 <a name="isAtomic--">
@@ -737,7 +737,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>isAtomic</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3284">isAtomic</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3287">isAtomic</a>()</pre>
 </li>
 </ul>
 <a name="checkAndPrepareMutation-org.apache.hadoop.hbase.client.Mutation-long-">
@@ -746,7 +746,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPrepareMutation</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3294">checkAndPrepareMutation</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3297">checkAndPrepareMutation</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                                        long&nbsp;timestamp)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Helper method that checks and prepares only one mutation. This can be used to implement
@@ -765,7 +765,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPrepareMutation</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3306">checkAndPrepareMutation</a>(int&nbsp;index,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3309">checkAndPrepareMutation</a>(int&nbsp;index,
                                        long&nbsp;timestamp)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -780,7 +780,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>lockRowsAndBuildMiniBatch</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3368">lockRowsAndBuildMiniBatch</a>(<a href="h [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3371">lockRowsAndBuildMiniBatch</a>(<a href="h [...]
                                                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Creates Mini-batch of all operations [nextIndexToProcess, lastIndexExclusive) for which
  a row lock can be acquired. All mutations with locked rows are considered to be
@@ -800,7 +800,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>createMiniBatch</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3452">createMiniBatch</a>(int&nbsp;lastInde [...]
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3455">createMiniBatch</a>(int&nbsp;lastInde [...]
                                                                  int&nbsp;readyToWriteCount)</pre>
 </li>
 </ul>
@@ -810,7 +810,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>buildWALEdits</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org [...]
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Builds separate WALEdit per nonce by applying input mutations. If WALEdits from CP are
  present, they are merged to result WALEdit.</div>
@@ -826,7 +826,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>completeMiniBatchOperations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3511">completeMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbs [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3514">completeMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbs [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;writeEntry)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This method completes mini-batch operations by calling postBatchMutate() CP hook (if
@@ -843,7 +843,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doPostOpCleanupForMiniBatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3519">doPostOpCleanupForMiniBatch</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbs [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3522">doPostOpCleanupForMiniBatch</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbs [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                                         boolean&nbsp;success)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -859,7 +859,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>doFinishHotnessProtector</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3525">doFinishHotnessProtector</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp; [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3528">doFinishHotnessProtector</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp; [...]
 </li>
 </ul>
 <a name="applyFamilyMapToMemStore-java.util.Map-org.apache.hadoop.hbase.regionserver.MemStoreSizing-">
@@ -868,7 +868,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>applyFamilyMapToMemStore</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3562">applyFamilyMapToMemStore</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/ha [...]
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#line.3565">applyFamilyMapToMemStore</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/ha [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a>&nbsp;memstoreAccounting)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Atomically apply the given map of family->edits to the memstore.
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
index e999235..5424158 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6152">HRegion.BulkLoadListener</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6155">HRegion.BulkLoadListener</a></pre>
 <div class="block">Listener class to enable callers of
  bulkLoadHFile() to perform any necessary
  pre/post processing of a given bulkload call</div>
@@ -174,7 +174,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareBulkLoad</h4>
-<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#line.6160">prepareBulkLoad</a>(byte[]&nbsp;family,
+<pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#line.6163">prepareBulkLoad</a>(byte[]&nbsp;family,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath,
                        boolean&nbsp;copyFile)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -196,7 +196,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>doneBulkLoad</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#line.6169">doneBulkLoad</a>(byte[]&nbsp;family,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#line.6172">doneBulkLoad</a>(byte[]&nbsp;family,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Called after a successful HFile load</div>
@@ -215,7 +215,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>failedBulkLoad</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#line.6177">failedBulkLoad</a>(byte[]&nbsp;family,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html#line.6180">failedBulkLoad</a>(byte[]&nbsp;family,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;srcPath)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Called after a failed HFile load</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
index f9c8ad3..ebb03a0 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2315">HRegion.FlushResult.Result</a>
+<pre>public static enum <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2318">HRegion.FlushResult.Result</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang">Enum</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a>&gt;</pre>
 </li>
 </ul>
@@ -216,7 +216,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FLUSHED_NO_COMPACTION_NEEDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2316">FLUSHED_NO_COMPACTION_NEEDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2319">FLUSHED_NO_COMPACTION_NEEDED</a></pre>
 </li>
 </ul>
 <a name="FLUSHED_COMPACTION_NEEDED">
@@ -225,7 +225,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>FLUSHED_COMPACTION_NEEDED</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2317">FLUSHED_COMPACTION_NEEDED</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2320">FLUSHED_COMPACTION_NEEDED</a></pre>
 </li>
 </ul>
 <a name="CANNOT_FLUSH_MEMSTORE_EMPTY">
@@ -234,7 +234,7 @@ the order they are declared.</div>
 <ul class="blockList">
 <li class="blockList">
 <h4>CANNOT_FLUSH_MEMSTORE_EMPTY</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2320">CANNOT_FLUSH_MEMSTORE_EMPTY</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2323">CANNOT_FLUSH_MEMSTORE_EMPTY</a></pre>
 </li>
 </ul>
 <a name="CANNOT_FLUSH">
@@ -243,7 +243,7 @@ the order they are declared.</div>
 <ul class="blockListLast">
 <li class="blockList">
 <h4>CANNOT_FLUSH</h4>
-<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2321">CANNOT_FLUSH</a></pre>
+<pre>public static final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html#line.2324">CANNOT_FLUSH</a></pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
index 19daba1..4db9291 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html
@@ -109,7 +109,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2314">HRegion.FlushResult</a></pre>
+<pre>public static interface <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2317">HRegion.FlushResult</a></pre>
 </li>
 </ul>
 </div>
@@ -180,7 +180,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>getResult</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2325">getResult</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult.Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2328">getResult</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the detailed result code</dd>
@@ -193,7 +193,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockList">
 <li class="blockList">
 <h4>isFlushSucceeded</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2328">isFlushSucceeded</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2331">isFlushSucceeded</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if the memstores were flushed, else false</dd>
@@ -206,7 +206,7 @@ var activeTableTab = "activeTableTab";
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isCompactionNeeded</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2331">isCompactionNeeded</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html#line.2334">isCompactionNeeded</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if the flush requested a compaction, else false</dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
index 9b7f3c7e..713e908 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3578">HRegion.MutationBatchOperation</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3581">HRegion.MutationBatchOperation</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;</pre>
 <div class="block">Batch of mutation operations. Base class is shared with <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegion.ReplayBatchOperation</code></a> as most
  of the logic is same.</div>
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>nonceGroup</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3579">nonceGroup</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3582">nonceGroup</a></pre>
 </li>
 </ul>
 <a name="nonce">
@@ -351,7 +351,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>nonce</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3580">nonce</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3583">nonce</a></pre>
 </li>
 </ul>
 </li>
@@ -368,7 +368,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MutationBatchOperation</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3581">MutationBatchOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3584">MutationBatchOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                               <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;operations,
                               boolean&nbsp;atomic,
                               long&nbsp;nonceGroup,
@@ -389,7 +389,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getMutation</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3590">getMutation</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3593">getMutation</a>(int&nbsp;index)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getMutation-int-">getMutation</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;</code></dd>
@@ -402,7 +402,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceGroup</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3595">getNonceGroup</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3598">getNonceGroup</a>(int&nbsp;index)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getNonceGroup-int-">getNonceGroup</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;</code></dd>
@@ -415,7 +415,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonce</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3600">getNonce</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3603">getNonce</a>(int&nbsp;index)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getNonce-int-">getNonce</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;</code></dd>
@@ -428,7 +428,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getMutationsForCoprocs</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3605">getMutationsForCoprocs</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3608">getMutationsForCoprocs</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getMutationsForCoprocs--">HRegion.BatchOperation</a></code></span></div>
 <div class="block">This method is potentially expensive and useful mostly for non-replay CP path.</div>
 <dl>
@@ -443,7 +443,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>isInReplay</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3610">isInReplay</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3613">isInReplay</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#isInReplay--">isInReplay</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;</code></dd>
@@ -456,7 +456,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrigLogSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3615">getOrigLogSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3618">getOrigLogSeqNum</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getOrigLogSeqNum--">getOrigLogSeqNum</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;</code></dd>
@@ -469,7 +469,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3620">startRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3623">startRegionOperation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -485,7 +485,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3625">closeRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3628">closeRegionOperation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -501,7 +501,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPreparePut</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3630">checkAndPreparePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3633">checkAndPreparePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#checkAndPreparePut-org.apache.hadoop.hbase.client.Put-">HRegion.BatchOperation</a></code></span></div>
 <div class="block">Implement any Put request specific check and prepare logic here. Please refer to
@@ -520,7 +520,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPrepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3635">checkAndPrepare</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3638">checkAndPrepare</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#checkAndPrepare--">HRegion.BatchOperation</a></code></span></div>
 <div class="block">Validates each mutation and prepares a batch for write. If necessary (non-replay case), runs
@@ -542,7 +542,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareMiniBatchOperations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3680">prepareMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>& [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3683">prepareMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>& [...]
                                        long&nbsp;timestamp,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;acquiredRowLocks)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -563,7 +563,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>buildWALEdits</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/NonceKey.html" title="class in org.apache.hadoop.hbase.util">NonceKey</a>,<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org [...]
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#buildWALEdits-org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress-">HRegion.BatchOperation</a></code></span></div>
 <div class="block">Builds separate WALEdit per nonce by applying input mutations. If WALEdits from CP are
@@ -582,7 +582,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>writeMiniBatchOperationsToMemStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3727">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="cl [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3730">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="cl [...]
                                                                                     @Nullable
                                                                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;writeEntry)
                                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -602,7 +602,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>completeMiniBatchOperations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3738">completeMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3741">completeMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;writeEntry)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#completeMiniBatchOperations-org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress-org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.WriteEntry-">HRegion.BatchOperation</a></code></span></div>
@@ -622,7 +622,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>doPostOpCleanupForMiniBatch</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3750">doPostOpCleanupForMiniBatch</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3753">doPostOpCleanupForMiniBatch</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a> [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                                         boolean&nbsp;success)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -640,7 +640,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>callPreMutateCPHook</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3799">callPreMutateCPHook</a>(int&nbsp;index,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3802">callPreMutateCPHook</a>(int&nbsp;index,
                                  <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                                  int[]&nbsp;metrics)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -659,7 +659,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndMergeCPMutations</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3836">checkAndMergeCPMutations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&g [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3839">checkAndMergeCPMutations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&g [...]
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;acquiredRowLocks,
                                       long&nbsp;timestamp)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -675,7 +675,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>mergeFamilyMaps</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3872">mergeFamilyMaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoo [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html#line.3875">mergeFamilyMaps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoo [...]
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;toBeMerged)</pre>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
index 5a6cee6..84ee6cd 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6406">HRegion.RegionScannerImpl</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6409">HRegion.RegionScannerImpl</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>, <a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html" title="interface in org.apache.hadoop.hbase.regionserver">Shipper</a>, <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html" title="interface in org.apache.hadoop.hbase.ipc">RpcCallback</a></pre>
 <div class="block">RegionScannerImpl is used to combine scanners from multiple Stores (aka column families).</div>
@@ -425,7 +425,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>storeHeap</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6409">storeHeap</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6412">storeHeap</a></pre>
 </li>
 </ul>
 <a name="joinedHeap">
@@ -434,7 +434,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>joinedHeap</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6412">joinedHeap</a></pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6415">joinedHeap</a></pre>
 <div class="block">Heap of key-values that are not essential for the provided filters and are thus read
  on demand, if on-demand column family loading is enabled.</div>
 </li>
@@ -445,7 +445,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>joinedContinuationRow</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6416">joinedContinuationRow</a></pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6419">joinedContinuationRow</a></pre>
 <div class="block">If the joined heap data gathering is interrupted due to scan limits, this will
  contain the row for which we are populating the values.</div>
 </li>
@@ -456,7 +456,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>filterClosed</h4>
-<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6417">filterClosed</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6420">filterClosed</a></pre>
 </li>
 </ul>
 <a name="stopRow">
@@ -465,7 +465,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>stopRow</h4>
-<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6419">stopRow</a></pre>
+<pre>protected final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6422">stopRow</a></pre>
 </li>
 </ul>
 <a name="includeStopRow">
@@ -474,7 +474,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>includeStopRow</h4>
-<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6420">includeStopRow</a></pre>
+<pre>protected final&nbsp;boolean <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6423">includeStopRow</a></pre>
 </li>
 </ul>
 <a name="region">
@@ -483,7 +483,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>region</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6421">region</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6424">region</a></pre>
 </li>
 </ul>
 <a name="comparator">
@@ -492,7 +492,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>comparator</h4>
-<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6422">comparator</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6425">comparator</a></pre>
 </li>
 </ul>
 <a name="readPt">
@@ -501,7 +501,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>readPt</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6424">readPt</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6427">readPt</a></pre>
 </li>
 </ul>
 <a name="maxResultSize">
@@ -510,7 +510,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>maxResultSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6425">maxResultSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6428">maxResultSize</a></pre>
 </li>
 </ul>
 <a name="defaultScannerContext">
@@ -519,7 +519,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>defaultScannerContext</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6426">defaultScannerContext</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6429">defaultScannerContext</a></pre>
 </li>
 </ul>
 <a name="filter">
@@ -528,7 +528,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>filter</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter">FilterWrapper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6427">filter</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.html" title="class in org.apache.hadoop.hbase.filter">FilterWrapper</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6430">filter</a></pre>
 </li>
 </ul>
 </li>
@@ -545,7 +545,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>RegionScannerImpl</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6434">RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6437">RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -561,7 +561,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RegionScannerImpl</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6439">RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6442">RegionScannerImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                   long&nbsp;nonceGroup,
@@ -587,7 +587,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionInfo</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6430">getRegionInfo</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6433">getRegionInfo</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getRegionInfo--">getRegionInfo</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -602,7 +602,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeScanners</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6477">initializeScanners</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6480">initializeScanners</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -617,7 +617,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>initializeKVHeap</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6509">initializeKVHeap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6512">initializeKVHeap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;scanners,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;joinedScanners,
                                 <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -633,7 +633,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>handleException</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6518">handleException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6521">handleException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ [...]
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;t)</pre>
 </li>
 </ul>
@@ -643,7 +643,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxResultSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6539">getMaxResultSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6542">getMaxResultSize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getMaxResultSize--">getMaxResultSize</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -659,7 +659,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getMvccReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6544">getMvccReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6547">getMvccReadPoint</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getMvccReadPoint--">getMvccReadPoint</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -674,7 +674,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getBatch</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6549">getBatch</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6552">getBatch</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#getBatch--">getBatch</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a></code></dd>
@@ -690,7 +690,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>resetFilters</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6558">resetFilters</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6561">resetFilters</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Reset both the filter and the old filter.</div>
 <dl>
@@ -705,7 +705,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6565">next</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6568">next</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-">InternalScanner</a></code></span></div>
 <div class="block">Grab the next row's worth of values.</div>
@@ -727,7 +727,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>next</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6572">next</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6575">next</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#next-java.util.List-org.apache.hadoop.hbase.regionserver.ScannerContext-">InternalScanner</a></code></span></div>
@@ -750,7 +750,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6588">nextRaw</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6591">nextRaw</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#nextRaw-java.util.List-">RegionScanner</a></code></span></div>
 <div class="block">Grab the next row's worth of values. This is a special internal method to be called from
@@ -775,7 +775,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRaw</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6594">nextRaw</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6597">nextRaw</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;outResults,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#nextRaw-java.util.List-org.apache.hadoop.hbase.regionserver.ScannerContext-">RegionScanner</a></code></span></div>
@@ -821,7 +821,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>populateFromJoinedHeap</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6631">populateFromJoinedHeap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6634">populateFromJoinedHeap</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -838,7 +838,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>populateResult</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6655">populateResult</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6658">populateResult</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&nbsp;heap,
                                <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
                                <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)
@@ -863,7 +863,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>moreCellsInRow</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6696">moreCellsInRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;nextKv,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6699">moreCellsInRow</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;nextKv,
                                <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
 <div class="block">Based on the nextKv in the heap, and the current row, decide whether or not there are more
  cells to be read in the heap. If the row of the nextKv in the heap matches the current row
@@ -883,7 +883,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>isFilterDone</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6704">isFilterDone</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6707">isFilterDone</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -901,7 +901,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>isFilterDoneInternal</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6708">isFilterDoneInternal</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6711">isFilterDoneInternal</a>()
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -915,7 +915,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextInternal</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6712">nextInternal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6715">nextInternal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -930,7 +930,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementCountOfRowsFilteredMetric</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6935">incrementCountOfRowsFilteredMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6938">incrementCountOfRowsFilteredMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
 </li>
 </ul>
 <a name="incrementCountOfRowsScannedMetric-org.apache.hadoop.hbase.regionserver.ScannerContext-">
@@ -939,7 +939,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementCountOfRowsScannedMetric</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6943">incrementCountOfRowsScannedMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6946">incrementCountOfRowsScannedMetric</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext)</pre>
 </li>
 </ul>
 <a name="joinedHeapMayHaveData-org.apache.hadoop.hbase.Cell-">
@@ -948,7 +948,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>joinedHeapMayHaveData</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6954">joinedHeapMayHaveData</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6957">joinedHeapMayHaveData</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -966,7 +966,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>filterRow</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6981">filterRow</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6984">filterRow</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This function is to maintain backward compatibility for 0.94 filters. HBASE-6429 combines
  both filterRow & filterRow(<code>List&lt;KeyValue&gt; kvs</code>) functions. While 0.94 code or older,
@@ -985,7 +985,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>filterRowKey</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6988">filterRowKey</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;current)
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6991">filterRowKey</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;current)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -999,7 +999,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>nextRow</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6992">nextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.6995">nextRow</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.html" title="class in org.apache.hadoop.hbase.regionserver">ScannerContext</a>&nbsp;scannerContext,
                           <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;curRowCell)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -1014,7 +1014,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldStop</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7007">shouldStop</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7010">shouldStop</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentRowCell)</pre>
 </li>
 </ul>
 <a name="close--">
@@ -1023,7 +1023,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7019">close</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7022">close</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/InternalScanner.html#close--">InternalScanner</a></code></span></div>
 <div class="block">Closes the scanner and releases any resources it has allocated</div>
 <dl>
@@ -1042,7 +1042,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreHeapForTesting</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7033">getStoreHeapForTesting</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueHeap.html" title="class in org.apache.hadoop.hbase.regionserver">KeyValueHeap</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7036">getStoreHeapForTesting</a>()</pre>
 </li>
 </ul>
 <a name="reseek-byte:A-">
@@ -1051,7 +1051,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>reseek</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7038">reseek</a>(byte[]&nbsp;row)
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7041">reseek</a>(byte[]&nbsp;row)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html#reseek-byte:A-">RegionScanner</a></code></span></div>
 <div class="block">Do a reseek to the required row. Should not be used to seek to a key which
@@ -1071,7 +1071,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockList">
 <li class="blockList">
 <h4>shipped</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7058">shipped</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7061">shipped</a>()
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Shipper.html#shipped--">Shipper</a></code></span></div>
 <div class="block">Called after a batch of rows scanned and set to be returned to client. Any in between cleanup
@@ -1090,7 +1090,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSc
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7068">run</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html#line.7071">run</a>()
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallback.html#run--">RpcCallback</a></code></span></div>
 <div class="block">Called at the end of an Rpc Call <a href="../../../../../org/apache/hadoop/hbase/ipc/RpcCallContext.html" title="interface in org.apache.hadoop.hbase.ipc"><code>RpcCallContext</code></a></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
index f6e10fe..989bdc6 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3889">HRegion.ReplayBatchOperation</a>
+<pre>static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3892">HRegion.ReplayBatchOperation</a>
 extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay</a>&gt;</pre>
 <div class="block">Batch of mutations for replay. Base class is shared with <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.MutationBatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegion.MutationBatchOperation</code></a> as most
  of the logic is same.</div>
@@ -306,7 +306,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>origLogSeqNum</h4>
-<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3890">origLogSeqNum</a></pre>
+<pre>private&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3893">origLogSeqNum</a></pre>
 </li>
 </ul>
 </li>
@@ -323,7 +323,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>ReplayBatchOperation</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3891">ReplayBatchOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3894">ReplayBatchOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                             <a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay</a>[]&nbsp;operations,
                             long&nbsp;origLogSeqNum)</pre>
 </li>
@@ -342,7 +342,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getMutation</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3898">getMutation</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3901">getMutation</a>(int&nbsp;index)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getMutation-int-">getMutation</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationR [...]
@@ -355,7 +355,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonceGroup</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3903">getNonceGroup</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3906">getNonceGroup</a>(int&nbsp;index)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getNonceGroup-int-">getNonceGroup</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.Mutat [...]
@@ -368,7 +368,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getNonce</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3908">getNonce</a>(int&nbsp;index)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3911">getNonce</a>(int&nbsp;index)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getNonce-int-">getNonce</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay< [...]
@@ -381,7 +381,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getMutationsForCoprocs</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3913">getMutationsForCoprocs</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3916">getMutationsForCoprocs</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getMutationsForCoprocs--">HRegion.BatchOperation</a></code></span></div>
 <div class="block">This method is potentially expensive and useful mostly for non-replay CP path.</div>
 <dl>
@@ -396,7 +396,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>isInReplay</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3918">isInReplay</a>()</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3921">isInReplay</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#isInReplay--">isInReplay</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay [...]
@@ -409,7 +409,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>getOrigLogSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3923">getOrigLogSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3926">getOrigLogSeqNum</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#getOrigLogSeqNum--">getOrigLogSeqNum</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.Mu [...]
@@ -422,7 +422,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3928">startRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3931">startRegionOperation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -438,7 +438,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3933">closeRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3936">closeRegionOperation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -454,7 +454,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPreparePut</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3942">checkAndPreparePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3945">checkAndPreparePut</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;p)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">During replay, there could exist column families which are removed between region server
  failure and replay</div>
@@ -472,7 +472,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndPrepare</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3963">checkAndPrepare</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3966">checkAndPrepare</a>()
                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#checkAndPrepare--">HRegion.BatchOperation</a></code></span></div>
 <div class="block">Validates each mutation and prepares a batch for write. If necessary (non-replay case), runs
@@ -494,7 +494,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareMiniBatchOperations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3972">prepareMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3975">prepareMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt [...]
                                        long&nbsp;timestamp,
                                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;acquiredRowLocks)
                                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -515,7 +515,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockList">
 <li class="blockList">
 <h4>writeMiniBatchOperationsToMemStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3984">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="clas [...]
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3987">writeMiniBatchOperationsToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="clas [...]
                                                                                     <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;writeEntry)
                                                                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#writeMiniBatchOperationsToMemStore-org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress-org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.WriteEntry-">HRegion.BatchOperation</a></code></span></div>
@@ -534,7 +534,7 @@ extends <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.Bat
 <ul class="blockListLast">
 <li class="blockList">
 <h4>completeMiniBatchOperations</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3992">completeMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&g [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.ReplayBatchOperation.html#line.3995">completeMiniBatchOperations</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MiniBatchOperationInProgress.html" title="class in org.apache.hadoop.hbase.regionserver">MiniBatchOperationInProgress</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&g [...]
                                         <a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;writeEntry)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html#completeMiniBatchOperations-org.apache.hadoop.hbase.regionserver.MiniBatchOperationInProgress-org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl.WriteEntry-">HRegion.BatchOperation</a></code></span></div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
index ef08086..6e0e203 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6014">HRegion.RowLockContext</a>
+<pre>class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6017">HRegion.RowLockContext</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 </li>
 </ul>
@@ -241,7 +241,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>row</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6015">row</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6018">row</a></pre>
 </li>
 </ul>
 <a name="readWriteLock">
@@ -250,7 +250,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>readWriteLock</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6016">readWriteLock</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReadWriteLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReadWriteLock</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6019">readWriteLock</a></pre>
 </li>
 </ul>
 <a name="usable">
@@ -259,7 +259,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>usable</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6017">usable</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicBoolean.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicBoolean</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6020">usable</a></pre>
 </li>
 </ul>
 <a name="count">
@@ -268,7 +268,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>count</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6018">count</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6021">count</a></pre>
 </li>
 </ul>
 <a name="lock">
@@ -277,7 +277,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6019">lock</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6022">lock</a></pre>
 </li>
 </ul>
 <a name="threadName">
@@ -286,7 +286,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>threadName</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6020">threadName</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6023">threadName</a></pre>
 </li>
 </ul>
 </li>
@@ -303,7 +303,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RowLockContext</h4>
-<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6022">RowLockContext</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a>&nbsp;row)</pre>
+<pre><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6025">RowLockContext</a>(<a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a>&nbsp;row)</pre>
 </li>
 </ul>
 </li>
@@ -320,7 +320,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>newWriteLock</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6026">newWriteLock</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6029">newWriteLock</a>()</pre>
 </li>
 </ul>
 <a name="newReadLock--">
@@ -329,7 +329,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>newReadLock</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6030">newReadLock</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6033">newReadLock</a>()</pre>
 </li>
 </ul>
 <a name="getRowLock-java.util.concurrent.locks.Lock-">
@@ -338,7 +338,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLock</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6035">getRowLock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;l)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6038">getRowLock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;l)</pre>
 </li>
 </ul>
 <a name="cleanUp--">
@@ -347,7 +347,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanUp</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6046">cleanUp</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6049">cleanUp</a>()</pre>
 </li>
 </ul>
 <a name="setThreadName-java.lang.String-">
@@ -356,7 +356,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>setThreadName</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6059">setThreadName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;threadName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6062">setThreadName</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;threadName)</pre>
 </li>
 </ul>
 <a name="toString--">
@@ -365,7 +365,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6064">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html#line.6067">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
index f282f08..8d2ac9d 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6077">HRegion.RowLockImpl</a>
+<pre>public static class <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6080">HRegion.RowLockImpl</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a></pre>
 <div class="block">Class used to represent a lock on a row.</div>
@@ -226,7 +226,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockList">
 <li class="blockList">
 <h4>context</h4>
-<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6078">context</a></pre>
+<pre>private final&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a> <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6081">context</a></pre>
 </li>
 </ul>
 <a name="lock">
@@ -235,7 +235,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockListLast">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/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/regionserver/HRegion.RowLockImpl.html#line.6079">lock</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/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/regionserver/HRegion.RowLockImpl.html#line.6082">lock</a></pre>
 </li>
 </ul>
 </li>
@@ -252,7 +252,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RowLockImpl</h4>
-<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6081">RowLockImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a>&nbsp;context,
+<pre>public&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6084">RowLockImpl</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a>&nbsp;context,
                    <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock)</pre>
 </li>
 </ul>
@@ -270,7 +270,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockList">
 <li class="blockList">
 <h4>getLock</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6086">getLock</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6089">getLock</a>()</pre>
 </li>
 </ul>
 <a name="getContext--">
@@ -279,7 +279,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockList">
 <li class="blockList">
 <h4>getContext</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6091">getContext</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RowLockContext</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6094">getContext</a>()</pre>
 </li>
 </ul>
 <a name="release--">
@@ -288,7 +288,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockList">
 <li class="blockList">
 <h4>release</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6096">release</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6099">release</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html#release--">Region.RowLock</a></code></span></div>
 <div class="block">Release the given lock.  If there are no remaining locks held by the current thread
  then unlock the row and allow other threads to acquire the lock.</div>
@@ -304,7 +304,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.R
 <ul class="blockListLast">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6102">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.RowLockImpl.html#line.6105">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
index f788fa9..d70d693 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/HRegion.html
@@ -3368,7 +3368,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>FOR_UNIT_TESTS_ONLY</h4>
-<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3041">FOR_UNIT_TESTS_ONLY</a></pre>
+<pre>private static final&nbsp;byte[] <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3044">FOR_UNIT_TESTS_ONLY</a></pre>
 <div class="block">Row needed by below method.</div>
 </li>
 </ul>
@@ -3378,7 +3378,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8215">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8218">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="DEEP_OVERHEAD">
@@ -3387,7 +3387,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockList">
 <li class="blockList">
 <h4>DEEP_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8232">DEEP_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8235">DEEP_OVERHEAD</a></pre>
 </li>
 </ul>
 <a name="MOCKED_LIST">
@@ -3396,7 +3396,7 @@ implements <a href="../../../../../org/apache/hadoop/hbase/io/HeapSize.html" tit
 <ul class="blockListLast">
 <li class="blockList">
 <h4>MOCKED_LIST</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8626">MOCKED_LIST</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt; <a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8629">MOCKED_LIST</a></pre>
 <div class="block">A mocked list implementation - discards all updates.</div>
 </li>
 </ul>
@@ -4248,7 +4248,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setClosing</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1563">setClosing</a>(boolean&nbsp;closing)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1566">setClosing</a>(boolean&nbsp;closing)</pre>
 <div class="block">Exposed for some very specific unit tests.</div>
 </li>
 </ul>
@@ -4258,7 +4258,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setTimeoutForWriteLock</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1573">setTimeoutForWriteLock</a>(long&nbsp;timeoutForWriteLock)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1576">setTimeoutForWriteLock</a>(long&nbsp;timeoutForWriteLock)</pre>
 <div class="block">The <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#doClose-boolean-org.apache.hadoop.hbase.monitoring.MonitoredTask-"><code>doClose(boolean, org.apache.hadoop.hbase.monitoring.MonitoredTask)</code></a> will block forever if someone tries proving the dead lock via the unit test.
  Instead of blocking, the <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#doClose-boolean-org.apache.hadoop.hbase.monitoring.MonitoredTask-"><code>doClose(boolean, org.apache.hadoop.hbase.monitoring.MonitoredTask)</code></a> will throw exception if you set the timeout.</div>
 <dl>
@@ -4273,7 +4273,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doClose</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&gt;&gt;&nbsp;<a href="../../../../../src [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStoreFile.html" title="class in org.apache.hadoop.hbase.regionserver">HStoreFile</a>&gt;&gt;&nbsp;<a href="../../../../../src [...]
                                              <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -4288,7 +4288,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForFlushesAndCompactions</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1765">waitForFlushesAndCompactions</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1768">waitForFlushesAndCompactions</a>()</pre>
 <div class="block">Wait for all current flushes and compactions of the region to complete</div>
 </li>
 </ul>
@@ -4298,7 +4298,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForFlushes</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1797">waitForFlushes</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1800">waitForFlushes</a>()</pre>
 <div class="block">Wait for all current flushes of the region to complete</div>
 </li>
 </ul>
@@ -4308,7 +4308,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForFlushes</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1802">waitForFlushes</a>(long&nbsp;timeout)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1805">waitForFlushes</a>(long&nbsp;timeout)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#waitForFlushes-long-">Region</a></code></span></div>
 <div class="block">Wait for all current flushes of the region to complete</div>
 <dl>
@@ -4328,7 +4328,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreOpenAndCloseThreadPool</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1839">getStoreOpenAndCloseThreadPool</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thr [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1842">getStoreOpenAndCloseThreadPool</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;thr [...]
 </li>
 </ul>
 <a name="getStoreFileOpenAndCloseThreadPool-java.lang.String-">
@@ -4337,7 +4337,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileOpenAndCloseThreadPool</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1848">getStoreFileOpenAndCloseThreadPool</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1851">getStoreFileOpenAndCloseThreadPool</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp [...]
 </li>
 </ul>
 <a name="getOpenAndCloseThreadPool-int-java.lang.String-">
@@ -4346,7 +4346,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getOpenAndCloseThreadPool</h4>
-<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1858">getOpenAndCloseThreadPool</a>(int&nbsp;maxThreads,
+<pre>static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ThreadPoolExecutor.html?is-external=true" title="class or interface in java.util.concurrent">ThreadPoolExecutor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1861">getOpenAndCloseThreadPool</a>(int&nbsp;maxThreads,
                                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;threadNamePrefix)</pre>
 </li>
 </ul>
@@ -4356,7 +4356,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>worthPreFlushing</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1874">worthPreFlushing</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1877">worthPreFlushing</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if its worth doing a flush before we put up the close flag.</dd>
@@ -4369,7 +4369,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getTableDescriptor</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1884">getTableDescriptor</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1887">getTableDescriptor</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getTableDescriptor--">getTableDescriptor</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -4384,7 +4384,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setTableDescriptor</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1889">setTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1892">setTableDescriptor</a>(<a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;desc)</pre>
 </li>
 </ul>
 <a name="getWAL--">
@@ -4393,7 +4393,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getWAL</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1894">getWAL</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1897">getWAL</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>WAL in use for this region</dd>
@@ -4406,7 +4406,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getBlockCache</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/regionserver/HRegion.html#line.1898">getBlockCache</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/regionserver/HRegion.html#line.1901">getBlockCache</a>()</pre>
 </li>
 </ul>
 <a name="setBlockCache-org.apache.hadoop.hbase.io.hfile.BlockCache-">
@@ -4415,7 +4415,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setBlockCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1906">setBlockCache</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1909">setBlockCache</a>(<a href="../../../../../org/apache/hadoop/hbase/io/hfile/BlockCache.html" title="interface in org.apache.hadoop.hbase.io.hfile">BlockCache</a>&nbsp;blockCache)</pre>
 <div class="block">Only used for unit test which doesn't start region server.</div>
 </li>
 </ul>
@@ -4425,7 +4425,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getMobFileCache</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1910">getMobFileCache</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1913">getMobFileCache</a>()</pre>
 </li>
 </ul>
 <a name="setMobFileCache-org.apache.hadoop.hbase.mob.MobFileCache-">
@@ -4434,7 +4434,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setMobFileCache</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1918">setMobFileCache</a>(<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&nbsp;mobFileCache)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1921">setMobFileCache</a>(<a href="../../../../../org/apache/hadoop/hbase/mob/MobFileCache.html" title="class in org.apache.hadoop.hbase.mob">MobFileCache</a>&nbsp;mobFileCache)</pre>
 <div class="block">Only used for unit test which doesn't start region server.</div>
 </li>
 </ul>
@@ -4444,7 +4444,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getSplitPolicy</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1925">getSplitPolicy</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionSplitPolicy.html" title="class in org.apache.hadoop.hbase.regionserver">RegionSplitPolicy</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1928">getSplitPolicy</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>split policy for this region.</dd>
@@ -4457,7 +4457,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getBaseConf</h4>
-<pre>org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1936">getBaseConf</a>()</pre>
+<pre>org.apache.hadoop.conf.Configuration&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1939">getBaseConf</a>()</pre>
 <div class="block">A split takes the config from the parent region & passes it to the daughter
  region's constructor. If 'conf' was passed, you would end up using the HTD
  of the parent region in addition to the new daughter HTD. Pass 'baseConf'
@@ -4474,7 +4474,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilesystem</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1941">getFilesystem</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1944">getFilesystem</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd><code>FileSystem</code> being used by this region</dd>
@@ -4487,7 +4487,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionFileSystem</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1946">getRegionFileSystem</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1949">getRegionFileSystem</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver"><code>HRegionFileSystem</code></a> used by this region</dd>
@@ -4500,7 +4500,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getRegionWALFileSystem</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1951">getRegionWALFileSystem</a>()
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1954">getRegionWALFileSystem</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4516,7 +4516,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getWalFileSystem</h4>
-<pre>org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1957">getWalFileSystem</a>()
+<pre>org.apache.hadoop.fs.FileSystem&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1960">getWalFileSystem</a>()
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4532,7 +4532,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALRegionDir</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1969">getWALRegionDir</a>()
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1972">getWALRegionDir</a>()
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -4548,7 +4548,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getEarliestFlushTimeForAllStores</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1978">getEarliestFlushTimeForAllStores</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1981">getEarliestFlushTimeForAllStores</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getEarliestFlushTimeForAllStores--">getEarliestFlushTimeForAllStores</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -4565,7 +4565,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldestHfileTs</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1983">getOldestHfileTs</a>(boolean&nbsp;majorCompactionOnly)
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.1986">getOldestHfileTs</a>(boolean&nbsp;majorCompactionOnly)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getOldestHfileTs-boolean-">Region</a></code></span></div>
 <div class="block">This can be used to determine the last time all files of this region were major compacted.</div>
@@ -4587,7 +4587,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setCompleteSequenceId</h4>
-<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2011">setCompleteSequenceId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr)</pre>
+<pre>org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2014">setCompleteSequenceId</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.ClusterStatusProtos.RegionLoad.Builder&nbsp;regionLoadBldr)</pre>
 </li>
 </ul>
 <a name="doRegionCompactionPrep--">
@@ -4596,7 +4596,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doRegionCompactionPrep</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2037">doRegionCompactionPrep</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2040">doRegionCompactionPrep</a>()
                                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do preparation for pending compaction.</div>
 <dl>
@@ -4611,7 +4611,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2053">compact</a>(boolean&nbsp;majorCompaction)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2056">compact</a>(boolean&nbsp;majorCompaction)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Synchronously compact all stores in the region.
  <p>This operation could block for a long time, so don't call it from a
@@ -4635,7 +4635,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>compactStores</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2078">compactStores</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2081">compactStores</a>()
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This is a helper function that compact all the stores synchronously.
  <p>
@@ -4652,7 +4652,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>compactStore</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2093">compactStore</a>(byte[]&nbsp;family,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2096">compactStore</a>(byte[]&nbsp;family,
                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;throughputController)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This is a helper function that compact the given store.
@@ -4670,7 +4670,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2116">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2119">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;throughputController)
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4700,7 +4700,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldForbidMajorCompaction</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2121">shouldForbidMajorCompaction</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2124">shouldForbidMajorCompaction</a>()</pre>
 </li>
 </ul>
 <a name="compact-org.apache.hadoop.hbase.regionserver.compactions.CompactionContext-org.apache.hadoop.hbase.regionserver.HStore-org.apache.hadoop.hbase.regionserver.throttle.ThroughputController-org.apache.hadoop.hbase.security.User-">
@@ -4709,7 +4709,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>compact</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2203">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2206">compact</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionContext.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionContext</a>&nbsp;compaction,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/throttle/ThroughputController.html" title="interface in org.apache.hadoop.hbase.regionserver.throttle">ThroughputController</a>&nbsp;throughputController,
                        <a href="../../../../../org/apache/hadoop/hbase/security/User.html" title="class in org.apache.hadoop.hbase.security">User</a>&nbsp;user)
@@ -4798,7 +4798,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>flush</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2310">flush</a>(boolean&nbsp;force)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2313">flush</a>(boolean&nbsp;force)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flush the cache.
 
@@ -4830,7 +4830,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>flushcache</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2357">flushcache</a>(boolean&nbsp;forceFlushAllStores,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2360">flushcache</a>(boolean&nbsp;forceFlushAllStores,
                                           boolean&nbsp;writeFlushRequestWalMarker,
                                           <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -4867,7 +4867,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFlushStore</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2442">shouldFlushStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2445">shouldFlushStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store)</pre>
 <div class="block">Should the store be flushed because it is old enough.
  <p>
  Every FlushPolicy should call this to determine whether a store is old enough to flush (except
@@ -4881,7 +4881,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldFlush</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2471">shouldFlush</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;whyFlush)</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2474">shouldFlush</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/StringBuilder.html?is-external=true" title="class or interface in java.lang">StringBuilder</a>&nbsp;whyFlush)</pre>
 <div class="block">Should the memstore be flushed now</div>
 </li>
 </ul>
@@ -4891,7 +4891,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>internalFlushcache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2508">internalFlushcache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.FlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2511">internalFlushcache</a>(<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Flushing all stores.</div>
 <dl>
@@ -4908,7 +4908,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>internalFlushcache</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2516">internalFlushcache</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../or [...]
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2519">internalFlushcache</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../or [...]
                                                    <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status,
                                                    boolean&nbsp;writeFlushWalMarker,
                                                    <a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)
@@ -4928,7 +4928,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>internalFlushcache</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2540">internalFlushcache</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2543">internalFlushcache</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                                      long&nbsp;myseqid,
                                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;storesToFlush,
                                                      <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status,
@@ -4964,7 +4964,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>internalPrepareFlushCache</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2554">internalPrepareFlushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2557">internalPrepareFlushCache</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                                                long&nbsp;myseqid,
                                                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;storesToFlush,
                                                                <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status,
@@ -4983,7 +4983,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>logFatLineOnFlush</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2694">logFatLineOnFlush</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;storesToFlush,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2697">logFatLineOnFlush</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;storesToFlush,
                                long&nbsp;sequenceId)</pre>
 <div class="block">Utility method broken out of internalPrepareFlushCache so that method is smaller.</div>
 </li>
@@ -4994,7 +4994,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doAbortFlushToWAL</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2722">doAbortFlushToWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2725">doAbortFlushToWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                long&nbsp;flushOpSeqId,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;committedFiles)</pre>
 </li>
@@ -5005,7 +5005,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doSyncOfUnflushedWALChanges</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2742">doSyncOfUnflushedWALChanges</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2745">doSyncOfUnflushedWALChanges</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Sync unflushed WAL changes. See HBASE-8208 for details</div>
@@ -5021,7 +5021,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>isAllFamilies</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2758">isAllFamilies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;families)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2761">isAllFamilies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;families)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if passed Set is all families in the region.</dd>
@@ -5034,7 +5034,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>writeFlushRequestMarkerToWAL</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2768">writeFlushRequestMarkerToWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2771">writeFlushRequestMarkerToWAL</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                              boolean&nbsp;writeFlushWalMarker)</pre>
 <div class="block">Writes a marker to WAL indicating a flush is requested but cannot be complete due to various
  reasons. Ignores exceptions from WAL. Returns whether the write succeeded.</div>
@@ -5052,7 +5052,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>internalFlushCacheAndCommit</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2786">internalFlushCacheAndCommit</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResultImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.FlushResultImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2789">internalFlushCacheAndCommit</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                                               <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status,
                                                               <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;prepareResult,
                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;storesToFlush)
@@ -5069,7 +5069,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getNextSequenceId</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2944">getNextSequenceId</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2947">getNextSequenceId</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Method to safely get the next sequence number.</div>
 <dl>
@@ -5086,7 +5086,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2955">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2958">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getScanner-org.apache.hadoop.hbase.client.Scan-">Region</a></code></span></div>
 <div class="block">Return an iterator that scans over the HRegion, returning the indicated
@@ -5111,7 +5111,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2960">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2963">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getScanner-org.apache.hadoop.hbase.client.Scan-java.util.List-">Region</a></code></span></div>
@@ -5140,7 +5140,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getScanner</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2965">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2968">getScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                                              long&nbsp;nonceGroup,
                                              long&nbsp;nonce)
@@ -5157,7 +5157,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>instantiateRegionScanner</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2986">instantiateRegionScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">RegionScanner</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2989">instantiateRegionScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners)
                                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5172,7 +5172,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>instantiateRegionScanner</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2992">instantiateRegionScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RegionScannerImpl.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.RegionScannerImpl</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.2995">instantiateRegionScanner</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Scan.html" title="class in org.apache.hadoop.hbase.client">Scan</a>&nbsp;scan,
                                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/KeyValueScanner.html" title="interface in org.apache.hadoop.hbase.regionserver">KeyValueScanner</a>&gt;&nbsp;additionalScanners,
                                                              long&nbsp;nonceGroup,
                                                              long&nbsp;nonce)
@@ -5189,7 +5189,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareDelete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3008">prepareDelete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3011">prepareDelete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Prepare a delete for a row mutation processor</div>
 <dl>
@@ -5206,7 +5206,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3026">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3029">delete</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Delete.html" title="class in org.apache.hadoop.hbase.client">Delete</a>&nbsp;delete)
             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#delete-org.apache.hadoop.hbase.client.Delete-">Region</a></code></span></div>
 <div class="block">Deletes the specified cells/row.</div>
@@ -5224,7 +5224,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>delete</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3048">delete</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="i [...]
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3051">delete</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="i [...]
             <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)
      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">This is used only by unit tests. Not required to be a public API.</div>
@@ -5242,7 +5242,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareDeleteTimestamps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3063">prepareDeleteTimestamps</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3066">prepareDeleteTimestamps</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                                     <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&gt;&nbsp;familyMap,
                                     byte[]&nbsp;byteNow)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5264,7 +5264,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>updateDeleteLatestVersionTimestamp</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3107">updateDeleteLatestVersionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3110">updateDeleteLatestVersionTimestamp</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                                         <a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get,
                                         int&nbsp;count,
                                         byte[]&nbsp;byteNow)
@@ -5281,7 +5281,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>put</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3124">put</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.3127">put</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Put.html" title="class in org.apache.hadoop.hbase.client">Put</a>&nbsp;put)
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#put-org.apache.hadoop.hbase.client.Put-">Region</a></code></span></div>
 <div class="block">Puts some data in the table.</div>
@@ -5299,7 +5299,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>batchMutate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4000">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4003">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations,
                                      long&nbsp;nonceGroup,
                                      long&nbsp;nonce)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5315,7 +5315,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>batchMutate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4005">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4008">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations,
                                      boolean&nbsp;atomic,
                                      long&nbsp;nonceGroup,
                                      long&nbsp;nonce)
@@ -5332,7 +5332,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>batchMutate</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4015">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4018">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>[]&nbsp;mutations)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#batchMutate-org.apache.hadoop.hbase.client.Mutation:A-">Region</a></code></span></div>
 <div class="block">Perform a batch of mutations.
@@ -5357,7 +5357,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>batchReplay</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4019">batchReplay</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay</a>[]&nbsp;mutations,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4022">batchReplay</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALSplitUtil.MutationReplay.html" title="class in org.apache.hadoop.hbase.wal">WALSplitUtil.MutationReplay</a>[]&nbsp;mutations,
                                      long&nbsp;replaySeqId)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5372,7 +5372,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>batchMutate</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4063">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;?&gt;&nbsp;batchOp)
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/OperationStatus.html" title="class in org.apache.hadoop.hbase.regionserver">OperationStatus</a>[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4066">batchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;?&gt;&nbsp;batchOp)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Perform a batch of mutations.
 
@@ -5404,7 +5404,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doMiniBatchMutate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4094">doMiniBatchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;?&gt;&nbsp;batchOp)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4097">doMiniBatchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.BatchOperation</a>&lt;?&gt;&nbsp;batchOp)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Called to do a piece of the batch that came in to <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html#batchMutate-org.apache.hadoop.hbase.client.Mutation:A-long-long-"><code>batchMutate(Mutation[], long, long)</code></a>
  In here we also handle replay of edits on region recover. Also gets change in size brought
@@ -5421,7 +5421,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getEffectiveDurability</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4182">getEffectiveDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4185">getEffectiveDurability</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;d)</pre>
 <div class="block">Returns effective durability from the passed durability and
  the table descriptor.</div>
 </li>
@@ -5432,7 +5432,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndMutate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4187">checkAndMutate</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4190">checkAndMutate</a>(byte[]&nbsp;row,
                               byte[]&nbsp;family,
                               byte[]&nbsp;qualifier,
                               <a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
@@ -5469,7 +5469,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkAndRowMutate</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4194">checkAndRowMutate</a>(byte[]&nbsp;row,
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4197">checkAndRowMutate</a>(byte[]&nbsp;row,
                                  byte[]&nbsp;family,
                                  byte[]&nbsp;qualifier,
                                  <a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
@@ -5506,7 +5506,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doCheckAndRowMutate</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4203">doCheckAndRowMutate</a>(byte[]&nbsp;row,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4206">doCheckAndRowMutate</a>(byte[]&nbsp;row,
                                     byte[]&nbsp;family,
                                     byte[]&nbsp;qualifier,
                                     <a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
@@ -5529,7 +5529,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkMutationType</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4302">checkMutationType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4305">checkMutationType</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                                byte[]&nbsp;row)
                         throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
@@ -5544,7 +5544,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>matches</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4313">matches</a>(<a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4316">matches</a>(<a href="../../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase">CompareOperator</a>&nbsp;op,
                         int&nbsp;compareResult)</pre>
 </li>
 </ul>
@@ -5554,7 +5554,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doBatchMutate</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4341">doBatchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4344">doBatchMutate</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation)
                     throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5568,7 +5568,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>addRegionToSnapshot</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4366">addRegionToSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4369">addRegionToSnapshot</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription&nbsp;desc,
                                 <a href="../../../../../org/apache/hadoop/hbase/errorhandling/ForeignExceptionSnare.html" title="interface in org.apache.hadoop.hbase.errorhandling">ForeignExceptionSnare</a>&nbsp;exnSnare)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Complete taking the snapshot on the region. Writes the region info and adds references to the
@@ -5593,7 +5593,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>updateSequenceId</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4376">updateSequenceId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html"  [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4379">updateSequenceId</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html"  [...]
                               long&nbsp;sequenceId)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5608,7 +5608,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>updateCellTimestamps</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4392">updateCellTimestamps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ [...]
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4395">updateCellTimestamps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Iterable.html?is-external=true" title="class or interface in java.lang">Iterable</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/ [...]
                                          byte[]&nbsp;now)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Replace any cell timestamps set to <a href="../../../../../org/apache/hadoop/hbase/HConstants.html#LATEST_TIMESTAMP"><code>HConstants.LATEST_TIMESTAMP</code></a>
@@ -5628,7 +5628,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>rewriteCellTags</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4409">rewriteCellTags</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface  [...]
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4412">rewriteCellTags</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface  [...]
                      <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;m)</pre>
 <div class="block">Possibly rewrite incoming cell tags.</div>
 </li>
@@ -5639,7 +5639,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkResources</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4437">checkResources</a>()
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4440">checkResources</a>()
              throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5653,7 +5653,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReadOnly</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4459">checkReadOnly</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4462">checkReadOnly</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5667,7 +5667,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReadsEnabled</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4465">checkReadsEnabled</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4468">checkReadsEnabled</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5681,7 +5681,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>setReadsEnabled</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4472">setReadsEnabled</a>(boolean&nbsp;readsEnabled)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4475">setReadsEnabled</a>(boolean&nbsp;readsEnabled)</pre>
 </li>
 </ul>
 <a name="put-byte:A-byte:A-java.util.List-">
@@ -5690,7 +5690,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>put</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4485">put</a>(byte[]&nbsp;row,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4488">put</a>(byte[]&nbsp;row,
          byte[]&nbsp;family,
          <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;edits)
   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5711,7 +5711,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>applyToMemStore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4500">applyToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4503">applyToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;cells,
                              boolean&nbsp;delta,
                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a>&nbsp;memstoreAccounting)
@@ -5734,7 +5734,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>applyToMemStore</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4514">applyToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4517">applyToMemStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                              <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                              <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a>&nbsp;memstoreAccounting)
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5752,7 +5752,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFamilies</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4524">checkFamilies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;families,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4527">checkFamilies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;families,
                            <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)
                     throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a>,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/InvalidMutationDurabilityException.html" title="class in org.apache.hadoop.hbase.regionserver">InvalidMutationDurabilityException</a></pre>
@@ -5769,7 +5769,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFamily</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4531">checkFamily</a>(byte[]&nbsp;family,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4534">checkFamily</a>(byte[]&nbsp;family,
                          <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)
                   throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a>,
                          <a href="../../../../../org/apache/hadoop/hbase/regionserver/InvalidMutationDurabilityException.html" title="class in org.apache.hadoop.hbase.regionserver">InvalidMutationDurabilityException</a></pre>
@@ -5786,7 +5786,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkFamily</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4543">checkFamily</a>(byte[]&nbsp;family)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4546">checkFamily</a>(byte[]&nbsp;family)
           throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/NoSuchColumnFamilyException.html" title="class in org.apache.hadoop.hbase.regionserver">NoSuchColumnFamilyException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5800,7 +5800,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTimestamps</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4557">checkTimestamps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title [...]
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4560">checkTimestamps</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title [...]
                             long&nbsp;now)
                      throws <a href="../../../../../org/apache/hadoop/hbase/exceptions/FailedSanityCheckException.html" title="class in org.apache.hadoop.hbase.exceptions">FailedSanityCheckException</a></pre>
 <div class="block">Check the collection of families for valid timestamps</div>
@@ -5819,7 +5819,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>isFlushSize</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4584">isFlushSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;size)</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4587">isFlushSize</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;size)</pre>
 </li>
 </ul>
 <a name="replayRecoveredEditsIfAny-java.util.Map-org.apache.hadoop.hbase.util.CancelableProgressable-org.apache.hadoop.hbase.monitoring.MonitoredTask-">
@@ -5828,7 +5828,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayRecoveredEditsIfAny</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4621">replayRecoveredEditsIfAny</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;maxSeqIdInStores,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4624">replayRecoveredEditsIfAny</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;maxSeqIdInStores,
                                          <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter,
                                          <a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.html" title="interface in org.apache.hadoop.hbase.monitoring">MonitoredTask</a>&nbsp;status)
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5875,7 +5875,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayRecoveredEditsForPaths</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4691">replayRecoveredEditsForPaths</a>(long&nbsp;minSeqIdForTheRegion,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4694">replayRecoveredEditsForPaths</a>(long&nbsp;minSeqIdForTheRegion,
                                           org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                           <a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableSet.html?is-external=true" title="class or interface in java.util">NavigableSet</a>&lt;org.apache.hadoop.fs.Path&gt;&nbsp;files,
                                           <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter,
@@ -5893,7 +5893,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayRecoveredEdits</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4761">replayRecoveredEdits</a>(org.apache.hadoop.fs.Path&nbsp;edits,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4764">replayRecoveredEdits</a>(org.apache.hadoop.fs.Path&nbsp;edits,
                                   <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Long.html?is-external=true" title="class or interface in java.lang">Long</a>&gt;&nbsp;maxSeqIdInStores,
                                   <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter,
                                   org.apache.hadoop.fs.FileSystem&nbsp;fs)
@@ -5910,7 +5910,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALCompactionMarker</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4964">replayWALCompactionMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.4967">replayWALCompactionMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.CompactionDescriptor&nbsp;compaction,
                                boolean&nbsp;pickCompactionFiles,
                                boolean&nbsp;removeFiles,
                                long&nbsp;replaySeqId)
@@ -5930,7 +5930,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALFlushMarker</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5025">replayWALFlushMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5028">replayWALFlushMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
                           long&nbsp;replaySeqId)
                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -5945,7 +5945,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALFlushStartMarker</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5072">replayWALFlushStartMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush)
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5075">replayWALFlushStartMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush)
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Replay the flush marker from primary region by creating a corresponding snapshot of
  the store memstores, only if the memstores do not have a higher seqId from an earlier wal
@@ -5962,7 +5962,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALFlushCommitMarker</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5185">replayWALFlushCommitMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5188">replayWALFlushCommitMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -5976,7 +5976,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayFlushInStores</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5309">replayFlushInStores</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5312">replayFlushInStores</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
                                  <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;prepareFlushResult,
                                  boolean&nbsp;dropMemstoreSnapshot)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -5998,7 +5998,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>dropMemStoreContents</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5350">dropMemStoreContents</a>()
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5353">dropMemStoreContents</a>()
                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Be careful, this method will drop all data in the memstore of this region.
  Currently, this method is used to drop memstore to prevent memory leak
@@ -6015,7 +6015,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>dropMemStoreContentsForSeqId</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5372">dropMemStoreContentsForSeqId</a>(long&nbsp;seqId,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5375">dropMemStoreContentsForSeqId</a>(long&nbsp;seqId,
                                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store)
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Drops the memstore contents after replaying a flush descriptor or region open event replay
@@ -6032,7 +6032,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>doDropStoreMemStoreContentsForSeqId</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5403">doDropStoreMemStoreContentsForSeqId</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;s,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSize.html" title="class in org.apache.hadoop.hbase.regionserver">MemStoreSize</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5406">doDropStoreMemStoreContentsForSeqId</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;s,
                                                          long&nbsp;currentSeqId)
                                                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6047,7 +6047,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALFlushAbortMarker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5413">replayWALFlushAbortMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5416">replayWALFlushAbortMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush)</pre>
 </li>
 </ul>
 <a name="replayWALFlushCannotFlushMarker-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor-long-">
@@ -6056,7 +6056,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALFlushCannotFlushMarker</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5419">replayWALFlushCannotFlushMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5422">replayWALFlushCannotFlushMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.FlushDescriptor&nbsp;flush,
                                              long&nbsp;replaySeqId)</pre>
 </li>
 </ul>
@@ -6066,7 +6066,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getPrepareFlushResult</h4>
-<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5439">getPrepareFlushResult</a>()</pre>
+<pre><a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.PrepareFlushResult.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.PrepareFlushResult</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5442">getPrepareFlushResult</a>()</pre>
 </li>
 </ul>
 <a name="replayWALRegionEventMarker-org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor-">
@@ -6075,7 +6075,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALRegionEventMarker</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5445">replayWALRegionEventMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor&nbsp;regionEvent)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5448">replayWALRegionEventMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.RegionEventDescriptor&nbsp;regionEvent)
                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6089,7 +6089,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>replayWALBulkLoadEventMarker</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5561">replayWALBulkLoadEventMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor&nbsp;bulkLoadEvent)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5564">replayWALBulkLoadEventMarker</a>(org.apache.hadoop.hbase.shaded.protobuf.generated.WALProtos.BulkLoadDescriptor&nbsp;bulkLoadEvent)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6103,7 +6103,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>dropPrepareFlushIfPossible</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5644">dropPrepareFlushIfPossible</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5647">dropPrepareFlushIfPossible</a>()</pre>
 <div class="block">If all stores ended up dropping their snapshots, we can safely drop the prepareFlushResult</div>
 </li>
 </ul>
@@ -6113,7 +6113,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFiles</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5671">refreshStoreFiles</a>()
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5674">refreshStoreFiles</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#refreshStoreFiles--">Region</a></code></span></div>
 <div class="block">Check the region's underlying store files, open the files that have not
@@ -6133,7 +6133,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>refreshStoreFiles</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5677">refreshStoreFiles</a>(boolean&nbsp;force)
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5680">refreshStoreFiles</a>(boolean&nbsp;force)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6147,7 +6147,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>logRegionFiles</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5768">logRegionFiles</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5771">logRegionFiles</a>()</pre>
 </li>
 </ul>
 <a name="checkTargetRegion-byte:A-java.lang.String-java.lang.Object-">
@@ -6156,7 +6156,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkTargetRegion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5780">checkTargetRegion</a>(byte[]&nbsp;encodedRegionName,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5783">checkTargetRegion</a>(byte[]&nbsp;encodedRegionName,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;exceptionMsg,
                                <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;payload)
                         throws <a href="../../../../../org/apache/hadoop/hbase/regionserver/WrongRegionException.html" title="class in org.apache.hadoop.hbase.regionserver">WrongRegionException</a></pre>
@@ -6174,7 +6174,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>restoreEdit</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5803">restoreEdit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;s,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5806">restoreEdit</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;s,
                            <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell,
                            <a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreSizing.html" title="interface in org.apache.hadoop.hbase.regionserver">MemStoreSizing</a>&nbsp;memstoreAccounting)</pre>
 <div class="block">Used by tests</div>
@@ -6191,7 +6191,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>isZeroLengthThenDelete</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5812">isZeroLengthThenDelete</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5815">isZeroLengthThenDelete</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                               org.apache.hadoop.fs.Path&nbsp;p)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6210,7 +6210,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>instantiateHStore</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5823">instantiateHStore</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5826">instantiateHStore</a>(<a href="../../../../../org/apache/hadoop/hbase/client/ColumnFamilyDescriptor.html" title="interface in org.apache.hadoop.hbase.client">ColumnFamilyDescriptor</a>&nbsp;family,
                                    boolean&nbsp;warmup)
                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6225,7 +6225,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getStore</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5837">getStore</a>(byte[]&nbsp;column)</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5840">getStore</a>(byte[]&nbsp;column)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getStore-byte:A-">Region</a></code></span></div>
 <div class="block">Return the Store for the given family
  <p>Use with caution.  Exposed for use of fixup utilities.</div>
@@ -6243,7 +6243,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getStore</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5845">getStore</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5848">getStore</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)</pre>
 <div class="block">Return HStore instance. Does not do any copy: as the number of store is limited, we iterate on
  the list.</div>
 </li>
@@ -6254,7 +6254,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getStores</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5851">getStores</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5854">getStores</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getStores--">Region</a></code></span></div>
 <div class="block">Return the list of Stores managed by this region
  <p>Use with caution.  Exposed for use of fixup utilities.</div>
@@ -6272,7 +6272,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getStoreFileList</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5856">getStoreFileList</a>(byte[][]&nbsp;columns)
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5859">getStoreFileList</a>(byte[][]&nbsp;columns)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -6290,7 +6290,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkRow</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5884">checkRow</a>(byte[]&nbsp;row,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5887">checkRow</a>(byte[]&nbsp;row,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;op)
        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Make sure this is a valid row for the HRegion</div>
@@ -6306,7 +6306,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLock</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5901">getRowLock</a>(byte[]&nbsp;row)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5904">getRowLock</a>(byte[]&nbsp;row)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Get an exclusive ( write lock ) lock on a given row.</div>
 <dl>
@@ -6325,7 +6325,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLock</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5906">getRowLock</a>(byte[]&nbsp;row,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5909">getRowLock</a>(byte[]&nbsp;row,
                                  boolean&nbsp;readLock)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getRowLock-byte:A-boolean-">Region</a></code></span></div>
@@ -6360,7 +6360,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getRowLockInternal</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5911">getRowLockInternal</a>(byte[]&nbsp;row,
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5914">getRowLockInternal</a>(byte[]&nbsp;row,
                                             boolean&nbsp;readLock,
                                             <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&nbsp;prevRowLock)
                                      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6376,7 +6376,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseRowLocks</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5995">releaseRowLocks</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;rowLocks)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.5998">releaseRowLocks</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.RowLock.html" title="interface in org.apache.hadoop.hbase.regionserver">Region.RowLock</a>&gt;&nbsp;rowLocks)</pre>
 </li>
 </ul>
 <a name="getReadLockCount--">
@@ -6385,7 +6385,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadLockCount</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6005">getReadLockCount</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6008">getReadLockCount</a>()</pre>
 </li>
 </ul>
 <a name="getLockedRows--">
@@ -6394,7 +6394,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getLockedRows</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.R [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentHashMap</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/HashedBytes.html" title="class in org.apache.hadoop.hbase.util">HashedBytes</a>,<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.RowLockContext.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion.R [...]
 </li>
 </ul>
 <a name="hasMultipleColumnFamilies-java.util.Collection-">
@@ -6403,7 +6403,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>hasMultipleColumnFamilies</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6116">hasMultipleColumnFamilies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/a [...]
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6119">hasMultipleColumnFamilies</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/a [...]
 <div class="block">Determines whether multiple column families are present
  Precondition: familyPaths is not null</div>
 <dl>
@@ -6418,7 +6418,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6142">bulkLoadHFiles</a>(<a href="https://docs.oracle.com/jav [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6145">bulkLoadHFiles</a>(<a href="https://docs.oracle.com/jav [...]
                                                                   boolean&nbsp;assignSeqId,
                                                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.BulkLoadListener</a>&nbsp;bulkLoadListener)
                                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6443,7 +6443,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>bulkLoadHFiles</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6192">bulkLoadHFiles</a>(<a href="https://docs.oracle.com/jav [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;org.apache.hadoop.fs.Path&gt;&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6195">bulkLoadHFiles</a>(<a href="https://docs.oracle.com/jav [...]
                                                                   boolean&nbsp;assignSeqId,
                                                                   <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.BulkLoadListener.html" title="interface in org.apache.hadoop.hbase.regionserver">HRegion.BulkLoadListener</a>&nbsp;bulkLoadListener,
                                                                   boolean&nbsp;copyFile)
@@ -6470,7 +6470,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>equals</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6388">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6391">equals</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>&nbsp;o)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -6483,7 +6483,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>hashCode</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6394">hashCode</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6397">hashCode</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -6496,7 +6496,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>toString</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6399">toString</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.6402">toString</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Overrides:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></code></dd>
@@ -6509,7 +6509,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>newHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7094">newHRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7097">newHRegion</a>(org.apache.hadoop.fs.Path&nbsp;tableDir,
                                  <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                  org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                  org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -6544,7 +6544,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7124">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7127">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                     org.apache.hadoop.fs.Path&nbsp;rootDir,
                                     org.apache.hadoop.conf.Configuration&nbsp;conf,
                                     <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;hTableDescriptor,
@@ -6571,7 +6571,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createRegionDir</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7144">createRegionDir</a>(org.apache.hadoop.conf.Configuration&nbsp;configuration,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegionFileSystem.html" title="class in org.apache.hadoop.hbase.regionserver">HRegionFileSystem</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7147">createRegionDir</a>(org.apache.hadoop.conf.Configuration&nbsp;configuration,
                                                 <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;ri,
                                                 org.apache.hadoop.fs.Path&nbsp;rootDir)
                                          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -6588,7 +6588,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>createHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7154">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7157">createHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                     org.apache.hadoop.fs.Path&nbsp;rootDir,
                                     org.apache.hadoop.conf.Configuration&nbsp;conf,
                                     <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;hTableDescriptor,
@@ -6606,7 +6606,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7174">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7177">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf)
@@ -6632,7 +6632,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7196">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7199">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                   org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -6664,7 +6664,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7217">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7220">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
@@ -6694,7 +6694,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7238">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7241">openHRegion</a>(org.apache.hadoop.fs.Path&nbsp;rootDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                                   <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
@@ -6728,7 +6728,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7266">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7269">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
@@ -6760,7 +6760,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7287">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7290">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                                   <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
@@ -6796,7 +6796,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7310">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7313">openHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                   org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                                   org.apache.hadoop.fs.Path&nbsp;tableDir,
@@ -6833,7 +6833,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>getReplicationScope</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7324">getReplicationScope</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html?is-external=true" title="class or interface in java.util">NavigableMap</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html?is-external=true" title="class or interface in java.lang">Integer</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7327">getReplicationScope</a>()</pre>
 </li>
 </ul>
 <a name="openHRegion-org.apache.hadoop.hbase.regionserver.HRegion-org.apache.hadoop.hbase.util.CancelableProgressable-">
@@ -6842,7 +6842,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7334">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;other,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7337">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;other,
                                   <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Useful when reopening a closed region (normally for unit tests)</div>
@@ -6863,7 +6863,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7342">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;other,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7345">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a>&nbsp;other,
                                  <a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -6878,7 +6878,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openHRegion</h4>
-<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7352">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
+<pre>protected&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7355">openHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/util/CancelableProgressable.html" title="interface in org.apache.hadoop.hbase.util">CancelableProgressable</a>&nbsp;reporter)
                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Open HRegion.
  Calls initialize and sets sequenceId.</div>
@@ -6896,7 +6896,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>openReadOnlyFileSystemHRegion</h4>
-<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7391">openReadOnlyFileSystemHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>public static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7394">openReadOnlyFileSystemHRegion</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                                     org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                     org.apache.hadoop.fs.Path&nbsp;tableDir,
                                                     <a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
@@ -6922,7 +6922,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>warmupHRegion</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7407">warmupHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7410">warmupHRegion</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                  <a href="../../../../../org/apache/hadoop/hbase/client/TableDescriptor.html" title="interface in org.apache.hadoop.hbase.client">TableDescriptor</a>&nbsp;htd,
                                  <a href="../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a>&nbsp;wal,
                                  org.apache.hadoop.conf.Configuration&nbsp;conf,
@@ -6941,7 +6941,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkCompressionCodecs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7435">checkCompressionCodecs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7438">checkCompressionCodecs</a>()
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6955,7 +6955,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkEncryption</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7442">checkEncryption</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7445">checkEncryption</a>()
                       throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6969,7 +6969,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <ul class="blockList">
 <li class="blockList">
 <h4>checkClassLoading</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7448">checkClassLoading</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7451">checkClassLoading</a>()
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -6984,7 +6984,7 @@ public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/r
 <li class="blockList">
 <h4>getRegionDir</h4>
 <pre><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Deprecated.html?is-external=true" title="class or interface in java.lang">@Deprecated</a>
-public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7462">getRegionDir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
+public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7465">getRegionDir</a>(org.apache.hadoop.fs.Path&nbsp;tabledir,
                                                                  <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 <div class="block"><span class="deprecatedLabel">Deprecated.</span>&nbsp;<span class="deprecationComment">For tests only; to be removed.</span></div>
 <div class="block">Computes the Path of the HRegion</div>
@@ -7003,7 +7003,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>rowIsInRange</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7474">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7477">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                    byte[]&nbsp;row)</pre>
 <div class="block">Determines if the specified row is within the row range specified by the
  specified RegionInfo</div>
@@ -7022,7 +7022,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>rowIsInRange</h4>
-<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7481">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public static&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7484">rowIsInRange</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
                                    byte[]&nbsp;row,
                                    int&nbsp;offset,
                                    short&nbsp;length)</pre>
@@ -7034,7 +7034,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7491">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7494">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get-org.apache.hadoop.hbase.client.Get-">Region</a></code></span></div>
 <div class="block">Do a get based on the get parameter.</div>
@@ -7056,7 +7056,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>prepareGet</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7498">prepareGet</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7501">prepareGet</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.client">Get</a>&nbsp;get)
          throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -7070,7 +7070,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7513">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.clien [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7516">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.clien [...]
                       boolean&nbsp;withCoprocessor)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#get-org.apache.hadoop.hbase.client.Get-boolean-">Region</a></code></span></div>
@@ -7095,7 +7095,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7517">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.clien [...]
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7520">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Get.html" title="class in org.apache.hadoop.hbase.clien [...]
                       boolean&nbsp;withCoprocessor,
                       long&nbsp;nonceGroup,
                       long&nbsp;nonce)
@@ -7112,7 +7112,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>metricsUpdateForGet</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7552">metricsUpdateForGet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7555">metricsUpdateForGet</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;results,
                          long&nbsp;before)</pre>
 </li>
 </ul>
@@ -7122,7 +7122,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRow</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7559">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;rm)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7562">mutateRow</a>(<a href="../../../../../org/apache/hadoop/hbase/client/RowMutations.html" title="class in org.apache.hadoop.hbase.client">RowMutations</a>&nbsp;rm)
                throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#mutateRow-org.apache.hadoop.hbase.client.RowMutations-">Region</a></code></span></div>
 <div class="block">Performs multiple mutations atomically on a single row. Currently
@@ -7143,7 +7143,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>mutateRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7579">mutateRowsWithLocks</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7582">mutateRowsWithLocks</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html?is-external=true" title="class or interface in java.util">Collection</a>&lt;byte[]&gt;&nbsp;rowsToLock,
                                 long&nbsp;nonceGroup,
                                 long&nbsp;nonce)
@@ -7172,7 +7172,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getLoadStatistics</h4>
-<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7607">getLoadStatistics</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.RegionLoadStats&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7610">getLoadStatistics</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>statistics about the current load of the region</dd>
@@ -7185,7 +7185,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7630">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7633">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#processRowsWithLocks-org.apache.hadoop.hbase.regionserver.RowProcessor-">Region</a></code></span></div>
 <div class="block">Performs atomic multiple reads and writes on a given row.</div>
@@ -7205,7 +7205,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7635">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7638">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                                  long&nbsp;nonceGroup,
                                  long&nbsp;nonce)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -7229,7 +7229,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>processRowsWithLocks</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7641">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7644">processRowsWithLocks</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                                  long&nbsp;timeout,
                                  long&nbsp;nonceGroup,
                                  long&nbsp;nonce)
@@ -7256,7 +7256,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>preProcess</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7766">preProcess</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7769">preProcess</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                         <a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <dl>
@@ -7271,7 +7271,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doProcessRowWithTimeout</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7776">doProcessRowWithTimeout</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7779">doProcessRowWithTimeout</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RowProcessor.html" title="interface in org.apache.hadoop.hbase.regionserver">RowProcessor</a>&lt;?,?&gt;&nbsp;processor,
                                      long&nbsp;now,
                                      <a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.html" title="class in org.apache.hadoop.hbase.regionserver">HRegion</a>&nbsp;region,
                                      <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&gt;&nbsp;mutations,
@@ -7290,7 +7290,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7826">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7829">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;append)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#append-org.apache.hadoop.hbase.client.Append-">Region</a></code></span></div>
 <div class="block">Perform one or more append operations on a row.</div>
@@ -7310,7 +7310,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7830">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;mutation,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7833">append</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Append.html" title="class in org.apache.hadoop.hbase.client">Append</a>&nbsp;mutation,
                      long&nbsp;nonceGroup,
                      long&nbsp;nonce)
               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -7326,7 +7326,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7835">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7838">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;increment)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#increment-org.apache.hadoop.hbase.client.Increment-">Region</a></code></span></div>
 <div class="block">Perform one or more increment operations on a row.</div>
@@ -7346,7 +7346,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>increment</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7839">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;mutation,
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7842">increment</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Increment.html" title="class in org.apache.hadoop.hbase.client">Increment</a>&nbsp;mutation,
                         long&nbsp;nonceGroup,
                         long&nbsp;nonce)
                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -7362,7 +7362,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doDelta</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7853">doDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7856">doDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                        <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                        long&nbsp;nonceGroup,
                        long&nbsp;nonce,
@@ -7388,7 +7388,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7932">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7935">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                                                               <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                               long&nbsp;nonceGroup,
                                                               long&nbsp;nonce)
@@ -7405,7 +7405,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7939">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7942">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                                                               <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds,
                                                               long&nbsp;now,
@@ -7424,7 +7424,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doWALAppend</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7948">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/MultiVersionConcurrencyControl.WriteEntry.html" title="class in org.apache.hadoop.hbase.regionserver">MultiVersionConcurrencyControl.WriteEntry</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7951">doWALAppend</a>(<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;walEdit,
                                                               <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability,
                                                               <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html?is-external=true" title="class or interface in java.util">UUID</a>&gt;&nbsp;clusterIds,
                                                               long&nbsp;now,
@@ -7446,7 +7446,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>doCoprocessorPreCall</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7994">doCoprocessorPreCall</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/Result.html" title="class in org.apache.hadoop.hbase.client">Result</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.7997">doCoprocessorPreCall</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                                     <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Do coprocessor pre-increment or pre-append call.</div>
@@ -7465,7 +7465,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDeltas</h4>
-<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8020">reckonDeltas</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
+<pre>private&nbsp;<a href="../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8023">reckonDeltas</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                              <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                              <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;effectiveDurability,
                              <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>,<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hb [...]
@@ -7491,7 +7491,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDeltasByStore</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8066">reckonDeltasByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8069">reckonDeltasByStore</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org [...]
                                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op,
                                        <a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase.client">Mutation</a>&nbsp;mutation,
                                        <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;effectiveDurability,
@@ -7524,7 +7524,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reckonDelta</h4>
-<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8142">reckonDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
+<pre>private static&nbsp;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8145">reckonDelta</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;delta,
                                 <a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;currentCell,
                                 byte[]&nbsp;columnFamily,
                                 long&nbsp;now,
@@ -7543,7 +7543,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getLongValue</h4>
-<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8170">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
+<pre>private static&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8173">getLongValue</a>(<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&nbsp;cell)
                           throws <a href="../../../../../org/apache/hadoop/hbase/DoNotRetryIOException.html" title="class in org.apache.hadoop.hbase">DoNotRetryIOException</a></pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -7559,7 +7559,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>get</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8186">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase [...]
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8189">get</a>(<a href="../../../../../org/apache/hadoop/hbase/client/Mutation.html" title="class in org.apache.hadoop.hbase [...]
                        <a href="../../../../../org/apache/hadoop/hbase/regionserver/HStore.html" title="class in org.apache.hadoop.hbase.regionserver">HStore</a>&nbsp;store,
                        <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;coordinates,
                        <a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client">IsolationLevel</a>&nbsp;isolation,
@@ -7584,7 +7584,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>sort</h4>
-<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8210">sort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class [...]
+<pre>private static&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.html" title="interface in org.apache.hadoop.hbase">Cell</a>&gt;&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8213">sort</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class [...]
                                <a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;comparator)</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
@@ -7598,7 +7598,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>heapSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8249">heapSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8252">heapSize</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></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>
@@ -7614,7 +7614,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>registerService</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8269">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8272">registerService</a>(com.google.protobuf.Service&nbsp;instance)</pre>
 <div class="block">Registers a new protocol buffer <code>Service</code> subclass as a coprocessor endpoint to
  be available for handling Region#execService(com.google.protobuf.RpcController,
     org.apache.hadoop.hbase.protobuf.generated.ClientProtos.CoprocessorServiceCall) calls.
@@ -7640,7 +7640,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>execService</h4>
-<pre>public&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8304">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
+<pre>public&nbsp;com.google.protobuf.Message&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8307">execService</a>(com.google.protobuf.RpcController&nbsp;controller,
                                                org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos.CoprocessorServiceCall&nbsp;call)
                                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Executes a single protocol buffer coprocessor endpoint <code>Service</code> method using
@@ -7668,7 +7668,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldForceSplit</h4>
-<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8355">shouldForceSplit</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8358">shouldForceSplit</a>()</pre>
 </li>
 </ul>
 <a name="getExplicitSplitPoint--">
@@ -7677,7 +7677,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getExplicitSplitPoint</h4>
-<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8359">getExplicitSplitPoint</a>()</pre>
+<pre>byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8362">getExplicitSplitPoint</a>()</pre>
 </li>
 </ul>
 <a name="forceSplit-byte:A-">
@@ -7686,7 +7686,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>forceSplit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8363">forceSplit</a>(byte[]&nbsp;sp)</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8366">forceSplit</a>(byte[]&nbsp;sp)</pre>
 </li>
 </ul>
 <a name="clearSplit--">
@@ -7695,7 +7695,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>clearSplit</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8372">clearSplit</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8375">clearSplit</a>()</pre>
 </li>
 </ul>
 <a name="checkSplit--">
@@ -7704,7 +7704,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>checkSplit</h4>
-<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8383">checkSplit</a>()</pre>
+<pre>public&nbsp;byte[]&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8386">checkSplit</a>()</pre>
 <div class="block">Return the splitpoint. null indicates the region isn't splittable
  If the splitpoint isn't explicitly specified, it will go over the stores
  to find the best splitpoint. Currently the criteria of best splitpoint
@@ -7717,7 +7717,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactPriority</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8417">getCompactPriority</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8420">getCompactPriority</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>The priority that this region should have in the compaction queue</dd>
@@ -7730,7 +7730,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8423">getCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8426">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the coprocessor host</dd>
@@ -7743,7 +7743,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>setCoprocessorHost</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8429">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8432">setCoprocessorHost</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/RegionCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver">RegionCoprocessorHost</a>&nbsp;coprocessorHost)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>coprocessorHost</code> - the new coprocessor host</dd>
@@ -7756,7 +7756,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8434">startRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8437">startRegionOperation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation--">Region</a></code></span></div>
 <div class="block">This method needs to be called before any public call that reads or
@@ -7778,7 +7778,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8439">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8442">startRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;op)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#startRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">Region</a></code></span></div>
 <div class="block">This method needs to be called before any public call that reads or
@@ -7802,7 +7802,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8478">closeRegionOperation</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8481">closeRegionOperation</a>()
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation--">Region</a></code></span></div>
 <div class="block">Closes the region operation lock.</div>
@@ -7820,7 +7820,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeRegionOperation</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8483">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8486">closeRegionOperation</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver">Region.Operation</a>&nbsp;operation)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#closeRegionOperation-org.apache.hadoop.hbase.regionserver.Region.Operation-">Region</a></code></span></div>
 <div class="block">Closes the region operation lock. This needs to be called in the finally block corresponding
@@ -7839,7 +7839,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>startBulkRegionOperation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8502">startBulkRegionOperation</a>(boolean&nbsp;writeLockNeeded)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8505">startBulkRegionOperation</a>(boolean&nbsp;writeLockNeeded)
                                throws <a href="../../../../../org/apache/hadoop/hbase/NotServingRegionException.html" title="class in org.apache.hadoop.hbase">NotServingRegionException</a>,
                                       <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
                                       <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -7861,7 +7861,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>closeBulkRegionOperation</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8520">closeBulkRegionOperation</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8523">closeBulkRegionOperation</a>()</pre>
 <div class="block">Closes the lock. This needs to be called in the finally block corresponding
  to the try block of #startRegionOperation</div>
 </li>
@@ -7872,7 +7872,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>recordMutationWithoutWal</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8529">recordMutationWithoutWal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.h [...]
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8532">recordMutationWithoutWal</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../org/apache/hadoop/hbase/Cell.h [...]
 <div class="block">Update LongAdders for number of puts without wal and the size of possible data loss.
  These information are exposed by the region server metrics.</div>
 </li>
@@ -7883,7 +7883,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8551">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8554">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock)
            throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
 <dl>
@@ -7899,7 +7899,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>lock</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8560">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8563">lock</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html?is-external=true" title="class or interface in java.util.concurrent.locks">Lock</a>&nbsp;lock,
                   int&nbsp;multiplier)
            throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a>,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/io/InterruptedIOException.html?is-external=true" title="class or interface in java.io">InterruptedIOException</a></pre>
@@ -7919,7 +7919,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8587">sync</a>(long&nbsp;txid,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8590">sync</a>(long&nbsp;txid,
                   <a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client">Durability</a>&nbsp;durability)
            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Calls sync with the given transaction ID</div>
@@ -7937,7 +7937,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldSyncWAL</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8619">shouldSyncWAL</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8622">shouldSyncWAL</a>()</pre>
 <div class="block">Check whether we should sync the wal from the table's durability settings</div>
 </li>
 </ul>
@@ -7947,7 +7947,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getOpenSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8650">getOpenSeqNum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8653">getOpenSeqNum</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the latest sequence number that was read from storage when this region was opened</dd>
@@ -7960,7 +7960,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMaxStoreSeqId</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/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/regionserver/HRegion.html#line.8655">getMaxStoreSeqId</a>()</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;byte[],<a href="https://docs.oracle.com/javase/8/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/regionserver/HRegion.html#line.8658">getMaxStoreSeqId</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getMaxStoreSeqId--">getMaxStoreSeqId</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -7976,7 +7976,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldestSeqIdOfStore</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8659">getOldestSeqIdOfStore</a>(byte[]&nbsp;familyName)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8662">getOldestSeqIdOfStore</a>(byte[]&nbsp;familyName)</pre>
 </li>
 </ul>
 <a name="getCompactionState--">
@@ -7985,7 +7985,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCompactionState</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8664">getCompactionState</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client">CompactionState</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8667">getCompactionState</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCompactionState--">getCompactionState</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html" title="interface in org.apache.hadoop.hbase.regionserver">Region</a></code></dd>
@@ -8000,7 +8000,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reportCompactionRequestStart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8670">reportCompactionRequestStart</a>(boolean&nbsp;isMajor)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8673">reportCompactionRequestStart</a>(boolean&nbsp;isMajor)</pre>
 </li>
 </ul>
 <a name="reportCompactionRequestEnd-boolean-int-long-">
@@ -8009,7 +8009,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reportCompactionRequestEnd</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8674">reportCompactionRequestEnd</a>(boolean&nbsp;isMajor,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8677">reportCompactionRequestEnd</a>(boolean&nbsp;isMajor,
                                        int&nbsp;numFiles,
                                        long&nbsp;filesSizeCompacted)</pre>
 </li>
@@ -8020,7 +8020,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>reportCompactionRequestFailure</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8685">reportCompactionRequestFailure</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8688">reportCompactionRequestFailure</a>()</pre>
 </li>
 </ul>
 <a name="incrementCompactionsQueuedCount--">
@@ -8029,7 +8029,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementCompactionsQueuedCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8689">incrementCompactionsQueuedCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8692">incrementCompactionsQueuedCount</a>()</pre>
 </li>
 </ul>
 <a name="decrementCompactionsQueuedCount--">
@@ -8038,7 +8038,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>decrementCompactionsQueuedCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8693">decrementCompactionsQueuedCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8696">decrementCompactionsQueuedCount</a>()</pre>
 </li>
 </ul>
 <a name="incrementFlushesQueuedCount--">
@@ -8047,7 +8047,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>incrementFlushesQueuedCount</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8697">incrementFlushesQueuedCount</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8700">incrementFlushesQueuedCount</a>()</pre>
 </li>
 </ul>
 <a name="getReadPoint--">
@@ -8056,7 +8056,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getReadPoint</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8702">getReadPoint</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8705">getReadPoint</a>()</pre>
 </li>
 </ul>
 <a name="onConfigurationChange-org.apache.hadoop.conf.Configuration-">
@@ -8065,7 +8065,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>onConfigurationChange</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8710">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8713">onConfigurationChange</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">This method would be called by the <a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf"><code>ConfigurationManager</code></a>
  object when the <code>Configuration</code> object is reloaded from disk.</div>
 <dl>
@@ -8080,7 +8080,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>registerChildren</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8718">registerChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8721">registerChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
 <div class="block">Needs to be called to register the children to the manager.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -8096,7 +8096,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>deregisterChildren</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8727">deregisterChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8730">deregisterChildren</a>(<a href="../../../../../org/apache/hadoop/hbase/conf/ConfigurationManager.html" title="class in org.apache.hadoop.hbase.conf">ConfigurationManager</a>&nbsp;manager)</pre>
 <div class="block">Needs to be called to deregister the children from the manager.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -8112,7 +8112,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getCellComparator</h4>
-<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8732">getCellComparator</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../org/apache/hadoop/hbase/CellComparator.html" title="interface in org.apache.hadoop.hbase">CellComparator</a>&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8735">getCellComparator</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#getCellComparator--">Region</a></code></span></div>
 <div class="block">The comparator to be used with the region</div>
 <dl>
@@ -8127,7 +8127,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>getMemStoreFlushSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8737">getMemStoreFlushSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8740">getMemStoreFlushSize</a>()</pre>
 </li>
 </ul>
 <a name="throwException-java.lang.String-java.lang.String-">
@@ -8136,7 +8136,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>throwException</h4>
-<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8743">throwException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;title,
+<pre>void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8746">throwException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;title,
                     <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;regionName)</pre>
 </li>
 </ul>
@@ -8146,7 +8146,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8764">requestCompaction</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8767">requestCompaction</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why,
                               int&nbsp;priority,
                               boolean&nbsp;major,
                               <a href="../../../../../org/apache/hadoop/hbase/regionserver/compactions/CompactionLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver.compactions">CompactionLifeCycleTracker</a>&nbsp;tracker)
@@ -8167,7 +8167,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestCompaction</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8774">requestCompaction</a>(byte[]&nbsp;family,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8777">requestCompaction</a>(byte[]&nbsp;family,
                               <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;why,
                               int&nbsp;priority,
                               boolean&nbsp;major,
@@ -8189,7 +8189,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestFlushIfNeeded</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8788">requestFlushIfNeeded</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8791">requestFlushIfNeeded</a>()
                            throws <a href="../../../../../org/apache/hadoop/hbase/RegionTooBusyException.html" title="class in org.apache.hadoop.hbase">RegionTooBusyException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -8203,7 +8203,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestFlush</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8794">requestFlush</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8797">requestFlush</a>()</pre>
 </li>
 </ul>
 <a name="requestFlush0-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">
@@ -8212,7 +8212,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestFlush0</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8801">requestFlush0</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8804">requestFlush0</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)</pre>
 </li>
 </ul>
 <a name="requestFlush-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">
@@ -8221,7 +8221,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockList">
 <li class="blockList">
 <h4>requestFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8821">requestFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)
+<pre>public&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8824">requestFlush</a>(<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushLifeCycleTracker.html" title="interface in org.apache.hadoop.hbase.regionserver">FlushLifeCycleTracker</a>&nbsp;tracker)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.html#requestFlush-org.apache.hadoop.hbase.regionserver.FlushLifeCycleTracker-">Region</a></code></span></div>
 <div class="block">Request flush on this region.</div>
@@ -8239,7 +8239,7 @@ public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../src-ht
 <ul class="blockListLast">
 <li class="blockList">
 <h4>decorateRegionConfiguration</h4>
-<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8830">decorateRegionConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
+<pre>static&nbsp;void&nbsp;<a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/HRegion.html#line.8833">decorateRegionConfiguration</a>(org.apache.hadoop.conf.Configuration&nbsp;conf)</pre>
 <div class="block">This method modifies the region's configuration in order to inject replication-related
  features</div>
 <dl>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CloseableVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CloseableVisitor.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CloseableVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CloseableVisitor.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectAllVisitor.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectingVisitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectingVisitor.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectingVisitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.CollectingVisitor.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.DefaultVisitorBase.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.DefaultVisitorBase.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.DefaultVisitorBase.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.DefaultVisitorBase.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.QueryType.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.ReplicationBarrierResult.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.ReplicationBarrierResult.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.ReplicationBarrierResult.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.ReplicationBarrierResult.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.Visitor.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.html b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.html
index ff06e00..cf8f46d 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/MetaTableAccessor.html
@@ -1663,7 +1663,7 @@
 <span class="sourceLineNo">1655</span>   * Construct PUT for given state<a name="line.1655"></a>
 <span class="sourceLineNo">1656</span>   * @param state new state<a name="line.1656"></a>
 <span class="sourceLineNo">1657</span>   */<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>  private static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
+<span class="sourceLineNo">1658</span>  public static Put makePutFromTableState(TableState state, long ts) {<a name="line.1658"></a>
 <span class="sourceLineNo">1659</span>    Put put = new Put(state.getTableName().getName(), ts);<a name="line.1659"></a>
 <span class="sourceLineNo">1660</span>    put.addColumn(getTableFamily(), getTableStateColumn(), state.convert().toByteArray());<a name="line.1660"></a>
 <span class="sourceLineNo">1661</span>    return put;<a name="line.1661"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
index 3cd077d..9e88733 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/Version.html
@@ -16,9 +16,9 @@
 <span class="sourceLineNo">008</span>@InterfaceAudience.Private<a name="line.8"></a>
 <span class="sourceLineNo">009</span>public class Version {<a name="line.9"></a>
 <span class="sourceLineNo">010</span>  public static final String version = "3.0.0-SNAPSHOT";<a name="line.10"></a>
-<span class="sourceLineNo">011</span>  public static final String revision = "8c1edb3bba56677b0ee106f340d12b42e999cdaa";<a name="line.11"></a>
+<span class="sourceLineNo">011</span>  public static final String revision = "27ed2ac071f0867df315a7e5d8acf49aabcd9399";<a name="line.11"></a>
 <span class="sourceLineNo">012</span>  public static final String user = "jenkins";<a name="line.12"></a>
-<span class="sourceLineNo">013</span>  public static final String date = "Tue Aug 13 14:35:01 UTC 2019";<a name="line.13"></a>
+<span class="sourceLineNo">013</span>  public static final String date = "Wed Aug 14 14:35:17 UTC 2019";<a name="line.13"></a>
 <span class="sourceLineNo">014</span>  public static final String url = "git://jenkins-websites-he-de.apache.org/home/jenkins/jenkins-slave/workspace/hbase_generate_website/hbase";<a name="line.14"></a>
 <span class="sourceLineNo">015</span>  public static final String srcChecksum = "(stdin)=";<a name="line.15"></a>
 <span class="sourceLineNo">016</span>}<a name="line.16"></a>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
index e7c31b5..a1cbc27 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/HRegion.BatchOperation.Visitor.html
@@ -1553,7299 +1553,7302 @@
 <span class="sourceLineNo">1545</span>    MonitoredTask status = TaskMonitor.get().createStatus(<a name="line.1545"></a>
 <span class="sourceLineNo">1546</span>        "Closing region " + this.getRegionInfo().getEncodedName() +<a name="line.1546"></a>
 <span class="sourceLineNo">1547</span>        (abort ? " due to abort" : ""));<a name="line.1547"></a>
-<span class="sourceLineNo">1548</span><a name="line.1548"></a>
+<span class="sourceLineNo">1548</span>    status.enableStatusJournal(false);<a name="line.1548"></a>
 <span class="sourceLineNo">1549</span>    status.setStatus("Waiting for close lock");<a name="line.1549"></a>
 <span class="sourceLineNo">1550</span>    try {<a name="line.1550"></a>
 <span class="sourceLineNo">1551</span>      synchronized (closeLock) {<a name="line.1551"></a>
 <span class="sourceLineNo">1552</span>        return doClose(abort, status);<a name="line.1552"></a>
 <span class="sourceLineNo">1553</span>      }<a name="line.1553"></a>
 <span class="sourceLineNo">1554</span>    } finally {<a name="line.1554"></a>
-<span class="sourceLineNo">1555</span>      status.cleanup();<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><a name="line.1558"></a>
-<span class="sourceLineNo">1559</span>  /**<a name="line.1559"></a>
-<span class="sourceLineNo">1560</span>   * Exposed for some very specific unit tests.<a name="line.1560"></a>
-<span class="sourceLineNo">1561</span>   */<a name="line.1561"></a>
-<span class="sourceLineNo">1562</span>  @VisibleForTesting<a name="line.1562"></a>
-<span class="sourceLineNo">1563</span>  public void setClosing(boolean closing) {<a name="line.1563"></a>
-<span class="sourceLineNo">1564</span>    this.closing.set(closing);<a name="line.1564"></a>
-<span class="sourceLineNo">1565</span>  }<a name="line.1565"></a>
-<span class="sourceLineNo">1566</span><a name="line.1566"></a>
-<span class="sourceLineNo">1567</span>  /**<a name="line.1567"></a>
-<span class="sourceLineNo">1568</span>   * The {@link HRegion#doClose} will block forever if someone tries proving the dead lock via the unit test.<a name="line.1568"></a>
-<span class="sourceLineNo">1569</span>   * Instead of blocking, the {@link HRegion#doClose} will throw exception if you set the timeout.<a name="line.1569"></a>
-<span class="sourceLineNo">1570</span>   * @param timeoutForWriteLock the second time to wait for the write lock in {@link HRegion#doClose}<a name="line.1570"></a>
-<span class="sourceLineNo">1571</span>   */<a name="line.1571"></a>
-<span class="sourceLineNo">1572</span>  @VisibleForTesting<a name="line.1572"></a>
-<span class="sourceLineNo">1573</span>  public void setTimeoutForWriteLock(long timeoutForWriteLock) {<a name="line.1573"></a>
-<span class="sourceLineNo">1574</span>    assert timeoutForWriteLock &gt;= 0;<a name="line.1574"></a>
-<span class="sourceLineNo">1575</span>    this.timeoutForWriteLock = timeoutForWriteLock;<a name="line.1575"></a>
-<span class="sourceLineNo">1576</span>  }<a name="line.1576"></a>
-<span class="sourceLineNo">1577</span><a name="line.1577"></a>
-<span class="sourceLineNo">1578</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="UL_UNRELEASED_LOCK_EXCEPTION_PATH",<a name="line.1578"></a>
-<span class="sourceLineNo">1579</span>      justification="I think FindBugs is confused")<a name="line.1579"></a>
-<span class="sourceLineNo">1580</span>  private Map&lt;byte[], List&lt;HStoreFile&gt;&gt; doClose(boolean abort, MonitoredTask status)<a name="line.1580"></a>
-<span class="sourceLineNo">1581</span>      throws IOException {<a name="line.1581"></a>
-<span class="sourceLineNo">1582</span>    if (isClosed()) {<a name="line.1582"></a>
-<span class="sourceLineNo">1583</span>      LOG.warn("Region " + this + " already closed");<a name="line.1583"></a>
-<span class="sourceLineNo">1584</span>      return null;<a name="line.1584"></a>
-<span class="sourceLineNo">1585</span>    }<a name="line.1585"></a>
-<span class="sourceLineNo">1586</span><a name="line.1586"></a>
-<span class="sourceLineNo">1587</span>    if (coprocessorHost != null) {<a name="line.1587"></a>
-<span class="sourceLineNo">1588</span>      status.setStatus("Running coprocessor pre-close hooks");<a name="line.1588"></a>
-<span class="sourceLineNo">1589</span>      this.coprocessorHost.preClose(abort);<a name="line.1589"></a>
-<span class="sourceLineNo">1590</span>    }<a name="line.1590"></a>
-<span class="sourceLineNo">1591</span>    status.setStatus("Disabling compacts and flushes for region");<a name="line.1591"></a>
-<span class="sourceLineNo">1592</span>    boolean canFlush = true;<a name="line.1592"></a>
-<span class="sourceLineNo">1593</span>    synchronized (writestate) {<a name="line.1593"></a>
-<span class="sourceLineNo">1594</span>      // Disable compacting and flushing by background threads for this<a name="line.1594"></a>
-<span class="sourceLineNo">1595</span>      // region.<a name="line.1595"></a>
-<span class="sourceLineNo">1596</span>      canFlush = !writestate.readOnly;<a name="line.1596"></a>
-<span class="sourceLineNo">1597</span>      writestate.writesEnabled = false;<a name="line.1597"></a>
-<span class="sourceLineNo">1598</span>      LOG.debug("Closing {}, disabling compactions &amp; flushes",<a name="line.1598"></a>
-<span class="sourceLineNo">1599</span>          this.getRegionInfo().getEncodedName());<a name="line.1599"></a>
-<span class="sourceLineNo">1600</span>      waitForFlushesAndCompactions();<a name="line.1600"></a>
-<span class="sourceLineNo">1601</span>    }<a name="line.1601"></a>
-<span class="sourceLineNo">1602</span>    // If we were not just flushing, is it worth doing a preflush...one<a name="line.1602"></a>
-<span class="sourceLineNo">1603</span>    // that will clear out of the bulk of the memstore before we put up<a name="line.1603"></a>
-<span class="sourceLineNo">1604</span>    // the close flag?<a name="line.1604"></a>
-<span class="sourceLineNo">1605</span>    if (!abort &amp;&amp; worthPreFlushing() &amp;&amp; canFlush) {<a name="line.1605"></a>
-<span class="sourceLineNo">1606</span>      status.setStatus("Pre-flushing region before close");<a name="line.1606"></a>
-<span class="sourceLineNo">1607</span>      LOG.info("Running close preflush of {}", this.getRegionInfo().getEncodedName());<a name="line.1607"></a>
-<span class="sourceLineNo">1608</span>      try {<a name="line.1608"></a>
-<span class="sourceLineNo">1609</span>        internalFlushcache(status);<a name="line.1609"></a>
-<span class="sourceLineNo">1610</span>      } catch (IOException ioe) {<a name="line.1610"></a>
-<span class="sourceLineNo">1611</span>        // Failed to flush the region. Keep going.<a name="line.1611"></a>
-<span class="sourceLineNo">1612</span>        status.setStatus("Failed pre-flush " + this + "; " + ioe.getMessage());<a name="line.1612"></a>
-<span class="sourceLineNo">1613</span>      }<a name="line.1613"></a>
-<span class="sourceLineNo">1614</span>    }<a name="line.1614"></a>
-<span class="sourceLineNo">1615</span><a name="line.1615"></a>
-<span class="sourceLineNo">1616</span>    if (timeoutForWriteLock == null<a name="line.1616"></a>
-<span class="sourceLineNo">1617</span>        || timeoutForWriteLock == Long.MAX_VALUE) {<a name="line.1617"></a>
-<span class="sourceLineNo">1618</span>      // block waiting for the lock for closing<a name="line.1618"></a>
-<span class="sourceLineNo">1619</span>      lock.writeLock().lock(); // FindBugs: Complains UL_UNRELEASED_LOCK_EXCEPTION_PATH but seems fine<a name="line.1619"></a>
-<span class="sourceLineNo">1620</span>    } else {<a name="line.1620"></a>
-<span class="sourceLineNo">1621</span>      try {<a name="line.1621"></a>
-<span class="sourceLineNo">1622</span>        boolean succeed = lock.writeLock().tryLock(timeoutForWriteLock, TimeUnit.SECONDS);<a name="line.1622"></a>
-<span class="sourceLineNo">1623</span>        if (!succeed) {<a name="line.1623"></a>
-<span class="sourceLineNo">1624</span>          throw new IOException("Failed to get write lock when closing region");<a name="line.1624"></a>
-<span class="sourceLineNo">1625</span>        }<a name="line.1625"></a>
-<span class="sourceLineNo">1626</span>      } catch (InterruptedException e) {<a name="line.1626"></a>
-<span class="sourceLineNo">1627</span>        throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.1627"></a>
-<span class="sourceLineNo">1628</span>      }<a name="line.1628"></a>
-<span class="sourceLineNo">1629</span>    }<a name="line.1629"></a>
-<span class="sourceLineNo">1630</span>    this.closing.set(true);<a name="line.1630"></a>
-<span class="sourceLineNo">1631</span>    status.setStatus("Disabling writes for close");<a name="line.1631"></a>
-<span class="sourceLineNo">1632</span>    try {<a name="line.1632"></a>
-<span class="sourceLineNo">1633</span>      if (this.isClosed()) {<a name="line.1633"></a>
-<span class="sourceLineNo">1634</span>        status.abort("Already got closed by another process");<a name="line.1634"></a>
-<span class="sourceLineNo">1635</span>        // SplitTransaction handles the null<a name="line.1635"></a>
-<span class="sourceLineNo">1636</span>        return null;<a name="line.1636"></a>
-<span class="sourceLineNo">1637</span>      }<a name="line.1637"></a>
-<span class="sourceLineNo">1638</span>      LOG.debug("Updates disabled for region " + this);<a name="line.1638"></a>
-<span class="sourceLineNo">1639</span>      // Don't flush the cache if we are aborting<a name="line.1639"></a>
-<span class="sourceLineNo">1640</span>      if (!abort &amp;&amp; canFlush) {<a name="line.1640"></a>
-<span class="sourceLineNo">1641</span>        int failedfFlushCount = 0;<a name="line.1641"></a>
-<span class="sourceLineNo">1642</span>        int flushCount = 0;<a name="line.1642"></a>
-<span class="sourceLineNo">1643</span>        long tmp = 0;<a name="line.1643"></a>
-<span class="sourceLineNo">1644</span>        long remainingSize = this.memStoreSizing.getDataSize();<a name="line.1644"></a>
-<span class="sourceLineNo">1645</span>        while (remainingSize &gt; 0) {<a name="line.1645"></a>
-<span class="sourceLineNo">1646</span>          try {<a name="line.1646"></a>
-<span class="sourceLineNo">1647</span>            internalFlushcache(status);<a name="line.1647"></a>
-<span class="sourceLineNo">1648</span>            if(flushCount &gt;0) {<a name="line.1648"></a>
-<span class="sourceLineNo">1649</span>              LOG.info("Running extra flush, " + flushCount +<a name="line.1649"></a>
-<span class="sourceLineNo">1650</span>                  " (carrying snapshot?) " + this);<a name="line.1650"></a>
-<span class="sourceLineNo">1651</span>            }<a name="line.1651"></a>
-<span class="sourceLineNo">1652</span>            flushCount++;<a name="line.1652"></a>
-<span class="sourceLineNo">1653</span>            tmp = this.memStoreSizing.getDataSize();<a name="line.1653"></a>
-<span class="sourceLineNo">1654</span>            if (tmp &gt;= remainingSize) {<a name="line.1654"></a>
-<span class="sourceLineNo">1655</span>              failedfFlushCount++;<a name="line.1655"></a>
-<span class="sourceLineNo">1656</span>            }<a name="line.1656"></a>
-<span class="sourceLineNo">1657</span>            remainingSize = tmp;<a name="line.1657"></a>
-<span class="sourceLineNo">1658</span>            if (failedfFlushCount &gt; 5) {<a name="line.1658"></a>
-<span class="sourceLineNo">1659</span>              // If we failed 5 times and are unable to clear memory, abort<a name="line.1659"></a>
-<span class="sourceLineNo">1660</span>              // so we do not lose data<a name="line.1660"></a>
-<span class="sourceLineNo">1661</span>              throw new DroppedSnapshotException("Failed clearing memory after " +<a name="line.1661"></a>
-<span class="sourceLineNo">1662</span>                  flushCount + " attempts on region: " +<a name="line.1662"></a>
-<span class="sourceLineNo">1663</span>                  Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.1663"></a>
-<span class="sourceLineNo">1664</span>            }<a name="line.1664"></a>
-<span class="sourceLineNo">1665</span>          } catch (IOException ioe) {<a name="line.1665"></a>
-<span class="sourceLineNo">1666</span>            status.setStatus("Failed flush " + this + ", putting online again");<a name="line.1666"></a>
-<span class="sourceLineNo">1667</span>            synchronized (writestate) {<a name="line.1667"></a>
-<span class="sourceLineNo">1668</span>              writestate.writesEnabled = true;<a name="line.1668"></a>
-<span class="sourceLineNo">1669</span>            }<a name="line.1669"></a>
-<span class="sourceLineNo">1670</span>            // Have to throw to upper layers.  I can't abort server from here.<a name="line.1670"></a>
-<span class="sourceLineNo">1671</span>            throw ioe;<a name="line.1671"></a>
-<span class="sourceLineNo">1672</span>          }<a name="line.1672"></a>
-<span class="sourceLineNo">1673</span>        }<a name="line.1673"></a>
-<span class="sourceLineNo">1674</span>      }<a name="line.1674"></a>
-<span class="sourceLineNo">1675</span><a name="line.1675"></a>
-<span class="sourceLineNo">1676</span>      Map&lt;byte[], List&lt;HStoreFile&gt;&gt; result = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1676"></a>
-<span class="sourceLineNo">1677</span>      if (!stores.isEmpty()) {<a name="line.1677"></a>
-<span class="sourceLineNo">1678</span>        // initialize the thread pool for closing stores in parallel.<a name="line.1678"></a>
-<span class="sourceLineNo">1679</span>        ThreadPoolExecutor storeCloserThreadPool =<a name="line.1679"></a>
-<span class="sourceLineNo">1680</span>          getStoreOpenAndCloseThreadPool("StoreCloserThread-" +<a name="line.1680"></a>
-<span class="sourceLineNo">1681</span>            getRegionInfo().getRegionNameAsString());<a name="line.1681"></a>
-<span class="sourceLineNo">1682</span>        CompletionService&lt;Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt;&gt; completionService =<a name="line.1682"></a>
-<span class="sourceLineNo">1683</span>          new ExecutorCompletionService&lt;&gt;(storeCloserThreadPool);<a name="line.1683"></a>
-<span class="sourceLineNo">1684</span><a name="line.1684"></a>
-<span class="sourceLineNo">1685</span>        // close each store in parallel<a name="line.1685"></a>
-<span class="sourceLineNo">1686</span>        for (HStore store : stores.values()) {<a name="line.1686"></a>
-<span class="sourceLineNo">1687</span>          MemStoreSize mss = store.getFlushableSize();<a name="line.1687"></a>
-<span class="sourceLineNo">1688</span>          if (!(abort || mss.getDataSize() == 0 || writestate.readOnly)) {<a name="line.1688"></a>
-<span class="sourceLineNo">1689</span>            if (getRegionServerServices() != null) {<a name="line.1689"></a>
-<span class="sourceLineNo">1690</span>              getRegionServerServices().abort("Assertion failed while closing store "<a name="line.1690"></a>
-<span class="sourceLineNo">1691</span>                + getRegionInfo().getRegionNameAsString() + " " + store<a name="line.1691"></a>
-<span class="sourceLineNo">1692</span>                + ". flushableSize expected=0, actual={" + mss<a name="line.1692"></a>
-<span class="sourceLineNo">1693</span>                + "}. Current memStoreSize=" + this.memStoreSizing.getMemStoreSize() +<a name="line.1693"></a>
-<span class="sourceLineNo">1694</span>                  ". Maybe a coprocessor "<a name="line.1694"></a>
-<span class="sourceLineNo">1695</span>                + "operation failed and left the memstore in a partially updated state.", null);<a name="line.1695"></a>
-<span class="sourceLineNo">1696</span>            }<a name="line.1696"></a>
-<span class="sourceLineNo">1697</span>          }<a name="line.1697"></a>
-<span class="sourceLineNo">1698</span>          completionService<a name="line.1698"></a>
-<span class="sourceLineNo">1699</span>              .submit(new Callable&lt;Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt;&gt;() {<a name="line.1699"></a>
-<span class="sourceLineNo">1700</span>                @Override<a name="line.1700"></a>
-<span class="sourceLineNo">1701</span>                public Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt; call() throws IOException {<a name="line.1701"></a>
-<span class="sourceLineNo">1702</span>                  return new Pair&lt;&gt;(store.getColumnFamilyDescriptor().getName(), store.close());<a name="line.1702"></a>
-<span class="sourceLineNo">1703</span>                }<a name="line.1703"></a>
-<span class="sourceLineNo">1704</span>              });<a name="line.1704"></a>
-<span class="sourceLineNo">1705</span>        }<a name="line.1705"></a>
-<span class="sourceLineNo">1706</span>        try {<a name="line.1706"></a>
-<span class="sourceLineNo">1707</span>          for (int i = 0; i &lt; stores.size(); i++) {<a name="line.1707"></a>
-<span class="sourceLineNo">1708</span>            Future&lt;Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt;&gt; future = completionService.take();<a name="line.1708"></a>
-<span class="sourceLineNo">1709</span>            Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt; storeFiles = future.get();<a name="line.1709"></a>
-<span class="sourceLineNo">1710</span>            List&lt;HStoreFile&gt; familyFiles = result.get(storeFiles.getFirst());<a name="line.1710"></a>
-<span class="sourceLineNo">1711</span>            if (familyFiles == null) {<a name="line.1711"></a>
-<span class="sourceLineNo">1712</span>              familyFiles = new ArrayList&lt;&gt;();<a name="line.1712"></a>
-<span class="sourceLineNo">1713</span>              result.put(storeFiles.getFirst(), familyFiles);<a name="line.1713"></a>
-<span class="sourceLineNo">1714</span>            }<a name="line.1714"></a>
-<span class="sourceLineNo">1715</span>            familyFiles.addAll(storeFiles.getSecond());<a name="line.1715"></a>
-<span class="sourceLineNo">1716</span>          }<a name="line.1716"></a>
-<span class="sourceLineNo">1717</span>        } catch (InterruptedException e) {<a name="line.1717"></a>
-<span class="sourceLineNo">1718</span>          throw (InterruptedIOException)new InterruptedIOException().initCause(e);<a name="line.1718"></a>
-<span class="sourceLineNo">1719</span>        } catch (ExecutionException e) {<a name="line.1719"></a>
-<span class="sourceLineNo">1720</span>          Throwable cause = e.getCause();<a name="line.1720"></a>
-<span class="sourceLineNo">1721</span>          if (cause instanceof IOException) {<a name="line.1721"></a>
-<span class="sourceLineNo">1722</span>            throw (IOException) cause;<a name="line.1722"></a>
-<span class="sourceLineNo">1723</span>          }<a name="line.1723"></a>
-<span class="sourceLineNo">1724</span>          throw new IOException(cause);<a name="line.1724"></a>
-<span class="sourceLineNo">1725</span>        } finally {<a name="line.1725"></a>
-<span class="sourceLineNo">1726</span>          storeCloserThreadPool.shutdownNow();<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>      status.setStatus("Writing region close event to WAL");<a name="line.1730"></a>
-<span class="sourceLineNo">1731</span>      // Always write close marker to wal even for read only table. This is not a big problem as we<a name="line.1731"></a>
-<span class="sourceLineNo">1732</span>      // do not write any data into the region.<a name="line.1732"></a>
-<span class="sourceLineNo">1733</span>      if (!abort &amp;&amp; wal != null &amp;&amp; getRegionServerServices() != null &amp;&amp;<a name="line.1733"></a>
-<span class="sourceLineNo">1734</span>        RegionReplicaUtil.isDefaultReplica(getRegionInfo())) {<a name="line.1734"></a>
-<span class="sourceLineNo">1735</span>        writeRegionCloseMarker(wal);<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>      this.closed.set(true);<a name="line.1738"></a>
-<span class="sourceLineNo">1739</span>      if (!canFlush) {<a name="line.1739"></a>
-<span class="sourceLineNo">1740</span>        decrMemStoreSize(this.memStoreSizing.getMemStoreSize());<a name="line.1740"></a>
-<span class="sourceLineNo">1741</span>      } else if (this.memStoreSizing.getDataSize() != 0) {<a name="line.1741"></a>
-<span class="sourceLineNo">1742</span>        LOG.error("Memstore data size is {}", this.memStoreSizing.getDataSize());<a name="line.1742"></a>
-<span class="sourceLineNo">1743</span>      }<a name="line.1743"></a>
-<span class="sourceLineNo">1744</span>      if (coprocessorHost != null) {<a name="line.1744"></a>
-<span class="sourceLineNo">1745</span>        status.setStatus("Running coprocessor post-close hooks");<a name="line.1745"></a>
-<span class="sourceLineNo">1746</span>        this.coprocessorHost.postClose(abort);<a name="line.1746"></a>
-<span class="sourceLineNo">1747</span>      }<a name="line.1747"></a>
-<span class="sourceLineNo">1748</span>      if (this.metricsRegion != null) {<a name="line.1748"></a>
-<span class="sourceLineNo">1749</span>        this.metricsRegion.close();<a name="line.1749"></a>
+<span class="sourceLineNo">1555</span>      if (LOG.isDebugEnabled()) {<a name="line.1555"></a>
+<span class="sourceLineNo">1556</span>        LOG.debug("Region close journal:\n" + status.prettyPrintJournal());<a name="line.1556"></a>
+<span class="sourceLineNo">1557</span>      }<a name="line.1557"></a>
+<span class="sourceLineNo">1558</span>      status.cleanup();<a name="line.1558"></a>
+<span class="sourceLineNo">1559</span>    }<a name="line.1559"></a>
+<span class="sourceLineNo">1560</span>  }<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>   * Exposed for some very specific unit tests.<a name="line.1563"></a>
+<span class="sourceLineNo">1564</span>   */<a name="line.1564"></a>
+<span class="sourceLineNo">1565</span>  @VisibleForTesting<a name="line.1565"></a>
+<span class="sourceLineNo">1566</span>  public void setClosing(boolean closing) {<a name="line.1566"></a>
+<span class="sourceLineNo">1567</span>    this.closing.set(closing);<a name="line.1567"></a>
+<span class="sourceLineNo">1568</span>  }<a name="line.1568"></a>
+<span class="sourceLineNo">1569</span><a name="line.1569"></a>
+<span class="sourceLineNo">1570</span>  /**<a name="line.1570"></a>
+<span class="sourceLineNo">1571</span>   * The {@link HRegion#doClose} will block forever if someone tries proving the dead lock via the unit test.<a name="line.1571"></a>
+<span class="sourceLineNo">1572</span>   * Instead of blocking, the {@link HRegion#doClose} will throw exception if you set the timeout.<a name="line.1572"></a>
+<span class="sourceLineNo">1573</span>   * @param timeoutForWriteLock the second time to wait for the write lock in {@link HRegion#doClose}<a name="line.1573"></a>
+<span class="sourceLineNo">1574</span>   */<a name="line.1574"></a>
+<span class="sourceLineNo">1575</span>  @VisibleForTesting<a name="line.1575"></a>
+<span class="sourceLineNo">1576</span>  public void setTimeoutForWriteLock(long timeoutForWriteLock) {<a name="line.1576"></a>
+<span class="sourceLineNo">1577</span>    assert timeoutForWriteLock &gt;= 0;<a name="line.1577"></a>
+<span class="sourceLineNo">1578</span>    this.timeoutForWriteLock = timeoutForWriteLock;<a name="line.1578"></a>
+<span class="sourceLineNo">1579</span>  }<a name="line.1579"></a>
+<span class="sourceLineNo">1580</span><a name="line.1580"></a>
+<span class="sourceLineNo">1581</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="UL_UNRELEASED_LOCK_EXCEPTION_PATH",<a name="line.1581"></a>
+<span class="sourceLineNo">1582</span>      justification="I think FindBugs is confused")<a name="line.1582"></a>
+<span class="sourceLineNo">1583</span>  private Map&lt;byte[], List&lt;HStoreFile&gt;&gt; doClose(boolean abort, MonitoredTask status)<a name="line.1583"></a>
+<span class="sourceLineNo">1584</span>      throws IOException {<a name="line.1584"></a>
+<span class="sourceLineNo">1585</span>    if (isClosed()) {<a name="line.1585"></a>
+<span class="sourceLineNo">1586</span>      LOG.warn("Region " + this + " already closed");<a name="line.1586"></a>
+<span class="sourceLineNo">1587</span>      return null;<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>    if (coprocessorHost != null) {<a name="line.1590"></a>
+<span class="sourceLineNo">1591</span>      status.setStatus("Running coprocessor pre-close hooks");<a name="line.1591"></a>
+<span class="sourceLineNo">1592</span>      this.coprocessorHost.preClose(abort);<a name="line.1592"></a>
+<span class="sourceLineNo">1593</span>    }<a name="line.1593"></a>
+<span class="sourceLineNo">1594</span>    status.setStatus("Disabling compacts and flushes for region");<a name="line.1594"></a>
+<span class="sourceLineNo">1595</span>    boolean canFlush = true;<a name="line.1595"></a>
+<span class="sourceLineNo">1596</span>    synchronized (writestate) {<a name="line.1596"></a>
+<span class="sourceLineNo">1597</span>      // Disable compacting and flushing by background threads for this<a name="line.1597"></a>
+<span class="sourceLineNo">1598</span>      // region.<a name="line.1598"></a>
+<span class="sourceLineNo">1599</span>      canFlush = !writestate.readOnly;<a name="line.1599"></a>
+<span class="sourceLineNo">1600</span>      writestate.writesEnabled = false;<a name="line.1600"></a>
+<span class="sourceLineNo">1601</span>      LOG.debug("Closing {}, disabling compactions &amp; flushes",<a name="line.1601"></a>
+<span class="sourceLineNo">1602</span>          this.getRegionInfo().getEncodedName());<a name="line.1602"></a>
+<span class="sourceLineNo">1603</span>      waitForFlushesAndCompactions();<a name="line.1603"></a>
+<span class="sourceLineNo">1604</span>    }<a name="line.1604"></a>
+<span class="sourceLineNo">1605</span>    // If we were not just flushing, is it worth doing a preflush...one<a name="line.1605"></a>
+<span class="sourceLineNo">1606</span>    // that will clear out of the bulk of the memstore before we put up<a name="line.1606"></a>
+<span class="sourceLineNo">1607</span>    // the close flag?<a name="line.1607"></a>
+<span class="sourceLineNo">1608</span>    if (!abort &amp;&amp; worthPreFlushing() &amp;&amp; canFlush) {<a name="line.1608"></a>
+<span class="sourceLineNo">1609</span>      status.setStatus("Pre-flushing region before close");<a name="line.1609"></a>
+<span class="sourceLineNo">1610</span>      LOG.info("Running close preflush of {}", this.getRegionInfo().getEncodedName());<a name="line.1610"></a>
+<span class="sourceLineNo">1611</span>      try {<a name="line.1611"></a>
+<span class="sourceLineNo">1612</span>        internalFlushcache(status);<a name="line.1612"></a>
+<span class="sourceLineNo">1613</span>      } catch (IOException ioe) {<a name="line.1613"></a>
+<span class="sourceLineNo">1614</span>        // Failed to flush the region. Keep going.<a name="line.1614"></a>
+<span class="sourceLineNo">1615</span>        status.setStatus("Failed pre-flush " + this + "; " + ioe.getMessage());<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>    if (timeoutForWriteLock == null<a name="line.1619"></a>
+<span class="sourceLineNo">1620</span>        || timeoutForWriteLock == Long.MAX_VALUE) {<a name="line.1620"></a>
+<span class="sourceLineNo">1621</span>      // block waiting for the lock for closing<a name="line.1621"></a>
+<span class="sourceLineNo">1622</span>      lock.writeLock().lock(); // FindBugs: Complains UL_UNRELEASED_LOCK_EXCEPTION_PATH but seems fine<a name="line.1622"></a>
+<span class="sourceLineNo">1623</span>    } else {<a name="line.1623"></a>
+<span class="sourceLineNo">1624</span>      try {<a name="line.1624"></a>
+<span class="sourceLineNo">1625</span>        boolean succeed = lock.writeLock().tryLock(timeoutForWriteLock, TimeUnit.SECONDS);<a name="line.1625"></a>
+<span class="sourceLineNo">1626</span>        if (!succeed) {<a name="line.1626"></a>
+<span class="sourceLineNo">1627</span>          throw new IOException("Failed to get write lock when closing region");<a name="line.1627"></a>
+<span class="sourceLineNo">1628</span>        }<a name="line.1628"></a>
+<span class="sourceLineNo">1629</span>      } catch (InterruptedException e) {<a name="line.1629"></a>
+<span class="sourceLineNo">1630</span>        throw (InterruptedIOException) new InterruptedIOException().initCause(e);<a name="line.1630"></a>
+<span class="sourceLineNo">1631</span>      }<a name="line.1631"></a>
+<span class="sourceLineNo">1632</span>    }<a name="line.1632"></a>
+<span class="sourceLineNo">1633</span>    this.closing.set(true);<a name="line.1633"></a>
+<span class="sourceLineNo">1634</span>    status.setStatus("Disabling writes for close");<a name="line.1634"></a>
+<span class="sourceLineNo">1635</span>    try {<a name="line.1635"></a>
+<span class="sourceLineNo">1636</span>      if (this.isClosed()) {<a name="line.1636"></a>
+<span class="sourceLineNo">1637</span>        status.abort("Already got closed by another process");<a name="line.1637"></a>
+<span class="sourceLineNo">1638</span>        // SplitTransaction handles the null<a name="line.1638"></a>
+<span class="sourceLineNo">1639</span>        return null;<a name="line.1639"></a>
+<span class="sourceLineNo">1640</span>      }<a name="line.1640"></a>
+<span class="sourceLineNo">1641</span>      LOG.debug("Updates disabled for region " + this);<a name="line.1641"></a>
+<span class="sourceLineNo">1642</span>      // Don't flush the cache if we are aborting<a name="line.1642"></a>
+<span class="sourceLineNo">1643</span>      if (!abort &amp;&amp; canFlush) {<a name="line.1643"></a>
+<span class="sourceLineNo">1644</span>        int failedfFlushCount = 0;<a name="line.1644"></a>
+<span class="sourceLineNo">1645</span>        int flushCount = 0;<a name="line.1645"></a>
+<span class="sourceLineNo">1646</span>        long tmp = 0;<a name="line.1646"></a>
+<span class="sourceLineNo">1647</span>        long remainingSize = this.memStoreSizing.getDataSize();<a name="line.1647"></a>
+<span class="sourceLineNo">1648</span>        while (remainingSize &gt; 0) {<a name="line.1648"></a>
+<span class="sourceLineNo">1649</span>          try {<a name="line.1649"></a>
+<span class="sourceLineNo">1650</span>            internalFlushcache(status);<a name="line.1650"></a>
+<span class="sourceLineNo">1651</span>            if(flushCount &gt;0) {<a name="line.1651"></a>
+<span class="sourceLineNo">1652</span>              LOG.info("Running extra flush, " + flushCount +<a name="line.1652"></a>
+<span class="sourceLineNo">1653</span>                  " (carrying snapshot?) " + this);<a name="line.1653"></a>
+<span class="sourceLineNo">1654</span>            }<a name="line.1654"></a>
+<span class="sourceLineNo">1655</span>            flushCount++;<a name="line.1655"></a>
+<span class="sourceLineNo">1656</span>            tmp = this.memStoreSizing.getDataSize();<a name="line.1656"></a>
+<span class="sourceLineNo">1657</span>            if (tmp &gt;= remainingSize) {<a name="line.1657"></a>
+<span class="sourceLineNo">1658</span>              failedfFlushCount++;<a name="line.1658"></a>
+<span class="sourceLineNo">1659</span>            }<a name="line.1659"></a>
+<span class="sourceLineNo">1660</span>            remainingSize = tmp;<a name="line.1660"></a>
+<span class="sourceLineNo">1661</span>            if (failedfFlushCount &gt; 5) {<a name="line.1661"></a>
+<span class="sourceLineNo">1662</span>              // If we failed 5 times and are unable to clear memory, abort<a name="line.1662"></a>
+<span class="sourceLineNo">1663</span>              // so we do not lose data<a name="line.1663"></a>
+<span class="sourceLineNo">1664</span>              throw new DroppedSnapshotException("Failed clearing memory after " +<a name="line.1664"></a>
+<span class="sourceLineNo">1665</span>                  flushCount + " attempts on region: " +<a name="line.1665"></a>
+<span class="sourceLineNo">1666</span>                  Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.1666"></a>
+<span class="sourceLineNo">1667</span>            }<a name="line.1667"></a>
+<span class="sourceLineNo">1668</span>          } catch (IOException ioe) {<a name="line.1668"></a>
+<span class="sourceLineNo">1669</span>            status.setStatus("Failed flush " + this + ", putting online again");<a name="line.1669"></a>
+<span class="sourceLineNo">1670</span>            synchronized (writestate) {<a name="line.1670"></a>
+<span class="sourceLineNo">1671</span>              writestate.writesEnabled = true;<a name="line.1671"></a>
+<span class="sourceLineNo">1672</span>            }<a name="line.1672"></a>
+<span class="sourceLineNo">1673</span>            // Have to throw to upper layers.  I can't abort server from here.<a name="line.1673"></a>
+<span class="sourceLineNo">1674</span>            throw ioe;<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><a name="line.1678"></a>
+<span class="sourceLineNo">1679</span>      Map&lt;byte[], List&lt;HStoreFile&gt;&gt; result = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.1679"></a>
+<span class="sourceLineNo">1680</span>      if (!stores.isEmpty()) {<a name="line.1680"></a>
+<span class="sourceLineNo">1681</span>        // initialize the thread pool for closing stores in parallel.<a name="line.1681"></a>
+<span class="sourceLineNo">1682</span>        ThreadPoolExecutor storeCloserThreadPool =<a name="line.1682"></a>
+<span class="sourceLineNo">1683</span>          getStoreOpenAndCloseThreadPool("StoreCloserThread-" +<a name="line.1683"></a>
+<span class="sourceLineNo">1684</span>            getRegionInfo().getRegionNameAsString());<a name="line.1684"></a>
+<span class="sourceLineNo">1685</span>        CompletionService&lt;Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt;&gt; completionService =<a name="line.1685"></a>
+<span class="sourceLineNo">1686</span>          new ExecutorCompletionService&lt;&gt;(storeCloserThreadPool);<a name="line.1686"></a>
+<span class="sourceLineNo">1687</span><a name="line.1687"></a>
+<span class="sourceLineNo">1688</span>        // close each store in parallel<a name="line.1688"></a>
+<span class="sourceLineNo">1689</span>        for (HStore store : stores.values()) {<a name="line.1689"></a>
+<span class="sourceLineNo">1690</span>          MemStoreSize mss = store.getFlushableSize();<a name="line.1690"></a>
+<span class="sourceLineNo">1691</span>          if (!(abort || mss.getDataSize() == 0 || writestate.readOnly)) {<a name="line.1691"></a>
+<span class="sourceLineNo">1692</span>            if (getRegionServerServices() != null) {<a name="line.1692"></a>
+<span class="sourceLineNo">1693</span>              getRegionServerServices().abort("Assertion failed while closing store "<a name="line.1693"></a>
+<span class="sourceLineNo">1694</span>                + getRegionInfo().getRegionNameAsString() + " " + store<a name="line.1694"></a>
+<span class="sourceLineNo">1695</span>                + ". flushableSize expected=0, actual={" + mss<a name="line.1695"></a>
+<span class="sourceLineNo">1696</span>                + "}. Current memStoreSize=" + this.memStoreSizing.getMemStoreSize() +<a name="line.1696"></a>
+<span class="sourceLineNo">1697</span>                  ". Maybe a coprocessor "<a name="line.1697"></a>
+<span class="sourceLineNo">1698</span>                + "operation failed and left the memstore in a partially updated state.", null);<a name="line.1698"></a>
+<span class="sourceLineNo">1699</span>            }<a name="line.1699"></a>
+<span class="sourceLineNo">1700</span>          }<a name="line.1700"></a>
+<span class="sourceLineNo">1701</span>          completionService<a name="line.1701"></a>
+<span class="sourceLineNo">1702</span>              .submit(new Callable&lt;Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt;&gt;() {<a name="line.1702"></a>
+<span class="sourceLineNo">1703</span>                @Override<a name="line.1703"></a>
+<span class="sourceLineNo">1704</span>                public Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt; call() throws IOException {<a name="line.1704"></a>
+<span class="sourceLineNo">1705</span>                  return new Pair&lt;&gt;(store.getColumnFamilyDescriptor().getName(), store.close());<a name="line.1705"></a>
+<span class="sourceLineNo">1706</span>                }<a name="line.1706"></a>
+<span class="sourceLineNo">1707</span>              });<a name="line.1707"></a>
+<span class="sourceLineNo">1708</span>        }<a name="line.1708"></a>
+<span class="sourceLineNo">1709</span>        try {<a name="line.1709"></a>
+<span class="sourceLineNo">1710</span>          for (int i = 0; i &lt; stores.size(); i++) {<a name="line.1710"></a>
+<span class="sourceLineNo">1711</span>            Future&lt;Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt;&gt; future = completionService.take();<a name="line.1711"></a>
+<span class="sourceLineNo">1712</span>            Pair&lt;byte[], Collection&lt;HStoreFile&gt;&gt; storeFiles = future.get();<a name="line.1712"></a>
+<span class="sourceLineNo">1713</span>            List&lt;HStoreFile&gt; familyFiles = result.get(storeFiles.getFirst());<a name="line.1713"></a>
+<span class="sourceLineNo">1714</span>            if (familyFiles == null) {<a name="line.1714"></a>
+<span class="sourceLineNo">1715</span>              familyFiles = new ArrayList&lt;&gt;();<a name="line.1715"></a>
+<span class="sourceLineNo">1716</span>              result.put(storeFiles.getFirst(), familyFiles);<a name="line.1716"></a>
+<span class="sourceLineNo">1717</span>            }<a name="line.1717"></a>
+<span class="sourceLineNo">1718</span>            familyFiles.addAll(storeFiles.getSecond());<a name="line.1718"></a>
+<span class="sourceLineNo">1719</span>          }<a name="line.1719"></a>
+<span class="sourceLineNo">1720</span>        } catch (InterruptedException e) {<a name="line.1720"></a>
+<span class="sourceLineNo">1721</span>          throw (InterruptedIOException)new InterruptedIOException().initCause(e);<a name="line.1721"></a>
+<span class="sourceLineNo">1722</span>        } catch (ExecutionException e) {<a name="line.1722"></a>
+<span class="sourceLineNo">1723</span>          Throwable cause = e.getCause();<a name="line.1723"></a>
+<span class="sourceLineNo">1724</span>          if (cause instanceof IOException) {<a name="line.1724"></a>
+<span class="sourceLineNo">1725</span>            throw (IOException) cause;<a name="line.1725"></a>
+<span class="sourceLineNo">1726</span>          }<a name="line.1726"></a>
+<span class="sourceLineNo">1727</span>          throw new IOException(cause);<a name="line.1727"></a>
+<span class="sourceLineNo">1728</span>        } finally {<a name="line.1728"></a>
+<span class="sourceLineNo">1729</span>          storeCloserThreadPool.shutdownNow();<a name="line.1729"></a>
+<span class="sourceLineNo">1730</span>        }<a name="line.1730"></a>
+<span class="sourceLineNo">1731</span>      }<a name="line.1731"></a>
+<span class="sourceLineNo">1732</span><a name="line.1732"></a>
+<span class="sourceLineNo">1733</span>      status.setStatus("Writing region close event to WAL");<a name="line.1733"></a>
+<span class="sourceLineNo">1734</span>      // Always write close marker to wal even for read only table. This is not a big problem as we<a name="line.1734"></a>
+<span class="sourceLineNo">1735</span>      // do not write any data into the region.<a name="line.1735"></a>
+<span class="sourceLineNo">1736</span>      if (!abort &amp;&amp; wal != null &amp;&amp; getRegionServerServices() != null &amp;&amp;<a name="line.1736"></a>
+<span class="sourceLineNo">1737</span>        RegionReplicaUtil.isDefaultReplica(getRegionInfo())) {<a name="line.1737"></a>
+<span class="sourceLineNo">1738</span>        writeRegionCloseMarker(wal);<a name="line.1738"></a>
+<span class="sourceLineNo">1739</span>      }<a name="line.1739"></a>
+<span class="sourceLineNo">1740</span><a name="line.1740"></a>
+<span class="sourceLineNo">1741</span>      this.closed.set(true);<a name="line.1741"></a>
+<span class="sourceLineNo">1742</span>      if (!canFlush) {<a name="line.1742"></a>
+<span class="sourceLineNo">1743</span>        decrMemStoreSize(this.memStoreSizing.getMemStoreSize());<a name="line.1743"></a>
+<span class="sourceLineNo">1744</span>      } else if (this.memStoreSizing.getDataSize() != 0) {<a name="line.1744"></a>
+<span class="sourceLineNo">1745</span>        LOG.error("Memstore data size is {}", this.memStoreSizing.getDataSize());<a name="line.1745"></a>
+<span class="sourceLineNo">1746</span>      }<a name="line.1746"></a>
+<span class="sourceLineNo">1747</span>      if (coprocessorHost != null) {<a name="line.1747"></a>
+<span class="sourceLineNo">1748</span>        status.setStatus("Running coprocessor post-close hooks");<a name="line.1748"></a>
+<span class="sourceLineNo">1749</span>        this.coprocessorHost.postClose(abort);<a name="line.1749"></a>
 <span class="sourceLineNo">1750</span>      }<a name="line.1750"></a>
-<span class="sourceLineNo">1751</span>      if (this.metricsRegionWrapper != null) {<a name="line.1751"></a>
-<span class="sourceLineNo">1752</span>        Closeables.close(this.metricsRegionWrapper, true);<a name="line.1752"></a>
+<span class="sourceLineNo">1751</span>      if (this.metricsRegion != null) {<a name="line.1751"></a>
+<span class="sourceLineNo">1752</span>        this.metricsRegion.close();<a name="line.1752"></a>
 <span class="sourceLineNo">1753</span>      }<a name="line.1753"></a>
-<span class="sourceLineNo">1754</span>      status.markComplete("Closed");<a name="line.1754"></a>
-<span class="sourceLineNo">1755</span>      LOG.info("Closed " + this);<a name="line.1755"></a>
-<span class="sourceLineNo">1756</span>      return result;<a name="line.1756"></a>
-<span class="sourceLineNo">1757</span>    } finally {<a name="line.1757"></a>
-<span class="sourceLineNo">1758</span>      lock.writeLock().unlock();<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>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.1762"></a>
-<span class="sourceLineNo">1763</span>  // TODO HBASE-18906. Check the usage (if any) in Phoenix and expose this or give alternate way for<a name="line.1763"></a>
-<span class="sourceLineNo">1764</span>  // Phoenix needs.<a name="line.1764"></a>
-<span class="sourceLineNo">1765</span>  public void waitForFlushesAndCompactions() {<a name="line.1765"></a>
-<span class="sourceLineNo">1766</span>    synchronized (writestate) {<a name="line.1766"></a>
-<span class="sourceLineNo">1767</span>      if (this.writestate.readOnly) {<a name="line.1767"></a>
-<span class="sourceLineNo">1768</span>        // we should not wait for replayed flushed if we are read only (for example in case the<a name="line.1768"></a>
-<span class="sourceLineNo">1769</span>        // region is a secondary replica).<a name="line.1769"></a>
-<span class="sourceLineNo">1770</span>        return;<a name="line.1770"></a>
-<span class="sourceLineNo">1771</span>      }<a name="line.1771"></a>
-<span class="sourceLineNo">1772</span>      boolean interrupted = false;<a name="line.1772"></a>
-<span class="sourceLineNo">1773</span>      try {<a name="line.1773"></a>
-<span class="sourceLineNo">1774</span>        while (writestate.compacting.get() &gt; 0 || writestate.flushing) {<a name="line.1774"></a>
-<span class="sourceLineNo">1775</span>          LOG.debug("waiting for " + writestate.compacting + " compactions"<a name="line.1775"></a>
-<span class="sourceLineNo">1776</span>            + (writestate.flushing ? " &amp; cache flush" : "") + " to complete for region " + this);<a name="line.1776"></a>
-<span class="sourceLineNo">1777</span>          try {<a name="line.1777"></a>
-<span class="sourceLineNo">1778</span>            writestate.wait();<a name="line.1778"></a>
-<span class="sourceLineNo">1779</span>          } catch (InterruptedException iex) {<a name="line.1779"></a>
-<span class="sourceLineNo">1780</span>            // essentially ignore and propagate the interrupt back up<a name="line.1780"></a>
-<span class="sourceLineNo">1781</span>            LOG.warn("Interrupted while waiting");<a name="line.1781"></a>
-<span class="sourceLineNo">1782</span>            interrupted = true;<a name="line.1782"></a>
-<span class="sourceLineNo">1783</span>            break;<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>      } finally {<a name="line.1786"></a>
-<span class="sourceLineNo">1787</span>        if (interrupted) {<a name="line.1787"></a>
-<span class="sourceLineNo">1788</span>          Thread.currentThread().interrupt();<a name="line.1788"></a>
-<span class="sourceLineNo">1789</span>        }<a name="line.1789"></a>
-<span class="sourceLineNo">1790</span>      }<a name="line.1790"></a>
-<span class="sourceLineNo">1791</span>    }<a name="line.1791"></a>
-<span class="sourceLineNo">1792</span>  }<a name="line.1792"></a>
-<span class="sourceLineNo">1793</span><a name="line.1793"></a>
-<span class="sourceLineNo">1794</span>  /**<a name="line.1794"></a>
-<span class="sourceLineNo">1795</span>   * Wait for all current flushes of the region to complete<a name="line.1795"></a>
-<span class="sourceLineNo">1796</span>   */<a name="line.1796"></a>
-<span class="sourceLineNo">1797</span>  public void waitForFlushes() {<a name="line.1797"></a>
-<span class="sourceLineNo">1798</span>    waitForFlushes(0);// Unbound wait<a name="line.1798"></a>
-<span class="sourceLineNo">1799</span>  }<a name="line.1799"></a>
-<span class="sourceLineNo">1800</span><a name="line.1800"></a>
-<span class="sourceLineNo">1801</span>  @Override<a name="line.1801"></a>
-<span class="sourceLineNo">1802</span>  public boolean waitForFlushes(long timeout) {<a name="line.1802"></a>
-<span class="sourceLineNo">1803</span>    synchronized (writestate) {<a name="line.1803"></a>
-<span class="sourceLineNo">1804</span>      if (this.writestate.readOnly) {<a name="line.1804"></a>
-<span class="sourceLineNo">1805</span>        // we should not wait for replayed flushed if we are read only (for example in case the<a name="line.1805"></a>
-<span class="sourceLineNo">1806</span>        // region is a secondary replica).<a name="line.1806"></a>
-<span class="sourceLineNo">1807</span>        return true;<a name="line.1807"></a>
-<span class="sourceLineNo">1808</span>      }<a name="line.1808"></a>
-<span class="sourceLineNo">1809</span>      if (!writestate.flushing) return true;<a name="line.1809"></a>
-<span class="sourceLineNo">1810</span>      long start = System.currentTimeMillis();<a name="line.1810"></a>
-<span class="sourceLineNo">1811</span>      long duration = 0;<a name="line.1811"></a>
-<span class="sourceLineNo">1812</span>      boolean interrupted = false;<a name="line.1812"></a>
-<span class="sourceLineNo">1813</span>      LOG.debug("waiting for cache flush to complete for region " + this);<a name="line.1813"></a>
-<span class="sourceLineNo">1814</span>      try {<a name="line.1814"></a>
-<span class="sourceLineNo">1815</span>        while (writestate.flushing) {<a name="line.1815"></a>
-<span class="sourceLineNo">1816</span>          if (timeout &gt; 0 &amp;&amp; duration &gt;= timeout) break;<a name="line.1816"></a>
-<span class="sourceLineNo">1817</span>          try {<a name="line.1817"></a>
-<span class="sourceLineNo">1818</span>            long toWait = timeout == 0 ? 0 : (timeout - duration);<a name="line.1818"></a>
-<span class="sourceLineNo">1819</span>            writestate.wait(toWait);<a name="line.1819"></a>
-<span class="sourceLineNo">1820</span>          } catch (InterruptedException iex) {<a name="line.1820"></a>
-<span class="sourceLineNo">1821</span>            // essentially ignore and propagate the interrupt back up<a name="line.1821"></a>
-<span class="sourceLineNo">1822</span>            LOG.warn("Interrupted while waiting");<a name="line.1822"></a>
-<span class="sourceLineNo">1823</span>            interrupted = true;<a name="line.1823"></a>
-<span class="sourceLineNo">1824</span>            break;<a name="line.1824"></a>
-<span class="sourceLineNo">1825</span>          } finally {<a name="line.1825"></a>
-<span class="sourceLineNo">1826</span>            duration = System.currentTimeMillis() - start;<a name="line.1826"></a>
-<span class="sourceLineNo">1827</span>          }<a name="line.1827"></a>
-<span class="sourceLineNo">1828</span>        }<a name="line.1828"></a>
-<span class="sourceLineNo">1829</span>      } finally {<a name="line.1829"></a>
-<span class="sourceLineNo">1830</span>        if (interrupted) {<a name="line.1830"></a>
-<span class="sourceLineNo">1831</span>          Thread.currentThread().interrupt();<a name="line.1831"></a>
-<span class="sourceLineNo">1832</span>        }<a name="line.1832"></a>
-<span class="sourceLineNo">1833</span>      }<a name="line.1833"></a>
-<span class="sourceLineNo">1834</span>      LOG.debug("Waited " + duration + " ms for flush to complete");<a name="line.1834"></a>
-<span class="sourceLineNo">1835</span>      return !(writestate.flushing);<a name="line.1835"></a>
-<span class="sourceLineNo">1836</span>    }<a name="line.1836"></a>
-<span class="sourceLineNo">1837</span>  }<a name="line.1837"></a>
-<span class="sourceLineNo">1838</span><a name="line.1838"></a>
-<span class="sourceLineNo">1839</span>  protected ThreadPoolExecutor getStoreOpenAndCloseThreadPool(<a name="line.1839"></a>
-<span class="sourceLineNo">1840</span>      final String threadNamePrefix) {<a name="line.1840"></a>
-<span class="sourceLineNo">1841</span>    int numStores = Math.max(1, this.htableDescriptor.getColumnFamilyCount());<a name="line.1841"></a>
-<span class="sourceLineNo">1842</span>    int maxThreads = Math.min(numStores,<a name="line.1842"></a>
-<span class="sourceLineNo">1843</span>        conf.getInt(HConstants.HSTORE_OPEN_AND_CLOSE_THREADS_MAX,<a name="line.1843"></a>
-<span class="sourceLineNo">1844</span>            HConstants.DEFAULT_HSTORE_OPEN_AND_CLOSE_THREADS_MAX));<a name="line.1844"></a>
-<span class="sourceLineNo">1845</span>    return getOpenAndCloseThreadPool(maxThreads, threadNamePrefix);<a name="line.1845"></a>
-<span class="sourceLineNo">1846</span>  }<a name="line.1846"></a>
-<span class="sourceLineNo">1847</span><a name="line.1847"></a>
-<span class="sourceLineNo">1848</span>  protected ThreadPoolExecutor getStoreFileOpenAndCloseThreadPool(<a name="line.1848"></a>
-<span class="sourceLineNo">1849</span>      final String threadNamePrefix) {<a name="line.1849"></a>
-<span class="sourceLineNo">1850</span>    int numStores = Math.max(1, this.htableDescriptor.getColumnFamilyCount());<a name="line.1850"></a>
-<span class="sourceLineNo">1851</span>    int maxThreads = Math.max(1,<a name="line.1851"></a>
-<span class="sourceLineNo">1852</span>        conf.getInt(HConstants.HSTORE_OPEN_AND_CLOSE_THREADS_MAX,<a name="line.1852"></a>
-<span class="sourceLineNo">1853</span>            HConstants.DEFAULT_HSTORE_OPEN_AND_CLOSE_THREADS_MAX)<a name="line.1853"></a>
-<span class="sourceLineNo">1854</span>            / numStores);<a name="line.1854"></a>
-<span class="sourceLineNo">1855</span>    return getOpenAndCloseThreadPool(maxThreads, threadNamePrefix);<a name="line.1855"></a>
-<span class="sourceLineNo">1856</span>  }<a name="line.1856"></a>
-<span class="sourceLineNo">1857</span><a name="line.1857"></a>
-<span class="sourceLineNo">1858</span>  static ThreadPoolExecutor getOpenAndCloseThreadPool(int maxThreads,<a name="line.1858"></a>
-<span class="sourceLineNo">1859</span>      final String threadNamePrefix) {<a name="line.1859"></a>
-<span class="sourceLineNo">1860</span>    return Threads.getBoundedCachedThreadPool(maxThreads, 30L, TimeUnit.SECONDS,<a name="line.1860"></a>
-<span class="sourceLineNo">1861</span>      new ThreadFactory() {<a name="line.1861"></a>
-<span class="sourceLineNo">1862</span>        private int count = 1;<a name="line.1862"></a>
-<span class="sourceLineNo">1863</span><a name="line.1863"></a>
-<span class="sourceLineNo">1864</span>        @Override<a name="line.1864"></a>
-<span class="sourceLineNo">1865</span>        public Thread newThread(Runnable r) {<a name="line.1865"></a>
-<span class="sourceLineNo">1866</span>          return new Thread(r, threadNamePrefix + "-" + count++);<a name="line.1866"></a>
-<span class="sourceLineNo">1867</span>        }<a name="line.1867"></a>
-<span class="sourceLineNo">1868</span>      });<a name="line.1868"></a>
-<span class="sourceLineNo">1869</span>  }<a name="line.1869"></a>
-<span class="sourceLineNo">1870</span><a name="line.1870"></a>
-<span class="sourceLineNo">1871</span>   /**<a name="line.1871"></a>
-<span class="sourceLineNo">1872</span>    * @return True if its worth doing a flush before we put up the close flag.<a name="line.1872"></a>
-<span class="sourceLineNo">1873</span>    */<a name="line.1873"></a>
-<span class="sourceLineNo">1874</span>  private boolean worthPreFlushing() {<a name="line.1874"></a>
-<span class="sourceLineNo">1875</span>    return this.memStoreSizing.getDataSize() &gt;<a name="line.1875"></a>
-<span class="sourceLineNo">1876</span>      this.conf.getLong("hbase.hregion.preclose.flush.size", 1024 * 1024 * 5);<a name="line.1876"></a>
-<span class="sourceLineNo">1877</span>  }<a name="line.1877"></a>
-<span class="sourceLineNo">1878</span><a name="line.1878"></a>
-<span class="sourceLineNo">1879</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1879"></a>
-<span class="sourceLineNo">1880</span>  // HRegion accessors<a name="line.1880"></a>
-<span class="sourceLineNo">1881</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1881"></a>
-<span class="sourceLineNo">1882</span><a name="line.1882"></a>
-<span class="sourceLineNo">1883</span>  @Override<a name="line.1883"></a>
-<span class="sourceLineNo">1884</span>  public TableDescriptor getTableDescriptor() {<a name="line.1884"></a>
-<span class="sourceLineNo">1885</span>    return this.htableDescriptor;<a name="line.1885"></a>
-<span class="sourceLineNo">1886</span>  }<a name="line.1886"></a>
-<span class="sourceLineNo">1887</span><a name="line.1887"></a>
-<span class="sourceLineNo">1888</span>  @VisibleForTesting<a name="line.1888"></a>
-<span class="sourceLineNo">1889</span>  void setTableDescriptor(TableDescriptor desc) {<a name="line.1889"></a>
-<span class="sourceLineNo">1890</span>    htableDescriptor = desc;<a name="line.1890"></a>
-<span class="sourceLineNo">1891</span>  }<a name="line.1891"></a>
-<span class="sourceLineNo">1892</span><a name="line.1892"></a>
-<span class="sourceLineNo">1893</span>  /** @return WAL in use for this region */<a name="line.1893"></a>
-<span class="sourceLineNo">1894</span>  public WAL getWAL() {<a name="line.1894"></a>
-<span class="sourceLineNo">1895</span>    return this.wal;<a name="line.1895"></a>
-<span class="sourceLineNo">1896</span>  }<a name="line.1896"></a>
-<span class="sourceLineNo">1897</span><a name="line.1897"></a>
-<span class="sourceLineNo">1898</span>  public BlockCache getBlockCache() {<a name="line.1898"></a>
-<span class="sourceLineNo">1899</span>    return this.blockCache;<a name="line.1899"></a>
-<span class="sourceLineNo">1900</span>  }<a name="line.1900"></a>
-<span class="sourceLineNo">1901</span><a name="line.1901"></a>
-<span class="sourceLineNo">1902</span>  /**<a name="line.1902"></a>
-<span class="sourceLineNo">1903</span>   * Only used for unit test which doesn't start region server.<a name="line.1903"></a>
-<span class="sourceLineNo">1904</span>   */<a name="line.1904"></a>
-<span class="sourceLineNo">1905</span>  @VisibleForTesting<a name="line.1905"></a>
-<span class="sourceLineNo">1906</span>  public void setBlockCache(BlockCache blockCache) {<a name="line.1906"></a>
-<span class="sourceLineNo">1907</span>    this.blockCache = blockCache;<a name="line.1907"></a>
-<span class="sourceLineNo">1908</span>  }<a name="line.1908"></a>
-<span class="sourceLineNo">1909</span><a name="line.1909"></a>
-<span class="sourceLineNo">1910</span>  public MobFileCache getMobFileCache() {<a name="line.1910"></a>
-<span class="sourceLineNo">1911</span>    return this.mobFileCache;<a name="line.1911"></a>
-<span class="sourceLineNo">1912</span>  }<a name="line.1912"></a>
-<span class="sourceLineNo">1913</span><a name="line.1913"></a>
-<span class="sourceLineNo">1914</span>  /**<a name="line.1914"></a>
-<span class="sourceLineNo">1915</span>   * Only used for unit test which doesn't start region server.<a name="line.1915"></a>
-<span class="sourceLineNo">1916</span>   */<a name="line.1916"></a>
-<span class="sourceLineNo">1917</span>  @VisibleForTesting<a name="line.1917"></a>
-<span class="sourceLineNo">1918</span>  public void setMobFileCache(MobFileCache mobFileCache) {<a name="line.1918"></a>
-<span class="sourceLineNo">1919</span>    this.mobFileCache = mobFileCache;<a name="line.1919"></a>
-<span class="sourceLineNo">1920</span>  }<a name="line.1920"></a>
-<span class="sourceLineNo">1921</span><a name="line.1921"></a>
-<span class="sourceLineNo">1922</span>  /**<a name="line.1922"></a>
-<span class="sourceLineNo">1923</span>   * @return split policy for this region.<a name="line.1923"></a>
-<span class="sourceLineNo">1924</span>   */<a name="line.1924"></a>
-<span class="sourceLineNo">1925</span>  public RegionSplitPolicy getSplitPolicy() {<a name="line.1925"></a>
-<span class="sourceLineNo">1926</span>    return this.splitPolicy;<a name="line.1926"></a>
-<span class="sourceLineNo">1927</span>  }<a name="line.1927"></a>
-<span class="sourceLineNo">1928</span><a name="line.1928"></a>
-<span class="sourceLineNo">1929</span>  /**<a name="line.1929"></a>
-<span class="sourceLineNo">1930</span>   * A split takes the config from the parent region &amp; passes it to the daughter<a name="line.1930"></a>
-<span class="sourceLineNo">1931</span>   * region's constructor. If 'conf' was passed, you would end up using the HTD<a name="line.1931"></a>
-<span class="sourceLineNo">1932</span>   * of the parent region in addition to the new daughter HTD. Pass 'baseConf'<a name="line.1932"></a>
-<span class="sourceLineNo">1933</span>   * to the daughter regions to avoid this tricky dedupe problem.<a name="line.1933"></a>
-<span class="sourceLineNo">1934</span>   * @return Configuration object<a name="line.1934"></a>
-<span class="sourceLineNo">1935</span>   */<a name="line.1935"></a>
-<span class="sourceLineNo">1936</span>  Configuration getBaseConf() {<a name="line.1936"></a>
-<span class="sourceLineNo">1937</span>    return this.baseConf;<a name="line.1937"></a>
-<span class="sourceLineNo">1938</span>  }<a name="line.1938"></a>
-<span class="sourceLineNo">1939</span><a name="line.1939"></a>
-<span class="sourceLineNo">1940</span>  /** @return {@link FileSystem} being used by this region */<a name="line.1940"></a>
-<span class="sourceLineNo">1941</span>  public FileSystem getFilesystem() {<a name="line.1941"></a>
-<span class="sourceLineNo">1942</span>    return fs.getFileSystem();<a name="line.1942"></a>
-<span class="sourceLineNo">1943</span>  }<a name="line.1943"></a>
-<span class="sourceLineNo">1944</span><a name="line.1944"></a>
-<span class="sourceLineNo">1945</span>  /** @return the {@link HRegionFileSystem} used by this region */<a name="line.1945"></a>
-<span class="sourceLineNo">1946</span>  public HRegionFileSystem getRegionFileSystem() {<a name="line.1946"></a>
-<span class="sourceLineNo">1947</span>    return this.fs;<a name="line.1947"></a>
-<span class="sourceLineNo">1948</span>  }<a name="line.1948"></a>
-<span class="sourceLineNo">1949</span><a name="line.1949"></a>
-<span class="sourceLineNo">1950</span>  /** @return the WAL {@link HRegionFileSystem} used by this region */<a name="line.1950"></a>
-<span class="sourceLineNo">1951</span>  HRegionFileSystem getRegionWALFileSystem() throws IOException {<a name="line.1951"></a>
-<span class="sourceLineNo">1952</span>    return new HRegionFileSystem(conf, getWalFileSystem(),<a name="line.1952"></a>
-<span class="sourceLineNo">1953</span>        FSUtils.getWALTableDir(conf, htableDescriptor.getTableName()), fs.getRegionInfo());<a name="line.1953"></a>
-<span class="sourceLineNo">1954</span>  }<a name="line.1954"></a>
-<span class="sourceLineNo">1955</span><a name="line.1955"></a>
-<span class="sourceLineNo">1956</span>  /** @return the WAL {@link FileSystem} being used by this region */<a name="line.1956"></a>
-<span class="sourceLineNo">1957</span>  FileSystem getWalFileSystem() throws IOException {<a name="line.1957"></a>
-<span class="sourceLineNo">1958</span>    if (walFS == null) {<a name="line.1958"></a>
-<span class="sourceLineNo">1959</span>      walFS = FSUtils.getWALFileSystem(conf);<a name="line.1959"></a>
-<span class="sourceLineNo">1960</span>    }<a name="line.1960"></a>
-<span class="sourceLineNo">1961</span>    return walFS;<a name="line.1961"></a>
-<span class="sourceLineNo">1962</span>  }<a name="line.1962"></a>
-<span class="sourceLineNo">1963</span><a name="line.1963"></a>
-<span class="sourceLineNo">1964</span>  /**<a name="line.1964"></a>
-<span class="sourceLineNo">1965</span>   * @return the Region directory under WALRootDirectory<a name="line.1965"></a>
-<span class="sourceLineNo">1966</span>   * @throws IOException if there is an error getting WALRootDir<a name="line.1966"></a>
-<span class="sourceLineNo">1967</span>   */<a name="line.1967"></a>
-<span class="sourceLineNo">1968</span>  @VisibleForTesting<a name="line.1968"></a>
-<span class="sourceLineNo">1969</span>  public Path getWALRegionDir() throws IOException {<a name="line.1969"></a>
-<span class="sourceLineNo">1970</span>    if (regionDir == null) {<a name="line.1970"></a>
-<span class="sourceLineNo">1971</span>      regionDir = FSUtils.getWALRegionDir(conf, getRegionInfo().getTable(),<a name="line.1971"></a>
-<span class="sourceLineNo">1972</span>          getRegionInfo().getEncodedName());<a name="line.1972"></a>
-<span class="sourceLineNo">1973</span>    }<a name="line.1973"></a>
-<span class="sourceLineNo">1974</span>    return regionDir;<a name="line.1974"></a>
-<span class="sourceLineNo">1975</span>  }<a name="line.1975"></a>
-<span class="sourceLineNo">1976</span><a name="line.1976"></a>
-<span class="sourceLineNo">1977</span>  @Override<a name="line.1977"></a>
-<span class="sourceLineNo">1978</span>  public long getEarliestFlushTimeForAllStores() {<a name="line.1978"></a>
-<span class="sourceLineNo">1979</span>    return Collections.min(lastStoreFlushTimeMap.values());<a name="line.1979"></a>
-<span class="sourceLineNo">1980</span>  }<a name="line.1980"></a>
-<span class="sourceLineNo">1981</span><a name="line.1981"></a>
-<span class="sourceLineNo">1982</span>  @Override<a name="line.1982"></a>
-<span class="sourceLineNo">1983</span>  public long getOldestHfileTs(boolean majorCompactionOnly) throws IOException {<a name="line.1983"></a>
-<span class="sourceLineNo">1984</span>    long result = Long.MAX_VALUE;<a name="line.1984"></a>
-<span class="sourceLineNo">1985</span>    for (HStore store : stores.values()) {<a name="line.1985"></a>
-<span class="sourceLineNo">1986</span>      Collection&lt;HStoreFile&gt; storeFiles = store.getStorefiles();<a name="line.1986"></a>
-<span class="sourceLineNo">1987</span>      if (storeFiles == null) {<a name="line.1987"></a>
-<span class="sourceLineNo">1988</span>        continue;<a name="line.1988"></a>
-<span class="sourceLineNo">1989</span>      }<a name="line.1989"></a>
-<span class="sourceLineNo">1990</span>      for (HStoreFile file : storeFiles) {<a name="line.1990"></a>
-<span class="sourceLineNo">1991</span>        StoreFileReader sfReader = file.getReader();<a name="line.1991"></a>
-<span class="sourceLineNo">1992</span>        if (sfReader == null) {<a name="line.1992"></a>
-<span class="sourceLineNo">1993</span>          continue;<a name="line.1993"></a>
-<span class="sourceLineNo">1994</span>        }<a name="line.1994"></a>
-<span class="sourceLineNo">1995</span>        HFile.Reader reader = sfReader.getHFileReader();<a name="line.1995"></a>
-<span class="sourceLineNo">1996</span>        if (reader == null) {<a name="line.1996"></a>
-<span class="sourceLineNo">1997</span>          continue;<a name="line.1997"></a>
-<span class="sourceLineNo">1998</span>        }<a name="line.1998"></a>
-<span class="sourceLineNo">1999</span>        if (majorCompactionOnly) {<a name="line.1999"></a>
-<span class="sourceLineNo">2000</span>          byte[] val = reader.loadFileInfo().get(MAJOR_COMPACTION_KEY);<a name="line.2000"></a>
-<span class="sourceLineNo">2001</span>          if (val == null || !Bytes.toBoolean(val)) {<a name="line.2001"></a>
-<span class="sourceLineNo">2002</span>            continue;<a name="line.2002"></a>
-<span class="sourceLineNo">2003</span>          }<a name="line.2003"></a>
-<span class="sourceLineNo">2004</span>        }<a name="line.2004"></a>
-<span class="sourceLineNo">2005</span>        result = Math.min(result, reader.getFileContext().getFileCreateTime());<a name="line.2005"></a>
-<span class="sourceLineNo">2006</span>      }<a name="line.2006"></a>
-<span class="sourceLineNo">2007</span>    }<a name="line.2007"></a>
-<span class="sourceLineNo">2008</span>    return result == Long.MAX_VALUE ? 0 : result;<a name="line.2008"></a>
-<span class="sourceLineNo">2009</span>  }<a name="line.2009"></a>
-<span class="sourceLineNo">2010</span><a name="line.2010"></a>
-<span class="sourceLineNo">2011</span>  RegionLoad.Builder setCompleteSequenceId(RegionLoad.Builder regionLoadBldr) {<a name="line.2011"></a>
-<span class="sourceLineNo">2012</span>    long lastFlushOpSeqIdLocal = this.lastFlushOpSeqId;<a name="line.2012"></a>
-<span class="sourceLineNo">2013</span>    byte[] encodedRegionName = this.getRegionInfo().getEncodedNameAsBytes();<a name="line.2013"></a>
-<span class="sourceLineNo">2014</span>    regionLoadBldr.clearStoreCompleteSequenceId();<a name="line.2014"></a>
-<span class="sourceLineNo">2015</span>    for (byte[] familyName : this.stores.keySet()) {<a name="line.2015"></a>
-<span class="sourceLineNo">2016</span>      long earliest = this.wal.getEarliestMemStoreSeqNum(encodedRegionName, familyName);<a name="line.2016"></a>
-<span class="sourceLineNo">2017</span>      // Subtract - 1 to go earlier than the current oldest, unflushed edit in memstore; this will<a name="line.2017"></a>
-<span class="sourceLineNo">2018</span>      // give us a sequence id that is for sure flushed. We want edit replay to start after this<a name="line.2018"></a>
-<span class="sourceLineNo">2019</span>      // sequence id in this region. If NO_SEQNUM, use the regions maximum flush id.<a name="line.2019"></a>
-<span class="sourceLineNo">2020</span>      long csid = (earliest == HConstants.NO_SEQNUM)? lastFlushOpSeqIdLocal: earliest - 1;<a name="line.2020"></a>
-<span class="sourceLineNo">2021</span>      regionLoadBldr.addStoreCompleteSequenceId(StoreSequenceId.newBuilder()<a name="line.2021"></a>
-<span class="sourceLineNo">2022</span>          .setFamilyName(UnsafeByteOperations.unsafeWrap(familyName)).setSequenceId(csid).build());<a name="line.2022"></a>
-<span class="sourceLineNo">2023</span>    }<a name="line.2023"></a>
-<span class="sourceLineNo">2024</span>    return regionLoadBldr.setCompleteSequenceId(getMaxFlushedSeqId());<a name="line.2024"></a>
-<span class="sourceLineNo">2025</span>  }<a name="line.2025"></a>
-<span class="sourceLineNo">2026</span><a name="line.2026"></a>
-<span class="sourceLineNo">2027</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2027"></a>
-<span class="sourceLineNo">2028</span>  // HRegion maintenance.<a name="line.2028"></a>
-<span class="sourceLineNo">2029</span>  //<a name="line.2029"></a>
-<span class="sourceLineNo">2030</span>  // These methods are meant to be called periodically by the HRegionServer for<a name="line.2030"></a>
-<span class="sourceLineNo">2031</span>  // upkeep.<a name="line.2031"></a>
-<span class="sourceLineNo">2032</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2032"></a>
-<span class="sourceLineNo">2033</span>  /**<a name="line.2033"></a>
-<span class="sourceLineNo">2034</span>   * Do preparation for pending compaction.<a name="line.2034"></a>
-<span class="sourceLineNo">2035</span>   * @throws IOException<a name="line.2035"></a>
-<span class="sourceLineNo">2036</span>   */<a name="line.2036"></a>
-<span class="sourceLineNo">2037</span>  protected void doRegionCompactionPrep() throws IOException {<a name="line.2037"></a>
-<span class="sourceLineNo">2038</span>  }<a name="line.2038"></a>
-<span class="sourceLineNo">2039</span><a name="line.2039"></a>
-<span class="sourceLineNo">2040</span>  /**<a name="line.2040"></a>
-<span class="sourceLineNo">2041</span>   * Synchronously compact all stores in the region.<a name="line.2041"></a>
-<span class="sourceLineNo">2042</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.2042"></a>
-<span class="sourceLineNo">2043</span>   * time-sensitive thread.<a name="line.2043"></a>
-<span class="sourceLineNo">2044</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.2044"></a>
-<span class="sourceLineNo">2045</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.2045"></a>
-<span class="sourceLineNo">2046</span>   * and split in parallel. However by calling this method you may introduce<a name="line.2046"></a>
-<span class="sourceLineNo">2047</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.2047"></a>
-<span class="sourceLineNo">2048</span>   * you are doing.<a name="line.2048"></a>
-<span class="sourceLineNo">2049</span>   *<a name="line.2049"></a>
-<span class="sourceLineNo">2050</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.2050"></a>
-<span class="sourceLineNo">2051</span>   * @throws IOException<a name="line.2051"></a>
-<span class="sourceLineNo">2052</span>   */<a name="line.2052"></a>
-<span class="sourceLineNo">2053</span>  public void compact(boolean majorCompaction) throws IOException {<a name="line.2053"></a>
-<span class="sourceLineNo">2054</span>    if (majorCompaction) {<a name="line.2054"></a>
-<span class="sourceLineNo">2055</span>      stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.2055"></a>
-<span class="sourceLineNo">2056</span>    }<a name="line.2056"></a>
-<span class="sourceLineNo">2057</span>    for (HStore s : stores.values()) {<a name="line.2057"></a>
-<span class="sourceLineNo">2058</span>      Optional&lt;CompactionContext&gt; compaction = s.requestCompaction();<a name="line.2058"></a>
-<span class="sourceLineNo">2059</span>      if (compaction.isPresent()) {<a name="line.2059"></a>
-<span class="sourceLineNo">2060</span>        ThroughputController controller = null;<a name="line.2060"></a>
-<span class="sourceLineNo">2061</span>        if (rsServices != null) {<a name="line.2061"></a>
-<span class="sourceLineNo">2062</span>          controller = CompactionThroughputControllerFactory.create(rsServices, conf);<a name="line.2062"></a>
-<span class="sourceLineNo">2063</span>        }<a name="line.2063"></a>
-<span class="sourceLineNo">2064</span>        if (controller == null) {<a name="line.2064"></a>
-<span class="sourceLineNo">2065</span>          controller = NoLimitThroughputController.INSTANCE;<a name="line.2065"></a>
+<span class="sourceLineNo">1754</span>      if (this.metricsRegionWrapper != null) {<a name="line.1754"></a>
+<span class="sourceLineNo">1755</span>        Closeables.close(this.metricsRegionWrapper, true);<a name="line.1755"></a>
+<span class="sourceLineNo">1756</span>      }<a name="line.1756"></a>
+<span class="sourceLineNo">1757</span>      status.markComplete("Closed");<a name="line.1757"></a>
+<span class="sourceLineNo">1758</span>      LOG.info("Closed " + this);<a name="line.1758"></a>
+<span class="sourceLineNo">1759</span>      return result;<a name="line.1759"></a>
+<span class="sourceLineNo">1760</span>    } finally {<a name="line.1760"></a>
+<span class="sourceLineNo">1761</span>      lock.writeLock().unlock();<a name="line.1761"></a>
+<span class="sourceLineNo">1762</span>    }<a name="line.1762"></a>
+<span class="sourceLineNo">1763</span>  }<a name="line.1763"></a>
+<span class="sourceLineNo">1764</span><a name="line.1764"></a>
+<span class="sourceLineNo">1765</span>  /** Wait for all current flushes and compactions of the region to complete */<a name="line.1765"></a>
+<span class="sourceLineNo">1766</span>  // TODO HBASE-18906. Check the usage (if any) in Phoenix and expose this or give alternate way for<a name="line.1766"></a>
+<span class="sourceLineNo">1767</span>  // Phoenix needs.<a name="line.1767"></a>
+<span class="sourceLineNo">1768</span>  public void waitForFlushesAndCompactions() {<a name="line.1768"></a>
+<span class="sourceLineNo">1769</span>    synchronized (writestate) {<a name="line.1769"></a>
+<span class="sourceLineNo">1770</span>      if (this.writestate.readOnly) {<a name="line.1770"></a>
+<span class="sourceLineNo">1771</span>        // we should not wait for replayed flushed if we are read only (for example in case the<a name="line.1771"></a>
+<span class="sourceLineNo">1772</span>        // region is a secondary replica).<a name="line.1772"></a>
+<span class="sourceLineNo">1773</span>        return;<a name="line.1773"></a>
+<span class="sourceLineNo">1774</span>      }<a name="line.1774"></a>
+<span class="sourceLineNo">1775</span>      boolean interrupted = false;<a name="line.1775"></a>
+<span class="sourceLineNo">1776</span>      try {<a name="line.1776"></a>
+<span class="sourceLineNo">1777</span>        while (writestate.compacting.get() &gt; 0 || writestate.flushing) {<a name="line.1777"></a>
+<span class="sourceLineNo">1778</span>          LOG.debug("waiting for " + writestate.compacting + " compactions"<a name="line.1778"></a>
+<span class="sourceLineNo">1779</span>            + (writestate.flushing ? " &amp; cache flush" : "") + " to complete for region " + this);<a name="line.1779"></a>
+<span class="sourceLineNo">1780</span>          try {<a name="line.1780"></a>
+<span class="sourceLineNo">1781</span>            writestate.wait();<a name="line.1781"></a>
+<span class="sourceLineNo">1782</span>          } catch (InterruptedException iex) {<a name="line.1782"></a>
+<span class="sourceLineNo">1783</span>            // essentially ignore and propagate the interrupt back up<a name="line.1783"></a>
+<span class="sourceLineNo">1784</span>            LOG.warn("Interrupted while waiting");<a name="line.1784"></a>
+<span class="sourceLineNo">1785</span>            interrupted = true;<a name="line.1785"></a>
+<span class="sourceLineNo">1786</span>            break;<a name="line.1786"></a>
+<span class="sourceLineNo">1787</span>          }<a name="line.1787"></a>
+<span class="sourceLineNo">1788</span>        }<a name="line.1788"></a>
+<span class="sourceLineNo">1789</span>      } finally {<a name="line.1789"></a>
+<span class="sourceLineNo">1790</span>        if (interrupted) {<a name="line.1790"></a>
+<span class="sourceLineNo">1791</span>          Thread.currentThread().interrupt();<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>  }<a name="line.1795"></a>
+<span class="sourceLineNo">1796</span><a name="line.1796"></a>
+<span class="sourceLineNo">1797</span>  /**<a name="line.1797"></a>
+<span class="sourceLineNo">1798</span>   * Wait for all current flushes of the region to complete<a name="line.1798"></a>
+<span class="sourceLineNo">1799</span>   */<a name="line.1799"></a>
+<span class="sourceLineNo">1800</span>  public void waitForFlushes() {<a name="line.1800"></a>
+<span class="sourceLineNo">1801</span>    waitForFlushes(0);// Unbound wait<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>  @Override<a name="line.1804"></a>
+<span class="sourceLineNo">1805</span>  public boolean waitForFlushes(long timeout) {<a name="line.1805"></a>
+<span class="sourceLineNo">1806</span>    synchronized (writestate) {<a name="line.1806"></a>
+<span class="sourceLineNo">1807</span>      if (this.writestate.readOnly) {<a name="line.1807"></a>
+<span class="sourceLineNo">1808</span>        // we should not wait for replayed flushed if we are read only (for example in case the<a name="line.1808"></a>
+<span class="sourceLineNo">1809</span>        // region is a secondary replica).<a name="line.1809"></a>
+<span class="sourceLineNo">1810</span>        return true;<a name="line.1810"></a>
+<span class="sourceLineNo">1811</span>      }<a name="line.1811"></a>
+<span class="sourceLineNo">1812</span>      if (!writestate.flushing) return true;<a name="line.1812"></a>
+<span class="sourceLineNo">1813</span>      long start = System.currentTimeMillis();<a name="line.1813"></a>
+<span class="sourceLineNo">1814</span>      long duration = 0;<a name="line.1814"></a>
+<span class="sourceLineNo">1815</span>      boolean interrupted = false;<a name="line.1815"></a>
+<span class="sourceLineNo">1816</span>      LOG.debug("waiting for cache flush to complete for region " + this);<a name="line.1816"></a>
+<span class="sourceLineNo">1817</span>      try {<a name="line.1817"></a>
+<span class="sourceLineNo">1818</span>        while (writestate.flushing) {<a name="line.1818"></a>
+<span class="sourceLineNo">1819</span>          if (timeout &gt; 0 &amp;&amp; duration &gt;= timeout) break;<a name="line.1819"></a>
+<span class="sourceLineNo">1820</span>          try {<a name="line.1820"></a>
+<span class="sourceLineNo">1821</span>            long toWait = timeout == 0 ? 0 : (timeout - duration);<a name="line.1821"></a>
+<span class="sourceLineNo">1822</span>            writestate.wait(toWait);<a name="line.1822"></a>
+<span class="sourceLineNo">1823</span>          } catch (InterruptedException iex) {<a name="line.1823"></a>
+<span class="sourceLineNo">1824</span>            // essentially ignore and propagate the interrupt back up<a name="line.1824"></a>
+<span class="sourceLineNo">1825</span>            LOG.warn("Interrupted while waiting");<a name="line.1825"></a>
+<span class="sourceLineNo">1826</span>            interrupted = true;<a name="line.1826"></a>
+<span class="sourceLineNo">1827</span>            break;<a name="line.1827"></a>
+<span class="sourceLineNo">1828</span>          } finally {<a name="line.1828"></a>
+<span class="sourceLineNo">1829</span>            duration = System.currentTimeMillis() - start;<a name="line.1829"></a>
+<span class="sourceLineNo">1830</span>          }<a name="line.1830"></a>
+<span class="sourceLineNo">1831</span>        }<a name="line.1831"></a>
+<span class="sourceLineNo">1832</span>      } finally {<a name="line.1832"></a>
+<span class="sourceLineNo">1833</span>        if (interrupted) {<a name="line.1833"></a>
+<span class="sourceLineNo">1834</span>          Thread.currentThread().interrupt();<a name="line.1834"></a>
+<span class="sourceLineNo">1835</span>        }<a name="line.1835"></a>
+<span class="sourceLineNo">1836</span>      }<a name="line.1836"></a>
+<span class="sourceLineNo">1837</span>      LOG.debug("Waited " + duration + " ms for flush to complete");<a name="line.1837"></a>
+<span class="sourceLineNo">1838</span>      return !(writestate.flushing);<a name="line.1838"></a>
+<span class="sourceLineNo">1839</span>    }<a name="line.1839"></a>
+<span class="sourceLineNo">1840</span>  }<a name="line.1840"></a>
+<span class="sourceLineNo">1841</span><a name="line.1841"></a>
+<span class="sourceLineNo">1842</span>  protected ThreadPoolExecutor getStoreOpenAndCloseThreadPool(<a name="line.1842"></a>
+<span class="sourceLineNo">1843</span>      final String threadNamePrefix) {<a name="line.1843"></a>
+<span class="sourceLineNo">1844</span>    int numStores = Math.max(1, this.htableDescriptor.getColumnFamilyCount());<a name="line.1844"></a>
+<span class="sourceLineNo">1845</span>    int maxThreads = Math.min(numStores,<a name="line.1845"></a>
+<span class="sourceLineNo">1846</span>        conf.getInt(HConstants.HSTORE_OPEN_AND_CLOSE_THREADS_MAX,<a name="line.1846"></a>
+<span class="sourceLineNo">1847</span>            HConstants.DEFAULT_HSTORE_OPEN_AND_CLOSE_THREADS_MAX));<a name="line.1847"></a>
+<span class="sourceLineNo">1848</span>    return getOpenAndCloseThreadPool(maxThreads, threadNamePrefix);<a name="line.1848"></a>
+<span class="sourceLineNo">1849</span>  }<a name="line.1849"></a>
+<span class="sourceLineNo">1850</span><a name="line.1850"></a>
+<span class="sourceLineNo">1851</span>  protected ThreadPoolExecutor getStoreFileOpenAndCloseThreadPool(<a name="line.1851"></a>
+<span class="sourceLineNo">1852</span>      final String threadNamePrefix) {<a name="line.1852"></a>
+<span class="sourceLineNo">1853</span>    int numStores = Math.max(1, this.htableDescriptor.getColumnFamilyCount());<a name="line.1853"></a>
+<span class="sourceLineNo">1854</span>    int maxThreads = Math.max(1,<a name="line.1854"></a>
+<span class="sourceLineNo">1855</span>        conf.getInt(HConstants.HSTORE_OPEN_AND_CLOSE_THREADS_MAX,<a name="line.1855"></a>
+<span class="sourceLineNo">1856</span>            HConstants.DEFAULT_HSTORE_OPEN_AND_CLOSE_THREADS_MAX)<a name="line.1856"></a>
+<span class="sourceLineNo">1857</span>            / numStores);<a name="line.1857"></a>
+<span class="sourceLineNo">1858</span>    return getOpenAndCloseThreadPool(maxThreads, threadNamePrefix);<a name="line.1858"></a>
+<span class="sourceLineNo">1859</span>  }<a name="line.1859"></a>
+<span class="sourceLineNo">1860</span><a name="line.1860"></a>
+<span class="sourceLineNo">1861</span>  static ThreadPoolExecutor getOpenAndCloseThreadPool(int maxThreads,<a name="line.1861"></a>
+<span class="sourceLineNo">1862</span>      final String threadNamePrefix) {<a name="line.1862"></a>
+<span class="sourceLineNo">1863</span>    return Threads.getBoundedCachedThreadPool(maxThreads, 30L, TimeUnit.SECONDS,<a name="line.1863"></a>
+<span class="sourceLineNo">1864</span>      new ThreadFactory() {<a name="line.1864"></a>
+<span class="sourceLineNo">1865</span>        private int count = 1;<a name="line.1865"></a>
+<span class="sourceLineNo">1866</span><a name="line.1866"></a>
+<span class="sourceLineNo">1867</span>        @Override<a name="line.1867"></a>
+<span class="sourceLineNo">1868</span>        public Thread newThread(Runnable r) {<a name="line.1868"></a>
+<span class="sourceLineNo">1869</span>          return new Thread(r, threadNamePrefix + "-" + count++);<a name="line.1869"></a>
+<span class="sourceLineNo">1870</span>        }<a name="line.1870"></a>
+<span class="sourceLineNo">1871</span>      });<a name="line.1871"></a>
+<span class="sourceLineNo">1872</span>  }<a name="line.1872"></a>
+<span class="sourceLineNo">1873</span><a name="line.1873"></a>
+<span class="sourceLineNo">1874</span>   /**<a name="line.1874"></a>
+<span class="sourceLineNo">1875</span>    * @return True if its worth doing a flush before we put up the close flag.<a name="line.1875"></a>
+<span class="sourceLineNo">1876</span>    */<a name="line.1876"></a>
+<span class="sourceLineNo">1877</span>  private boolean worthPreFlushing() {<a name="line.1877"></a>
+<span class="sourceLineNo">1878</span>    return this.memStoreSizing.getDataSize() &gt;<a name="line.1878"></a>
+<span class="sourceLineNo">1879</span>      this.conf.getLong("hbase.hregion.preclose.flush.size", 1024 * 1024 * 5);<a name="line.1879"></a>
+<span class="sourceLineNo">1880</span>  }<a name="line.1880"></a>
+<span class="sourceLineNo">1881</span><a name="line.1881"></a>
+<span class="sourceLineNo">1882</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1882"></a>
+<span class="sourceLineNo">1883</span>  // HRegion accessors<a name="line.1883"></a>
+<span class="sourceLineNo">1884</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.1884"></a>
+<span class="sourceLineNo">1885</span><a name="line.1885"></a>
+<span class="sourceLineNo">1886</span>  @Override<a name="line.1886"></a>
+<span class="sourceLineNo">1887</span>  public TableDescriptor getTableDescriptor() {<a name="line.1887"></a>
+<span class="sourceLineNo">1888</span>    return this.htableDescriptor;<a name="line.1888"></a>
+<span class="sourceLineNo">1889</span>  }<a name="line.1889"></a>
+<span class="sourceLineNo">1890</span><a name="line.1890"></a>
+<span class="sourceLineNo">1891</span>  @VisibleForTesting<a name="line.1891"></a>
+<span class="sourceLineNo">1892</span>  void setTableDescriptor(TableDescriptor desc) {<a name="line.1892"></a>
+<span class="sourceLineNo">1893</span>    htableDescriptor = desc;<a name="line.1893"></a>
+<span class="sourceLineNo">1894</span>  }<a name="line.1894"></a>
+<span class="sourceLineNo">1895</span><a name="line.1895"></a>
+<span class="sourceLineNo">1896</span>  /** @return WAL in use for this region */<a name="line.1896"></a>
+<span class="sourceLineNo">1897</span>  public WAL getWAL() {<a name="line.1897"></a>
+<span class="sourceLineNo">1898</span>    return this.wal;<a name="line.1898"></a>
+<span class="sourceLineNo">1899</span>  }<a name="line.1899"></a>
+<span class="sourceLineNo">1900</span><a name="line.1900"></a>
+<span class="sourceLineNo">1901</span>  public BlockCache getBlockCache() {<a name="line.1901"></a>
+<span class="sourceLineNo">1902</span>    return this.blockCache;<a name="line.1902"></a>
+<span class="sourceLineNo">1903</span>  }<a name="line.1903"></a>
+<span class="sourceLineNo">1904</span><a name="line.1904"></a>
+<span class="sourceLineNo">1905</span>  /**<a name="line.1905"></a>
+<span class="sourceLineNo">1906</span>   * Only used for unit test which doesn't start region server.<a name="line.1906"></a>
+<span class="sourceLineNo">1907</span>   */<a name="line.1907"></a>
+<span class="sourceLineNo">1908</span>  @VisibleForTesting<a name="line.1908"></a>
+<span class="sourceLineNo">1909</span>  public void setBlockCache(BlockCache blockCache) {<a name="line.1909"></a>
+<span class="sourceLineNo">1910</span>    this.blockCache = blockCache;<a name="line.1910"></a>
+<span class="sourceLineNo">1911</span>  }<a name="line.1911"></a>
+<span class="sourceLineNo">1912</span><a name="line.1912"></a>
+<span class="sourceLineNo">1913</span>  public MobFileCache getMobFileCache() {<a name="line.1913"></a>
+<span class="sourceLineNo">1914</span>    return this.mobFileCache;<a name="line.1914"></a>
+<span class="sourceLineNo">1915</span>  }<a name="line.1915"></a>
+<span class="sourceLineNo">1916</span><a name="line.1916"></a>
+<span class="sourceLineNo">1917</span>  /**<a name="line.1917"></a>
+<span class="sourceLineNo">1918</span>   * Only used for unit test which doesn't start region server.<a name="line.1918"></a>
+<span class="sourceLineNo">1919</span>   */<a name="line.1919"></a>
+<span class="sourceLineNo">1920</span>  @VisibleForTesting<a name="line.1920"></a>
+<span class="sourceLineNo">1921</span>  public void setMobFileCache(MobFileCache mobFileCache) {<a name="line.1921"></a>
+<span class="sourceLineNo">1922</span>    this.mobFileCache = mobFileCache;<a name="line.1922"></a>
+<span class="sourceLineNo">1923</span>  }<a name="line.1923"></a>
+<span class="sourceLineNo">1924</span><a name="line.1924"></a>
+<span class="sourceLineNo">1925</span>  /**<a name="line.1925"></a>
+<span class="sourceLineNo">1926</span>   * @return split policy for this region.<a name="line.1926"></a>
+<span class="sourceLineNo">1927</span>   */<a name="line.1927"></a>
+<span class="sourceLineNo">1928</span>  public RegionSplitPolicy getSplitPolicy() {<a name="line.1928"></a>
+<span class="sourceLineNo">1929</span>    return this.splitPolicy;<a name="line.1929"></a>
+<span class="sourceLineNo">1930</span>  }<a name="line.1930"></a>
+<span class="sourceLineNo">1931</span><a name="line.1931"></a>
+<span class="sourceLineNo">1932</span>  /**<a name="line.1932"></a>
+<span class="sourceLineNo">1933</span>   * A split takes the config from the parent region &amp; passes it to the daughter<a name="line.1933"></a>
+<span class="sourceLineNo">1934</span>   * region's constructor. If 'conf' was passed, you would end up using the HTD<a name="line.1934"></a>
+<span class="sourceLineNo">1935</span>   * of the parent region in addition to the new daughter HTD. Pass 'baseConf'<a name="line.1935"></a>
+<span class="sourceLineNo">1936</span>   * to the daughter regions to avoid this tricky dedupe problem.<a name="line.1936"></a>
+<span class="sourceLineNo">1937</span>   * @return Configuration object<a name="line.1937"></a>
+<span class="sourceLineNo">1938</span>   */<a name="line.1938"></a>
+<span class="sourceLineNo">1939</span>  Configuration getBaseConf() {<a name="line.1939"></a>
+<span class="sourceLineNo">1940</span>    return this.baseConf;<a name="line.1940"></a>
+<span class="sourceLineNo">1941</span>  }<a name="line.1941"></a>
+<span class="sourceLineNo">1942</span><a name="line.1942"></a>
+<span class="sourceLineNo">1943</span>  /** @return {@link FileSystem} being used by this region */<a name="line.1943"></a>
+<span class="sourceLineNo">1944</span>  public FileSystem getFilesystem() {<a name="line.1944"></a>
+<span class="sourceLineNo">1945</span>    return fs.getFileSystem();<a name="line.1945"></a>
+<span class="sourceLineNo">1946</span>  }<a name="line.1946"></a>
+<span class="sourceLineNo">1947</span><a name="line.1947"></a>
+<span class="sourceLineNo">1948</span>  /** @return the {@link HRegionFileSystem} used by this region */<a name="line.1948"></a>
+<span class="sourceLineNo">1949</span>  public HRegionFileSystem getRegionFileSystem() {<a name="line.1949"></a>
+<span class="sourceLineNo">1950</span>    return this.fs;<a name="line.1950"></a>
+<span class="sourceLineNo">1951</span>  }<a name="line.1951"></a>
+<span class="sourceLineNo">1952</span><a name="line.1952"></a>
+<span class="sourceLineNo">1953</span>  /** @return the WAL {@link HRegionFileSystem} used by this region */<a name="line.1953"></a>
+<span class="sourceLineNo">1954</span>  HRegionFileSystem getRegionWALFileSystem() throws IOException {<a name="line.1954"></a>
+<span class="sourceLineNo">1955</span>    return new HRegionFileSystem(conf, getWalFileSystem(),<a name="line.1955"></a>
+<span class="sourceLineNo">1956</span>        FSUtils.getWALTableDir(conf, htableDescriptor.getTableName()), fs.getRegionInfo());<a name="line.1956"></a>
+<span class="sourceLineNo">1957</span>  }<a name="line.1957"></a>
+<span class="sourceLineNo">1958</span><a name="line.1958"></a>
+<span class="sourceLineNo">1959</span>  /** @return the WAL {@link FileSystem} being used by this region */<a name="line.1959"></a>
+<span class="sourceLineNo">1960</span>  FileSystem getWalFileSystem() throws IOException {<a name="line.1960"></a>
+<span class="sourceLineNo">1961</span>    if (walFS == null) {<a name="line.1961"></a>
+<span class="sourceLineNo">1962</span>      walFS = FSUtils.getWALFileSystem(conf);<a name="line.1962"></a>
+<span class="sourceLineNo">1963</span>    }<a name="line.1963"></a>
+<span class="sourceLineNo">1964</span>    return walFS;<a name="line.1964"></a>
+<span class="sourceLineNo">1965</span>  }<a name="line.1965"></a>
+<span class="sourceLineNo">1966</span><a name="line.1966"></a>
+<span class="sourceLineNo">1967</span>  /**<a name="line.1967"></a>
+<span class="sourceLineNo">1968</span>   * @return the Region directory under WALRootDirectory<a name="line.1968"></a>
+<span class="sourceLineNo">1969</span>   * @throws IOException if there is an error getting WALRootDir<a name="line.1969"></a>
+<span class="sourceLineNo">1970</span>   */<a name="line.1970"></a>
+<span class="sourceLineNo">1971</span>  @VisibleForTesting<a name="line.1971"></a>
+<span class="sourceLineNo">1972</span>  public Path getWALRegionDir() throws IOException {<a name="line.1972"></a>
+<span class="sourceLineNo">1973</span>    if (regionDir == null) {<a name="line.1973"></a>
+<span class="sourceLineNo">1974</span>      regionDir = FSUtils.getWALRegionDir(conf, getRegionInfo().getTable(),<a name="line.1974"></a>
+<span class="sourceLineNo">1975</span>          getRegionInfo().getEncodedName());<a name="line.1975"></a>
+<span class="sourceLineNo">1976</span>    }<a name="line.1976"></a>
+<span class="sourceLineNo">1977</span>    return regionDir;<a name="line.1977"></a>
+<span class="sourceLineNo">1978</span>  }<a name="line.1978"></a>
+<span class="sourceLineNo">1979</span><a name="line.1979"></a>
+<span class="sourceLineNo">1980</span>  @Override<a name="line.1980"></a>
+<span class="sourceLineNo">1981</span>  public long getEarliestFlushTimeForAllStores() {<a name="line.1981"></a>
+<span class="sourceLineNo">1982</span>    return Collections.min(lastStoreFlushTimeMap.values());<a name="line.1982"></a>
+<span class="sourceLineNo">1983</span>  }<a name="line.1983"></a>
+<span class="sourceLineNo">1984</span><a name="line.1984"></a>
+<span class="sourceLineNo">1985</span>  @Override<a name="line.1985"></a>
+<span class="sourceLineNo">1986</span>  public long getOldestHfileTs(boolean majorCompactionOnly) throws IOException {<a name="line.1986"></a>
+<span class="sourceLineNo">1987</span>    long result = Long.MAX_VALUE;<a name="line.1987"></a>
+<span class="sourceLineNo">1988</span>    for (HStore store : stores.values()) {<a name="line.1988"></a>
+<span class="sourceLineNo">1989</span>      Collection&lt;HStoreFile&gt; storeFiles = store.getStorefiles();<a name="line.1989"></a>
+<span class="sourceLineNo">1990</span>      if (storeFiles == null) {<a name="line.1990"></a>
+<span class="sourceLineNo">1991</span>        continue;<a name="line.1991"></a>
+<span class="sourceLineNo">1992</span>      }<a name="line.1992"></a>
+<span class="sourceLineNo">1993</span>      for (HStoreFile file : storeFiles) {<a name="line.1993"></a>
+<span class="sourceLineNo">1994</span>        StoreFileReader sfReader = file.getReader();<a name="line.1994"></a>
+<span class="sourceLineNo">1995</span>        if (sfReader == null) {<a name="line.1995"></a>
+<span class="sourceLineNo">1996</span>          continue;<a name="line.1996"></a>
+<span class="sourceLineNo">1997</span>        }<a name="line.1997"></a>
+<span class="sourceLineNo">1998</span>        HFile.Reader reader = sfReader.getHFileReader();<a name="line.1998"></a>
+<span class="sourceLineNo">1999</span>        if (reader == null) {<a name="line.1999"></a>
+<span class="sourceLineNo">2000</span>          continue;<a name="line.2000"></a>
+<span class="sourceLineNo">2001</span>        }<a name="line.2001"></a>
+<span class="sourceLineNo">2002</span>        if (majorCompactionOnly) {<a name="line.2002"></a>
+<span class="sourceLineNo">2003</span>          byte[] val = reader.loadFileInfo().get(MAJOR_COMPACTION_KEY);<a name="line.2003"></a>
+<span class="sourceLineNo">2004</span>          if (val == null || !Bytes.toBoolean(val)) {<a name="line.2004"></a>
+<span class="sourceLineNo">2005</span>            continue;<a name="line.2005"></a>
+<span class="sourceLineNo">2006</span>          }<a name="line.2006"></a>
+<span class="sourceLineNo">2007</span>        }<a name="line.2007"></a>
+<span class="sourceLineNo">2008</span>        result = Math.min(result, reader.getFileContext().getFileCreateTime());<a name="line.2008"></a>
+<span class="sourceLineNo">2009</span>      }<a name="line.2009"></a>
+<span class="sourceLineNo">2010</span>    }<a name="line.2010"></a>
+<span class="sourceLineNo">2011</span>    return result == Long.MAX_VALUE ? 0 : result;<a name="line.2011"></a>
+<span class="sourceLineNo">2012</span>  }<a name="line.2012"></a>
+<span class="sourceLineNo">2013</span><a name="line.2013"></a>
+<span class="sourceLineNo">2014</span>  RegionLoad.Builder setCompleteSequenceId(RegionLoad.Builder regionLoadBldr) {<a name="line.2014"></a>
+<span class="sourceLineNo">2015</span>    long lastFlushOpSeqIdLocal = this.lastFlushOpSeqId;<a name="line.2015"></a>
+<span class="sourceLineNo">2016</span>    byte[] encodedRegionName = this.getRegionInfo().getEncodedNameAsBytes();<a name="line.2016"></a>
+<span class="sourceLineNo">2017</span>    regionLoadBldr.clearStoreCompleteSequenceId();<a name="line.2017"></a>
+<span class="sourceLineNo">2018</span>    for (byte[] familyName : this.stores.keySet()) {<a name="line.2018"></a>
+<span class="sourceLineNo">2019</span>      long earliest = this.wal.getEarliestMemStoreSeqNum(encodedRegionName, familyName);<a name="line.2019"></a>
+<span class="sourceLineNo">2020</span>      // Subtract - 1 to go earlier than the current oldest, unflushed edit in memstore; this will<a name="line.2020"></a>
+<span class="sourceLineNo">2021</span>      // give us a sequence id that is for sure flushed. We want edit replay to start after this<a name="line.2021"></a>
+<span class="sourceLineNo">2022</span>      // sequence id in this region. If NO_SEQNUM, use the regions maximum flush id.<a name="line.2022"></a>
+<span class="sourceLineNo">2023</span>      long csid = (earliest == HConstants.NO_SEQNUM)? lastFlushOpSeqIdLocal: earliest - 1;<a name="line.2023"></a>
+<span class="sourceLineNo">2024</span>      regionLoadBldr.addStoreCompleteSequenceId(StoreSequenceId.newBuilder()<a name="line.2024"></a>
+<span class="sourceLineNo">2025</span>          .setFamilyName(UnsafeByteOperations.unsafeWrap(familyName)).setSequenceId(csid).build());<a name="line.2025"></a>
+<span class="sourceLineNo">2026</span>    }<a name="line.2026"></a>
+<span class="sourceLineNo">2027</span>    return regionLoadBldr.setCompleteSequenceId(getMaxFlushedSeqId());<a name="line.2027"></a>
+<span class="sourceLineNo">2028</span>  }<a name="line.2028"></a>
+<span class="sourceLineNo">2029</span><a name="line.2029"></a>
+<span class="sourceLineNo">2030</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2030"></a>
+<span class="sourceLineNo">2031</span>  // HRegion maintenance.<a name="line.2031"></a>
+<span class="sourceLineNo">2032</span>  //<a name="line.2032"></a>
+<span class="sourceLineNo">2033</span>  // These methods are meant to be called periodically by the HRegionServer for<a name="line.2033"></a>
+<span class="sourceLineNo">2034</span>  // upkeep.<a name="line.2034"></a>
+<span class="sourceLineNo">2035</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2035"></a>
+<span class="sourceLineNo">2036</span>  /**<a name="line.2036"></a>
+<span class="sourceLineNo">2037</span>   * Do preparation for pending compaction.<a name="line.2037"></a>
+<span class="sourceLineNo">2038</span>   * @throws IOException<a name="line.2038"></a>
+<span class="sourceLineNo">2039</span>   */<a name="line.2039"></a>
+<span class="sourceLineNo">2040</span>  protected void doRegionCompactionPrep() throws IOException {<a name="line.2040"></a>
+<span class="sourceLineNo">2041</span>  }<a name="line.2041"></a>
+<span class="sourceLineNo">2042</span><a name="line.2042"></a>
+<span class="sourceLineNo">2043</span>  /**<a name="line.2043"></a>
+<span class="sourceLineNo">2044</span>   * Synchronously compact all stores in the region.<a name="line.2044"></a>
+<span class="sourceLineNo">2045</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.2045"></a>
+<span class="sourceLineNo">2046</span>   * time-sensitive thread.<a name="line.2046"></a>
+<span class="sourceLineNo">2047</span>   * &lt;p&gt;Note that no locks are taken to prevent possible conflicts between<a name="line.2047"></a>
+<span class="sourceLineNo">2048</span>   * compaction and splitting activities. The regionserver does not normally compact<a name="line.2048"></a>
+<span class="sourceLineNo">2049</span>   * and split in parallel. However by calling this method you may introduce<a name="line.2049"></a>
+<span class="sourceLineNo">2050</span>   * unexpected and unhandled concurrency. Don't do this unless you know what<a name="line.2050"></a>
+<span class="sourceLineNo">2051</span>   * you are doing.<a name="line.2051"></a>
+<span class="sourceLineNo">2052</span>   *<a name="line.2052"></a>
+<span class="sourceLineNo">2053</span>   * @param majorCompaction True to force a major compaction regardless of thresholds<a name="line.2053"></a>
+<span class="sourceLineNo">2054</span>   * @throws IOException<a name="line.2054"></a>
+<span class="sourceLineNo">2055</span>   */<a name="line.2055"></a>
+<span class="sourceLineNo">2056</span>  public void compact(boolean majorCompaction) throws IOException {<a name="line.2056"></a>
+<span class="sourceLineNo">2057</span>    if (majorCompaction) {<a name="line.2057"></a>
+<span class="sourceLineNo">2058</span>      stores.values().forEach(HStore::triggerMajorCompaction);<a name="line.2058"></a>
+<span class="sourceLineNo">2059</span>    }<a name="line.2059"></a>
+<span class="sourceLineNo">2060</span>    for (HStore s : stores.values()) {<a name="line.2060"></a>
+<span class="sourceLineNo">2061</span>      Optional&lt;CompactionContext&gt; compaction = s.requestCompaction();<a name="line.2061"></a>
+<span class="sourceLineNo">2062</span>      if (compaction.isPresent()) {<a name="line.2062"></a>
+<span class="sourceLineNo">2063</span>        ThroughputController controller = null;<a name="line.2063"></a>
+<span class="sourceLineNo">2064</span>        if (rsServices != null) {<a name="line.2064"></a>
+<span class="sourceLineNo">2065</span>          controller = CompactionThroughputControllerFactory.create(rsServices, conf);<a name="line.2065"></a>
 <span class="sourceLineNo">2066</span>        }<a name="line.2066"></a>
-<span class="sourceLineNo">2067</span>        compact(compaction.get(), s, controller, null);<a name="line.2067"></a>
-<span class="sourceLineNo">2068</span>      }<a name="line.2068"></a>
-<span class="sourceLineNo">2069</span>    }<a name="line.2069"></a>
-<span class="sourceLineNo">2070</span>  }<a name="line.2070"></a>
-<span class="sourceLineNo">2071</span><a name="line.2071"></a>
-<span class="sourceLineNo">2072</span>  /**<a name="line.2072"></a>
-<span class="sourceLineNo">2073</span>   * This is a helper function that compact all the stores synchronously.<a name="line.2073"></a>
-<span class="sourceLineNo">2074</span>   * &lt;p&gt;<a name="line.2074"></a>
-<span class="sourceLineNo">2075</span>   * It is used by utilities and testing<a name="line.2075"></a>
-<span class="sourceLineNo">2076</span>   */<a name="line.2076"></a>
-<span class="sourceLineNo">2077</span>  @VisibleForTesting<a name="line.2077"></a>
-<span class="sourceLineNo">2078</span>  public void compactStores() throws IOException {<a name="line.2078"></a>
-<span class="sourceLineNo">2079</span>    for (HStore s : stores.values()) {<a name="line.2079"></a>
-<span class="sourceLineNo">2080</span>      Optional&lt;CompactionContext&gt; compaction = s.requestCompaction();<a name="line.2080"></a>
-<span class="sourceLineNo">2081</span>      if (compaction.isPresent()) {<a name="line.2081"></a>
-<span class="sourceLineNo">2082</span>        compact(compaction.get(), s, NoLimitThroughputController.INSTANCE, null);<a name="line.2082"></a>
-<span class="sourceLineNo">2083</span>      }<a name="line.2083"></a>
-<span class="sourceLineNo">2084</span>    }<a name="line.2084"></a>
-<span class="sourceLineNo">2085</span>  }<a name="line.2085"></a>
-<span class="sourceLineNo">2086</span><a name="line.2086"></a>
-<span class="sourceLineNo">2087</span>  /**<a name="line.2087"></a>
-<span class="sourceLineNo">2088</span>   * This is a helper function that compact the given store.<a name="line.2088"></a>
-<span class="sourceLineNo">2089</span>   * &lt;p&gt;<a name="line.2089"></a>
-<span class="sourceLineNo">2090</span>   * It is used by utilities and testing<a name="line.2090"></a>
-<span class="sourceLineNo">2091</span>   */<a name="line.2091"></a>
-<span class="sourceLineNo">2092</span>  @VisibleForTesting<a name="line.2092"></a>
-<span class="sourceLineNo">2093</span>  void compactStore(byte[] family, ThroughputController throughputController) throws IOException {<a name="line.2093"></a>
-<span class="sourceLineNo">2094</span>    HStore s = getStore(family);<a name="line.2094"></a>
-<span class="sourceLineNo">2095</span>    Optional&lt;CompactionContext&gt; compaction = s.requestCompaction();<a name="line.2095"></a>
-<span class="sourceLineNo">2096</span>    if (compaction.isPresent()) {<a name="line.2096"></a>
-<span class="sourceLineNo">2097</span>      compact(compaction.get(), s, throughputController, null);<a name="line.2097"></a>
-<span class="sourceLineNo">2098</span>    }<a name="line.2098"></a>
-<span class="sourceLineNo">2099</span>  }<a name="line.2099"></a>
-<span class="sourceLineNo">2100</span><a name="line.2100"></a>
-<span class="sourceLineNo">2101</span>  /**<a name="line.2101"></a>
-<span class="sourceLineNo">2102</span>   * Called by compaction thread and after region is opened to compact the<a name="line.2102"></a>
-<span class="sourceLineNo">2103</span>   * HStores if necessary.<a name="line.2103"></a>
-<span class="sourceLineNo">2104</span>   *<a name="line.2104"></a>
-<span class="sourceLineNo">2105</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.2105"></a>
-<span class="sourceLineNo">2106</span>   * time-sensitive thread.<a name="line.2106"></a>
+<span class="sourceLineNo">2067</span>        if (controller == null) {<a name="line.2067"></a>
+<span class="sourceLineNo">2068</span>          controller = NoLimitThroughputController.INSTANCE;<a name="line.2068"></a>
+<span class="sourceLineNo">2069</span>        }<a name="line.2069"></a>
+<span class="sourceLineNo">2070</span>        compact(compaction.get(), s, controller, null);<a name="line.2070"></a>
+<span class="sourceLineNo">2071</span>      }<a name="line.2071"></a>
+<span class="sourceLineNo">2072</span>    }<a name="line.2072"></a>
+<span class="sourceLineNo">2073</span>  }<a name="line.2073"></a>
+<span class="sourceLineNo">2074</span><a name="line.2074"></a>
+<span class="sourceLineNo">2075</span>  /**<a name="line.2075"></a>
+<span class="sourceLineNo">2076</span>   * This is a helper function that compact all the stores synchronously.<a name="line.2076"></a>
+<span class="sourceLineNo">2077</span>   * &lt;p&gt;<a name="line.2077"></a>
+<span class="sourceLineNo">2078</span>   * It is used by utilities and testing<a name="line.2078"></a>
+<span class="sourceLineNo">2079</span>   */<a name="line.2079"></a>
+<span class="sourceLineNo">2080</span>  @VisibleForTesting<a name="line.2080"></a>
+<span class="sourceLineNo">2081</span>  public void compactStores() throws IOException {<a name="line.2081"></a>
+<span class="sourceLineNo">2082</span>    for (HStore s : stores.values()) {<a name="line.2082"></a>
+<span class="sourceLineNo">2083</span>      Optional&lt;CompactionContext&gt; compaction = s.requestCompaction();<a name="line.2083"></a>
+<span class="sourceLineNo">2084</span>      if (compaction.isPresent()) {<a name="line.2084"></a>
+<span class="sourceLineNo">2085</span>        compact(compaction.get(), s, NoLimitThroughputController.INSTANCE, null);<a name="line.2085"></a>
+<span class="sourceLineNo">2086</span>      }<a name="line.2086"></a>
+<span class="sourceLineNo">2087</span>    }<a name="line.2087"></a>
+<span class="sourceLineNo">2088</span>  }<a name="line.2088"></a>
+<span class="sourceLineNo">2089</span><a name="line.2089"></a>
+<span class="sourceLineNo">2090</span>  /**<a name="line.2090"></a>
+<span class="sourceLineNo">2091</span>   * This is a helper function that compact the given store.<a name="line.2091"></a>
+<span class="sourceLineNo">2092</span>   * &lt;p&gt;<a name="line.2092"></a>
+<span class="sourceLineNo">2093</span>   * It is used by utilities and testing<a name="line.2093"></a>
+<span class="sourceLineNo">2094</span>   */<a name="line.2094"></a>
+<span class="sourceLineNo">2095</span>  @VisibleForTesting<a name="line.2095"></a>
+<span class="sourceLineNo">2096</span>  void compactStore(byte[] family, ThroughputController throughputController) throws IOException {<a name="line.2096"></a>
+<span class="sourceLineNo">2097</span>    HStore s = getStore(family);<a name="line.2097"></a>
+<span class="sourceLineNo">2098</span>    Optional&lt;CompactionContext&gt; compaction = s.requestCompaction();<a name="line.2098"></a>
+<span class="sourceLineNo">2099</span>    if (compaction.isPresent()) {<a name="line.2099"></a>
+<span class="sourceLineNo">2100</span>      compact(compaction.get(), s, throughputController, null);<a name="line.2100"></a>
+<span class="sourceLineNo">2101</span>    }<a name="line.2101"></a>
+<span class="sourceLineNo">2102</span>  }<a name="line.2102"></a>
+<span class="sourceLineNo">2103</span><a name="line.2103"></a>
+<span class="sourceLineNo">2104</span>  /**<a name="line.2104"></a>
+<span class="sourceLineNo">2105</span>   * Called by compaction thread and after region is opened to compact the<a name="line.2105"></a>
+<span class="sourceLineNo">2106</span>   * HStores if necessary.<a name="line.2106"></a>
 <span class="sourceLineNo">2107</span>   *<a name="line.2107"></a>
-<span class="sourceLineNo">2108</span>   * Note that no locking is necessary at this level because compaction only<a name="line.2108"></a>
-<span class="sourceLineNo">2109</span>   * conflicts with a region split, and that cannot happen because the region<a name="line.2109"></a>
-<span class="sourceLineNo">2110</span>   * server does them sequentially and not in parallel.<a name="line.2110"></a>
-<span class="sourceLineNo">2111</span>   *<a name="line.2111"></a>
-<span class="sourceLineNo">2112</span>   * @param compaction Compaction details, obtained by requestCompaction()<a name="line.2112"></a>
-<span class="sourceLineNo">2113</span>   * @param throughputController<a name="line.2113"></a>
-<span class="sourceLineNo">2114</span>   * @return whether the compaction completed<a name="line.2114"></a>
-<span class="sourceLineNo">2115</span>   */<a name="line.2115"></a>
-<span class="sourceLineNo">2116</span>  public boolean compact(CompactionContext compaction, HStore store,<a name="line.2116"></a>
-<span class="sourceLineNo">2117</span>      ThroughputController throughputController) throws IOException {<a name="line.2117"></a>
-<span class="sourceLineNo">2118</span>    return compact(compaction, store, throughputController, null);<a name="line.2118"></a>
-<span class="sourceLineNo">2119</span>  }<a name="line.2119"></a>
-<span class="sourceLineNo">2120</span><a name="line.2120"></a>
-<span class="sourceLineNo">2121</span>  private boolean shouldForbidMajorCompaction() {<a name="line.2121"></a>
-<span class="sourceLineNo">2122</span>    if (rsServices != null &amp;&amp; rsServices.getReplicationSourceService() != null) {<a name="line.2122"></a>
-<span class="sourceLineNo">2123</span>      return rsServices.getReplicationSourceService().getSyncReplicationPeerInfoProvider()<a name="line.2123"></a>
-<span class="sourceLineNo">2124</span>          .checkState(getRegionInfo().getTable(), ForbidMajorCompactionChecker.get());<a name="line.2124"></a>
-<span class="sourceLineNo">2125</span>    }<a name="line.2125"></a>
-<span class="sourceLineNo">2126</span>    return false;<a name="line.2126"></a>
-<span class="sourceLineNo">2127</span>  }<a name="line.2127"></a>
-<span class="sourceLineNo">2128</span><a name="line.2128"></a>
-<span class="sourceLineNo">2129</span>  /**<a name="line.2129"></a>
-<span class="sourceLineNo">2130</span>   * We are trying to remove / relax the region read lock for compaction.<a name="line.2130"></a>
-<span class="sourceLineNo">2131</span>   * Let's see what are the potential race conditions among the operations (user scan,<a name="line.2131"></a>
-<span class="sourceLineNo">2132</span>   * region split, region close and region bulk load).<a name="line.2132"></a>
-<span class="sourceLineNo">2133</span>   *<a name="line.2133"></a>
-<span class="sourceLineNo">2134</span>   *  user scan ---&gt; region read lock<a name="line.2134"></a>
-<span class="sourceLineNo">2135</span>   *  region split --&gt; region close first --&gt; region write lock<a name="line.2135"></a>
-<span class="sourceLineNo">2136</span>   *  region close --&gt; region write lock<a name="line.2136"></a>
-<span class="sourceLineNo">2137</span>   *  region bulk load --&gt; region write lock<a name="line.2137"></a>
-<span class="sourceLineNo">2138</span>   *<a name="line.2138"></a>
-<span class="sourceLineNo">2139</span>   * read lock is compatible with read lock. ---&gt; no problem with user scan/read<a name="line.2139"></a>
-<span class="sourceLineNo">2140</span>   * region bulk load does not cause problem for compaction (no consistency problem, store lock<a name="line.2140"></a>
-<span class="sourceLineNo">2141</span>   * will help the store file accounting).<a name="line.2141"></a>
-<span class="sourceLineNo">2142</span>   * They can run almost concurrently at the region level.<a name="line.2142"></a>
-<span class="sourceLineNo">2143</span>   *<a name="line.2143"></a>
-<span class="sourceLineNo">2144</span>   * The only remaining race condition is between the region close and compaction.<a name="line.2144"></a>
-<span class="sourceLineNo">2145</span>   * So we will evaluate, below, how region close intervenes with compaction if compaction does<a name="line.2145"></a>
-<span class="sourceLineNo">2146</span>   * not acquire region read lock.<a name="line.2146"></a>
-<span class="sourceLineNo">2147</span>   *<a name="line.2147"></a>
-<span class="sourceLineNo">2148</span>   * Here are the steps for compaction:<a name="line.2148"></a>
-<span class="sourceLineNo">2149</span>   * 1. obtain list of StoreFile's<a name="line.2149"></a>
-<span class="sourceLineNo">2150</span>   * 2. create StoreFileScanner's based on list from #1<a name="line.2150"></a>
-<span class="sourceLineNo">2151</span>   * 3. perform compaction and save resulting files under tmp dir<a name="line.2151"></a>
-<span class="sourceLineNo">2152</span>   * 4. swap in compacted files<a name="line.2152"></a>
-<span class="sourceLineNo">2153</span>   *<a name="line.2153"></a>
-<span class="sourceLineNo">2154</span>   * #1 is guarded by store lock. This patch does not change this --&gt; no worse or better<a name="line.2154"></a>
-<span class="sourceLineNo">2155</span>   * For #2, we obtain smallest read point (for region) across all the Scanners (for both default<a name="line.2155"></a>
-<span class="sourceLineNo">2156</span>   * compactor and stripe compactor).<a name="line.2156"></a>
-<span class="sourceLineNo">2157</span>   * The read points are for user scans. Region keeps the read points for all currently open<a name="line.2157"></a>
-<span class="sourceLineNo">2158</span>   * user scanners.<a name="line.2158"></a>
-<span class="sourceLineNo">2159</span>   * Compaction needs to know the smallest read point so that during re-write of the hfiles,<a name="line.2159"></a>
-<span class="sourceLineNo">2160</span>   * it can remove the mvcc points for the cells if their mvccs are older than the smallest<a name="line.2160"></a>
-<span class="sourceLineNo">2161</span>   * since they are not needed anymore.<a name="line.2161"></a>
-<span class="sourceLineNo">2162</span>   * This will not conflict with compaction.<a name="line.2162"></a>
-<span class="sourceLineNo">2163</span>   * For #3, it can be performed in parallel to other operations.<a name="line.2163"></a>
-<span class="sourceLineNo">2164</span>   * For #4 bulk load and compaction don't conflict with each other on the region level<a name="line.2164"></a>
-<span class="sourceLineNo">2165</span>   *   (for multi-family atomicy).<a name="line.2165"></a>
-<span class="sourceLineNo">2166</span>   * Region close and compaction are guarded pretty well by the 'writestate'.<a name="line.2166"></a>
-<span class="sourceLineNo">2167</span>   * In HRegion#doClose(), we have :<a name="line.2167"></a>
-<span class="sourceLineNo">2168</span>   * synchronized (writestate) {<a name="line.2168"></a>
-<span class="sourceLineNo">2169</span>   *   // Disable compacting and flushing by background threads for this<a name="line.2169"></a>
-<span class="sourceLineNo">2170</span>   *   // region.<a name="line.2170"></a>
-<span class="sourceLineNo">2171</span>   *   canFlush = !writestate.readOnly;<a name="line.2171"></a>
-<span class="sourceLineNo">2172</span>   *   writestate.writesEnabled = false;<a name="line.2172"></a>
-<span class="sourceLineNo">2173</span>   *   LOG.debug("Closing " + this + ": disabling compactions &amp; flushes");<a name="line.2173"></a>
-<span class="sourceLineNo">2174</span>   *   waitForFlushesAndCompactions();<a name="line.2174"></a>
-<span class="sourceLineNo">2175</span>   * }<a name="line.2175"></a>
-<span class="sourceLineNo">2176</span>   * waitForFlushesAndCompactions() would wait for writestate.compacting to come down to 0.<a name="line.2176"></a>
-<span class="sourceLineNo">2177</span>   * and in HRegion.compact()<a name="line.2177"></a>
-<span class="sourceLineNo">2178</span>   *  try {<a name="line.2178"></a>
-<span class="sourceLineNo">2179</span>   *    synchronized (writestate) {<a name="line.2179"></a>
-<span class="sourceLineNo">2180</span>   *    if (writestate.writesEnabled) {<a name="line.2180"></a>
-<span class="sourceLineNo">2181</span>   *      wasStateSet = true;<a name="line.2181"></a>
-<span class="sourceLineNo">2182</span>   *      ++writestate.compacting;<a name="line.2182"></a>
-<span class="sourceLineNo">2183</span>   *    } else {<a name="line.2183"></a>
-<span class="sourceLineNo">2184</span>   *      String msg = "NOT compacting region " + this + ". Writes disabled.";<a name="line.2184"></a>
-<span class="sourceLineNo">2185</span>   *      LOG.info(msg);<a name="line.2185"></a>
-<span class="sourceLineNo">2186</span>   *      status.abort(msg);<a name="line.2186"></a>
-<span class="sourceLineNo">2187</span>   *      return false;<a name="line.2187"></a>
-<span class="sourceLineNo">2188</span>   *    }<a name="line.2188"></a>
-<span class="sourceLineNo">2189</span>   *  }<a name="line.2189"></a>
-<span class="sourceLineNo">2190</span>   * Also in compactor.performCompaction():<a name="line.2190"></a>
-<span class="sourceLineNo">2191</span>   * check periodically to see if a system stop is requested<a name="line.2191"></a>
-<span class="sourceLineNo">2192</span>   * if (closeCheckInterval &gt; 0) {<a name="line.2192"></a>
-<span class="sourceLineNo">2193</span>   *   bytesWritten += len;<a name="line.2193"></a>
-<span class="sourceLineNo">2194</span>   *   if (bytesWritten &gt; closeCheckInterval) {<a name="line.2194"></a>
-<span class="sourceLineNo">2195</span>   *     bytesWritten = 0;<a name="line.2195"></a>
-<span class="sourceLineNo">2196</span>   *     if (!store.areWritesEnabled()) {<a name="line.2196"></a>
-<span class="sourceLineNo">2197</span>   *       progress.cancel();<a name="line.2197"></a>
-<span class="sourceLineNo">2198</span>   *       return false;<a name="line.2198"></a>
-<span class="sourceLineNo">2199</span>   *     }<a name="line.2199"></a>
-<span class="sourceLineNo">2200</span>   *   }<a name="line.2200"></a>
-<span class="sourceLineNo">2201</span>   * }<a name="line.2201"></a>
-<span class="sourceLineNo">2202</span>   */<a name="line.2202"></a>
-<span class="sourceLineNo">2203</span>  public boolean compact(CompactionContext compaction, HStore store,<a name="line.2203"></a>
-<span class="sourceLineNo">2204</span>      ThroughputController throughputController, User user) throws IOException {<a name="line.2204"></a>
-<span class="sourceLineNo">2205</span>    assert compaction != null &amp;&amp; compaction.hasSelection();<a name="line.2205"></a>
-<span class="sourceLineNo">2206</span>    assert !compaction.getRequest().getFiles().isEmpty();<a name="line.2206"></a>
-<span class="sourceLineNo">2207</span>    if (this.closing.get() || this.closed.get()) {<a name="line.2207"></a>
-<span class="sourceLineNo">2208</span>      LOG.debug("Skipping compaction on " + this + " because closing/closed");<a name="line.2208"></a>
-<span class="sourceLineNo">2209</span>      store.cancelRequestedCompaction(compaction);<a name="line.2209"></a>
-<span class="sourceLineNo">2210</span>      return false;<a name="line.2210"></a>
-<span class="sourceLineNo">2211</span>    }<a name="line.2211"></a>
-<span class="sourceLineNo">2212</span><a name="line.2212"></a>
-<span class="sourceLineNo">2213</span>    if (compaction.getRequest().isAllFiles() &amp;&amp; shouldForbidMajorCompaction()) {<a name="line.2213"></a>
-<span class="sourceLineNo">2214</span>      LOG.warn("Skipping major compaction on " + this<a name="line.2214"></a>
-<span class="sourceLineNo">2215</span>          + " because this cluster is transiting sync replication state"<a name="line.2215"></a>
-<span class="sourceLineNo">2216</span>          + " from STANDBY to DOWNGRADE_ACTIVE");<a name="line.2216"></a>
-<span class="sourceLineNo">2217</span>      store.cancelRequestedCompaction(compaction);<a name="line.2217"></a>
-<span class="sourceLineNo">2218</span>      return false;<a name="line.2218"></a>
-<span class="sourceLineNo">2219</span>    }<a name="line.2219"></a>
-<span class="sourceLineNo">2220</span><a name="line.2220"></a>
-<span class="sourceLineNo">2221</span>    MonitoredTask status = null;<a name="line.2221"></a>
-<span class="sourceLineNo">2222</span>    boolean requestNeedsCancellation = true;<a name="line.2222"></a>
-<span class="sourceLineNo">2223</span>    try {<a name="line.2223"></a>
-<span class="sourceLineNo">2224</span>      byte[] cf = Bytes.toBytes(store.getColumnFamilyName());<a name="line.2224"></a>
-<span class="sourceLineNo">2225</span>      if (stores.get(cf) != store) {<a name="line.2225"></a>
-<span class="sourceLineNo">2226</span>        LOG.warn("Store " + store.getColumnFamilyName() + " on region " + this<a name="line.2226"></a>
-<span class="sourceLineNo">2227</span>            + " has been re-instantiated, cancel this compaction request. "<a name="line.2227"></a>
-<span class="sourceLineNo">2228</span>            + " It may be caused by the roll back of split transaction");<a name="line.2228"></a>
-<span class="sourceLineNo">2229</span>        return false;<a name="line.2229"></a>
-<span class="sourceLineNo">2230</span>      }<a name="line.2230"></a>
-<span class="sourceLineNo">2231</span><a name="line.2231"></a>
-<span class="sourceLineNo">2232</span>      status = TaskMonitor.get().createStatus("Compacting " + store + " in " + this);<a name="line.2232"></a>
-<span class="sourceLineNo">2233</span>      status.enableStatusJournal(false);<a name="line.2233"></a>
-<span class="sourceLineNo">2234</span>      if (this.closed.get()) {<a name="line.2234"></a>
-<span class="sourceLineNo">2235</span>        String msg = "Skipping compaction on " + this + " because closed";<a name="line.2235"></a>
-<span class="sourceLineNo">2236</span>        LOG.debug(msg);<a name="line.2236"></a>
-<span class="sourceLineNo">2237</span>        status.abort(msg);<a name="line.2237"></a>
-<span class="sourceLineNo">2238</span>        return false;<a name="line.2238"></a>
-<span class="sourceLineNo">2239</span>      }<a name="line.2239"></a>
-<span class="sourceLineNo">2240</span>      boolean wasStateSet = false;<a name="line.2240"></a>
-<span class="sourceLineNo">2241</span>      try {<a name="line.2241"></a>
-<span class="sourceLineNo">2242</span>        synchronized (writestate) {<a name="line.2242"></a>
-<span class="sourceLineNo">2243</span>          if (writestate.writesEnabled) {<a name="line.2243"></a>
-<span class="sourceLineNo">2244</span>            wasStateSet = true;<a name="line.2244"></a>
-<span class="sourceLineNo">2245</span>            writestate.compacting.incrementAndGet();<a name="line.2245"></a>
-<span class="sourceLineNo">2246</span>          } else {<a name="line.2246"></a>
-<span class="sourceLineNo">2247</span>            String msg = "NOT compacting region " + this + ". Writes disabled.";<a name="line.2247"></a>
-<span class="sourceLineNo">2248</span>            LOG.info(msg);<a name="line.2248"></a>
-<span class="sourceLineNo">2249</span>            status.abort(msg);<a name="line.2249"></a>
-<span class="sourceLineNo">2250</span>            return false;<a name="line.2250"></a>
-<span class="sourceLineNo">2251</span>          }<a name="line.2251"></a>
-<span class="sourceLineNo">2252</span>        }<a name="line.2252"></a>
-<span class="sourceLineNo">2253</span>        LOG.info("Starting compaction of {} in {}{}", store, this,<a name="line.2253"></a>
-<span class="sourceLineNo">2254</span>            (compaction.getRequest().isOffPeak()?" as an off-peak compaction":""));<a name="line.2254"></a>
-<span class="sourceLineNo">2255</span>        doRegionCompactionPrep();<a name="line.2255"></a>
-<span class="sourceLineNo">2256</span>        try {<a name="line.2256"></a>
-<span class="sourceLineNo">2257</span>          status.setStatus("Compacting store " + store);<a name="line.2257"></a>
-<span class="sourceLineNo">2258</span>          // We no longer need to cancel the request on the way out of this<a name="line.2258"></a>
-<span class="sourceLineNo">2259</span>          // method because Store#compact will clean up unconditionally<a name="line.2259"></a>
-<span class="sourceLineNo">2260</span>          requestNeedsCancellation = false;<a name="line.2260"></a>
-<span class="sourceLineNo">2261</span>          store.compact(compaction, throughputController, user);<a name="line.2261"></a>
-<span class="sourceLineNo">2262</span>        } catch (InterruptedIOException iioe) {<a name="line.2262"></a>
-<span class="sourceLineNo">2263</span>          String msg = "compaction interrupted";<a name="line.2263"></a>
-<span class="sourceLineNo">2264</span>          LOG.info(msg, iioe);<a name="line.2264"></a>
-<span class="sourceLineNo">2265</span>          status.abort(msg);<a name="line.2265"></a>
-<span class="sourceLineNo">2266</span>          return false;<a name="line.2266"></a>
-<span class="sourceLineNo">2267</span>        }<a name="line.2267"></a>
-<span class="sourceLineNo">2268</span>      } finally {<a name="line.2268"></a>
-<span class="sourceLineNo">2269</span>        if (wasStateSet) {<a name="line.2269"></a>
-<span class="sourceLineNo">2270</span>          synchronized (writestate) {<a name="line.2270"></a>
-<span class="sourceLineNo">2271</span>            writestate.compacting.decrementAndGet();<a name="line.2271"></a>
-<span class="sourceLineNo">2272</span>            if (writestate.compacting.get() &lt;= 0) {<a name="line.2272"></a>
-<span class="sourceLineNo">2273</span>              writestate.notifyAll();<a name="line.2273"></a>
-<span class="sourceLineNo">2274</span>            }<a name="line.2274"></a>
-<span class="sourceLineNo">2275</span>          }<a name="line.2275"></a>
-<span class="sourceLineNo">2276</span>        }<a name="line.2276"></a>
-<span class="sourceLineNo">2277</span>      }<a name="line.2277"></a>
-<span class="sourceLineNo">2278</span>      status.markComplete("Compaction complete");<a name="line.2278"></a>
-<span class="sourceLineNo">2279</span>      return true;<a name="line.2279"></a>
-<span class="sourceLineNo">2280</span>    } finally {<a name="line.2280"></a>
-<span class="sourceLineNo">2281</span>      if (requestNeedsCancellation) store.cancelRequestedCompaction(compaction);<a name="line.2281"></a>
-<span class="sourceLineNo">2282</span>      if (status != null) {<a name="line.2282"></a>
-<span class="sourceLineNo">2283</span>        LOG.debug("Compaction status journal:\n\t" + status.prettyPrintJournal());<a name="line.2283"></a>
-<span class="sourceLineNo">2284</span>        status.cleanup();<a name="line.2284"></a>
-<span class="sourceLineNo">2285</span>      }<a name="line.2285"></a>
-<span class="sourceLineNo">2286</span>    }<a name="line.2286"></a>
-<span class="sourceLineNo">2287</span>  }<a name="line.2287"></a>
-<span class="sourceLineNo">2288</span><a name="line.2288"></a>
-<span class="sourceLineNo">2289</span>  /**<a name="line.2289"></a>
-<span class="sourceLineNo">2290</span>   * Flush the cache.<a name="line.2290"></a>
-<span class="sourceLineNo">2291</span>   *<a name="line.2291"></a>
-<span class="sourceLineNo">2292</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.2292"></a>
-<span class="sourceLineNo">2293</span>   * &lt;ol&gt;<a name="line.2293"></a>
-<span class="sourceLineNo">2294</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.2294"></a>
-<span class="sourceLineNo">2295</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.2295"></a>
-<span class="sourceLineNo">2296</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.2296"></a>
-<span class="sourceLineNo">2297</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.2297"></a>
-<span class="sourceLineNo">2298</span>   * &lt;/ol&gt;<a name="line.2298"></a>
-<span class="sourceLineNo">2299</span>   *<a name="line.2299"></a>
-<span class="sourceLineNo">2300</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.2300"></a>
-<span class="sourceLineNo">2301</span>   * time-sensitive thread.<a name="line.2301"></a>
-<span class="sourceLineNo">2302</span>   * @param force whether we want to force a flush of all stores<a name="line.2302"></a>
-<span class="sourceLineNo">2303</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.2303"></a>
-<span class="sourceLineNo">2304</span>   * the region needs compacting<a name="line.2304"></a>
-<span class="sourceLineNo">2305</span>   *<a name="line.2305"></a>
-<span class="sourceLineNo">2306</span>   * @throws IOException general io exceptions<a name="line.2306"></a>
-<span class="sourceLineNo">2307</span>   * because a snapshot was not properly persisted.<a name="line.2307"></a>
-<span class="sourceLineNo">2308</span>   */<a name="line.2308"></a>
-<span class="sourceLineNo">2309</span>  // TODO HBASE-18905. We might have to expose a requestFlush API for CPs<a name="line.2309"></a>
-<span class="sourceLineNo">2310</span>  public FlushResult flush(boolean force) throws IOException {<a name="line.2310"></a>
-<span class="sourceLineNo">2311</span>    return flushcache(force, false, FlushLifeCycleTracker.DUMMY);<a name="line.2311"></a>
-<span class="sourceLineNo">2312</span>  }<a name="line.2312"></a>
-<span class="sourceLineNo">2313</span><a name="line.2313"></a>
-<span class="sourceLineNo">2314</span>  public interface FlushResult {<a name="line.2314"></a>
-<span class="sourceLineNo">2315</span>    enum Result {<a name="line.2315"></a>
-<span class="sourceLineNo">2316</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.2316"></a>
-<span class="sourceLineNo">2317</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.2317"></a>
-<span class="sourceLineNo">2318</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.2318"></a>
-<span class="sourceLineNo">2319</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.2319"></a>
-<span class="sourceLineNo">2320</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.2320"></a>
-<span class="sourceLineNo">2321</span>      CANNOT_FLUSH<a name="line.2321"></a>
-<span class="sourceLineNo">2322</span>    }<a name="line.2322"></a>
-<span class="sourceLineNo">2323</span><a name="line.2323"></a>
-<span class="sourceLineNo">2324</span>    /** @return the detailed result code */<a name="line.2324"></a>
-<span class="sourceLineNo">2325</span>    Result getResult();<a name="line.2325"></a>
+<span class="sourceLineNo">2108</span>   * &lt;p&gt;This operation could block for a long time, so don't call it from a<a name="line.2108"></a>
+<span class="sourceLineNo">2109</span>   * time-sensitive thread.<a name="line.2109"></a>
+<span class="sourceLineNo">2110</span>   *<a name="line.2110"></a>
+<span class="sourceLineNo">2111</span>   * Note that no locking is necessary at this level because compaction only<a name="line.2111"></a>
+<span class="sourceLineNo">2112</span>   * conflicts with a region split, and that cannot happen because the region<a name="line.2112"></a>
+<span class="sourceLineNo">2113</span>   * server does them sequentially and not in parallel.<a name="line.2113"></a>
+<span class="sourceLineNo">2114</span>   *<a name="line.2114"></a>
+<span class="sourceLineNo">2115</span>   * @param compaction Compaction details, obtained by requestCompaction()<a name="line.2115"></a>
+<span class="sourceLineNo">2116</span>   * @param throughputController<a name="line.2116"></a>
+<span class="sourceLineNo">2117</span>   * @return whether the compaction completed<a name="line.2117"></a>
+<span class="sourceLineNo">2118</span>   */<a name="line.2118"></a>
+<span class="sourceLineNo">2119</span>  public boolean compact(CompactionContext compaction, HStore store,<a name="line.2119"></a>
+<span class="sourceLineNo">2120</span>      ThroughputController throughputController) throws IOException {<a name="line.2120"></a>
+<span class="sourceLineNo">2121</span>    return compact(compaction, store, throughputController, null);<a name="line.2121"></a>
+<span class="sourceLineNo">2122</span>  }<a name="line.2122"></a>
+<span class="sourceLineNo">2123</span><a name="line.2123"></a>
+<span class="sourceLineNo">2124</span>  private boolean shouldForbidMajorCompaction() {<a name="line.2124"></a>
+<span class="sourceLineNo">2125</span>    if (rsServices != null &amp;&amp; rsServices.getReplicationSourceService() != null) {<a name="line.2125"></a>
+<span class="sourceLineNo">2126</span>      return rsServices.getReplicationSourceService().getSyncReplicationPeerInfoProvider()<a name="line.2126"></a>
+<span class="sourceLineNo">2127</span>          .checkState(getRegionInfo().getTable(), ForbidMajorCompactionChecker.get());<a name="line.2127"></a>
+<span class="sourceLineNo">2128</span>    }<a name="line.2128"></a>
+<span class="sourceLineNo">2129</span>    return false;<a name="line.2129"></a>
+<span class="sourceLineNo">2130</span>  }<a name="line.2130"></a>
+<span class="sourceLineNo">2131</span><a name="line.2131"></a>
+<span class="sourceLineNo">2132</span>  /**<a name="line.2132"></a>
+<span class="sourceLineNo">2133</span>   * We are trying to remove / relax the region read lock for compaction.<a name="line.2133"></a>
+<span class="sourceLineNo">2134</span>   * Let's see what are the potential race conditions among the operations (user scan,<a name="line.2134"></a>
+<span class="sourceLineNo">2135</span>   * region split, region close and region bulk load).<a name="line.2135"></a>
+<span class="sourceLineNo">2136</span>   *<a name="line.2136"></a>
+<span class="sourceLineNo">2137</span>   *  user scan ---&gt; region read lock<a name="line.2137"></a>
+<span class="sourceLineNo">2138</span>   *  region split --&gt; region close first --&gt; region write lock<a name="line.2138"></a>
+<span class="sourceLineNo">2139</span>   *  region close --&gt; region write lock<a name="line.2139"></a>
+<span class="sourceLineNo">2140</span>   *  region bulk load --&gt; region write lock<a name="line.2140"></a>
+<span class="sourceLineNo">2141</span>   *<a name="line.2141"></a>
+<span class="sourceLineNo">2142</span>   * read lock is compatible with read lock. ---&gt; no problem with user scan/read<a name="line.2142"></a>
+<span class="sourceLineNo">2143</span>   * region bulk load does not cause problem for compaction (no consistency problem, store lock<a name="line.2143"></a>
+<span class="sourceLineNo">2144</span>   * will help the store file accounting).<a name="line.2144"></a>
+<span class="sourceLineNo">2145</span>   * They can run almost concurrently at the region level.<a name="line.2145"></a>
+<span class="sourceLineNo">2146</span>   *<a name="line.2146"></a>
+<span class="sourceLineNo">2147</span>   * The only remaining race condition is between the region close and compaction.<a name="line.2147"></a>
+<span class="sourceLineNo">2148</span>   * So we will evaluate, below, how region close intervenes with compaction if compaction does<a name="line.2148"></a>
+<span class="sourceLineNo">2149</span>   * not acquire region read lock.<a name="line.2149"></a>
+<span class="sourceLineNo">2150</span>   *<a name="line.2150"></a>
+<span class="sourceLineNo">2151</span>   * Here are the steps for compaction:<a name="line.2151"></a>
+<span class="sourceLineNo">2152</span>   * 1. obtain list of StoreFile's<a name="line.2152"></a>
+<span class="sourceLineNo">2153</span>   * 2. create StoreFileScanner's based on list from #1<a name="line.2153"></a>
+<span class="sourceLineNo">2154</span>   * 3. perform compaction and save resulting files under tmp dir<a name="line.2154"></a>
+<span class="sourceLineNo">2155</span>   * 4. swap in compacted files<a name="line.2155"></a>
+<span class="sourceLineNo">2156</span>   *<a name="line.2156"></a>
+<span class="sourceLineNo">2157</span>   * #1 is guarded by store lock. This patch does not change this --&gt; no worse or better<a name="line.2157"></a>
+<span class="sourceLineNo">2158</span>   * For #2, we obtain smallest read point (for region) across all the Scanners (for both default<a name="line.2158"></a>
+<span class="sourceLineNo">2159</span>   * compactor and stripe compactor).<a name="line.2159"></a>
+<span class="sourceLineNo">2160</span>   * The read points are for user scans. Region keeps the read points for all currently open<a name="line.2160"></a>
+<span class="sourceLineNo">2161</span>   * user scanners.<a name="line.2161"></a>
+<span class="sourceLineNo">2162</span>   * Compaction needs to know the smallest read point so that during re-write of the hfiles,<a name="line.2162"></a>
+<span class="sourceLineNo">2163</span>   * it can remove the mvcc points for the cells if their mvccs are older than the smallest<a name="line.2163"></a>
+<span class="sourceLineNo">2164</span>   * since they are not needed anymore.<a name="line.2164"></a>
+<span class="sourceLineNo">2165</span>   * This will not conflict with compaction.<a name="line.2165"></a>
+<span class="sourceLineNo">2166</span>   * For #3, it can be performed in parallel to other operations.<a name="line.2166"></a>
+<span class="sourceLineNo">2167</span>   * For #4 bulk load and compaction don't conflict with each other on the region level<a name="line.2167"></a>
+<span class="sourceLineNo">2168</span>   *   (for multi-family atomicy).<a name="line.2168"></a>
+<span class="sourceLineNo">2169</span>   * Region close and compaction are guarded pretty well by the 'writestate'.<a name="line.2169"></a>
+<span class="sourceLineNo">2170</span>   * In HRegion#doClose(), we have :<a name="line.2170"></a>
+<span class="sourceLineNo">2171</span>   * synchronized (writestate) {<a name="line.2171"></a>
+<span class="sourceLineNo">2172</span>   *   // Disable compacting and flushing by background threads for this<a name="line.2172"></a>
+<span class="sourceLineNo">2173</span>   *   // region.<a name="line.2173"></a>
+<span class="sourceLineNo">2174</span>   *   canFlush = !writestate.readOnly;<a name="line.2174"></a>
+<span class="sourceLineNo">2175</span>   *   writestate.writesEnabled = false;<a name="line.2175"></a>
+<span class="sourceLineNo">2176</span>   *   LOG.debug("Closing " + this + ": disabling compactions &amp; flushes");<a name="line.2176"></a>
+<span class="sourceLineNo">2177</span>   *   waitForFlushesAndCompactions();<a name="line.2177"></a>
+<span class="sourceLineNo">2178</span>   * }<a name="line.2178"></a>
+<span class="sourceLineNo">2179</span>   * waitForFlushesAndCompactions() would wait for writestate.compacting to come down to 0.<a name="line.2179"></a>
+<span class="sourceLineNo">2180</span>   * and in HRegion.compact()<a name="line.2180"></a>
+<span class="sourceLineNo">2181</span>   *  try {<a name="line.2181"></a>
+<span class="sourceLineNo">2182</span>   *    synchronized (writestate) {<a name="line.2182"></a>
+<span class="sourceLineNo">2183</span>   *    if (writestate.writesEnabled) {<a name="line.2183"></a>
+<span class="sourceLineNo">2184</span>   *      wasStateSet = true;<a name="line.2184"></a>
+<span class="sourceLineNo">2185</span>   *      ++writestate.compacting;<a name="line.2185"></a>
+<span class="sourceLineNo">2186</span>   *    } else {<a name="line.2186"></a>
+<span class="sourceLineNo">2187</span>   *      String msg = "NOT compacting region " + this + ". Writes disabled.";<a name="line.2187"></a>
+<span class="sourceLineNo">2188</span>   *      LOG.info(msg);<a name="line.2188"></a>
+<span class="sourceLineNo">2189</span>   *      status.abort(msg);<a name="line.2189"></a>
+<span class="sourceLineNo">2190</span>   *      return false;<a name="line.2190"></a>
+<span class="sourceLineNo">2191</span>   *    }<a name="line.2191"></a>
+<span class="sourceLineNo">2192</span>   *  }<a name="line.2192"></a>
+<span class="sourceLineNo">2193</span>   * Also in compactor.performCompaction():<a name="line.2193"></a>
+<span class="sourceLineNo">2194</span>   * check periodically to see if a system stop is requested<a name="line.2194"></a>
+<span class="sourceLineNo">2195</span>   * if (closeCheckInterval &gt; 0) {<a name="line.2195"></a>
+<span class="sourceLineNo">2196</span>   *   bytesWritten += len;<a name="line.2196"></a>
+<span class="sourceLineNo">2197</span>   *   if (bytesWritten &gt; closeCheckInterval) {<a name="line.2197"></a>
+<span class="sourceLineNo">2198</span>   *     bytesWritten = 0;<a name="line.2198"></a>
+<span class="sourceLineNo">2199</span>   *     if (!store.areWritesEnabled()) {<a name="line.2199"></a>
+<span class="sourceLineNo">2200</span>   *       progress.cancel();<a name="line.2200"></a>
+<span class="sourceLineNo">2201</span>   *       return false;<a name="line.2201"></a>
+<span class="sourceLineNo">2202</span>   *     }<a name="line.2202"></a>
+<span class="sourceLineNo">2203</span>   *   }<a name="line.2203"></a>
+<span class="sourceLineNo">2204</span>   * }<a name="line.2204"></a>
+<span class="sourceLineNo">2205</span>   */<a name="line.2205"></a>
+<span class="sourceLineNo">2206</span>  public boolean compact(CompactionContext compaction, HStore store,<a name="line.2206"></a>
+<span class="sourceLineNo">2207</span>      ThroughputController throughputController, User user) throws IOException {<a name="line.2207"></a>
+<span class="sourceLineNo">2208</span>    assert compaction != null &amp;&amp; compaction.hasSelection();<a name="line.2208"></a>
+<span class="sourceLineNo">2209</span>    assert !compaction.getRequest().getFiles().isEmpty();<a name="line.2209"></a>
+<span class="sourceLineNo">2210</span>    if (this.closing.get() || this.closed.get()) {<a name="line.2210"></a>
+<span class="sourceLineNo">2211</span>      LOG.debug("Skipping compaction on " + this + " because closing/closed");<a name="line.2211"></a>
+<span class="sourceLineNo">2212</span>      store.cancelRequestedCompaction(compaction);<a name="line.2212"></a>
+<span class="sourceLineNo">2213</span>      return false;<a name="line.2213"></a>
+<span class="sourceLineNo">2214</span>    }<a name="line.2214"></a>
+<span class="sourceLineNo">2215</span><a name="line.2215"></a>
+<span class="sourceLineNo">2216</span>    if (compaction.getRequest().isAllFiles() &amp;&amp; shouldForbidMajorCompaction()) {<a name="line.2216"></a>
+<span class="sourceLineNo">2217</span>      LOG.warn("Skipping major compaction on " + this<a name="line.2217"></a>
+<span class="sourceLineNo">2218</span>          + " because this cluster is transiting sync replication state"<a name="line.2218"></a>
+<span class="sourceLineNo">2219</span>          + " from STANDBY to DOWNGRADE_ACTIVE");<a name="line.2219"></a>
+<span class="sourceLineNo">2220</span>      store.cancelRequestedCompaction(compaction);<a name="line.2220"></a>
+<span class="sourceLineNo">2221</span>      return false;<a name="line.2221"></a>
+<span class="sourceLineNo">2222</span>    }<a name="line.2222"></a>
+<span class="sourceLineNo">2223</span><a name="line.2223"></a>
+<span class="sourceLineNo">2224</span>    MonitoredTask status = null;<a name="line.2224"></a>
+<span class="sourceLineNo">2225</span>    boolean requestNeedsCancellation = true;<a name="line.2225"></a>
+<span class="sourceLineNo">2226</span>    try {<a name="line.2226"></a>
+<span class="sourceLineNo">2227</span>      byte[] cf = Bytes.toBytes(store.getColumnFamilyName());<a name="line.2227"></a>
+<span class="sourceLineNo">2228</span>      if (stores.get(cf) != store) {<a name="line.2228"></a>
+<span class="sourceLineNo">2229</span>        LOG.warn("Store " + store.getColumnFamilyName() + " on region " + this<a name="line.2229"></a>
+<span class="sourceLineNo">2230</span>            + " has been re-instantiated, cancel this compaction request. "<a name="line.2230"></a>
+<span class="sourceLineNo">2231</span>            + " It may be caused by the roll back of split transaction");<a name="line.2231"></a>
+<span class="sourceLineNo">2232</span>        return false;<a name="line.2232"></a>
+<span class="sourceLineNo">2233</span>      }<a name="line.2233"></a>
+<span class="sourceLineNo">2234</span><a name="line.2234"></a>
+<span class="sourceLineNo">2235</span>      status = TaskMonitor.get().createStatus("Compacting " + store + " in " + this);<a name="line.2235"></a>
+<span class="sourceLineNo">2236</span>      status.enableStatusJournal(false);<a name="line.2236"></a>
+<span class="sourceLineNo">2237</span>      if (this.closed.get()) {<a name="line.2237"></a>
+<span class="sourceLineNo">2238</span>        String msg = "Skipping compaction on " + this + " because closed";<a name="line.2238"></a>
+<span class="sourceLineNo">2239</span>        LOG.debug(msg);<a name="line.2239"></a>
+<span class="sourceLineNo">2240</span>        status.abort(msg);<a name="line.2240"></a>
+<span class="sourceLineNo">2241</span>        return false;<a name="line.2241"></a>
+<span class="sourceLineNo">2242</span>      }<a name="line.2242"></a>
+<span class="sourceLineNo">2243</span>      boolean wasStateSet = false;<a name="line.2243"></a>
+<span class="sourceLineNo">2244</span>      try {<a name="line.2244"></a>
+<span class="sourceLineNo">2245</span>        synchronized (writestate) {<a name="line.2245"></a>
+<span class="sourceLineNo">2246</span>          if (writestate.writesEnabled) {<a name="line.2246"></a>
+<span class="sourceLineNo">2247</span>            wasStateSet = true;<a name="line.2247"></a>
+<span class="sourceLineNo">2248</span>            writestate.compacting.incrementAndGet();<a name="line.2248"></a>
+<span class="sourceLineNo">2249</span>          } else {<a name="line.2249"></a>
+<span class="sourceLineNo">2250</span>            String msg = "NOT compacting region " + this + ". Writes disabled.";<a name="line.2250"></a>
+<span class="sourceLineNo">2251</span>            LOG.info(msg);<a name="line.2251"></a>
+<span class="sourceLineNo">2252</span>            status.abort(msg);<a name="line.2252"></a>
+<span class="sourceLineNo">2253</span>            return false;<a name="line.2253"></a>
+<span class="sourceLineNo">2254</span>          }<a name="line.2254"></a>
+<span class="sourceLineNo">2255</span>        }<a name="line.2255"></a>
+<span class="sourceLineNo">2256</span>        LOG.info("Starting compaction of {} in {}{}", store, this,<a name="line.2256"></a>
+<span class="sourceLineNo">2257</span>            (compaction.getRequest().isOffPeak()?" as an off-peak compaction":""));<a name="line.2257"></a>
+<span class="sourceLineNo">2258</span>        doRegionCompactionPrep();<a name="line.2258"></a>
+<span class="sourceLineNo">2259</span>        try {<a name="line.2259"></a>
+<span class="sourceLineNo">2260</span>          status.setStatus("Compacting store " + store);<a name="line.2260"></a>
+<span class="sourceLineNo">2261</span>          // We no longer need to cancel the request on the way out of this<a name="line.2261"></a>
+<span class="sourceLineNo">2262</span>          // method because Store#compact will clean up unconditionally<a name="line.2262"></a>
+<span class="sourceLineNo">2263</span>          requestNeedsCancellation = false;<a name="line.2263"></a>
+<span class="sourceLineNo">2264</span>          store.compact(compaction, throughputController, user);<a name="line.2264"></a>
+<span class="sourceLineNo">2265</span>        } catch (InterruptedIOException iioe) {<a name="line.2265"></a>
+<span class="sourceLineNo">2266</span>          String msg = "compaction interrupted";<a name="line.2266"></a>
+<span class="sourceLineNo">2267</span>          LOG.info(msg, iioe);<a name="line.2267"></a>
+<span class="sourceLineNo">2268</span>          status.abort(msg);<a name="line.2268"></a>
+<span class="sourceLineNo">2269</span>          return false;<a name="line.2269"></a>
+<span class="sourceLineNo">2270</span>        }<a name="line.2270"></a>
+<span class="sourceLineNo">2271</span>      } finally {<a name="line.2271"></a>
+<span class="sourceLineNo">2272</span>        if (wasStateSet) {<a name="line.2272"></a>
+<span class="sourceLineNo">2273</span>          synchronized (writestate) {<a name="line.2273"></a>
+<span class="sourceLineNo">2274</span>            writestate.compacting.decrementAndGet();<a name="line.2274"></a>
+<span class="sourceLineNo">2275</span>            if (writestate.compacting.get() &lt;= 0) {<a name="line.2275"></a>
+<span class="sourceLineNo">2276</span>              writestate.notifyAll();<a name="line.2276"></a>
+<span class="sourceLineNo">2277</span>            }<a name="line.2277"></a>
+<span class="sourceLineNo">2278</span>          }<a name="line.2278"></a>
+<span class="sourceLineNo">2279</span>        }<a name="line.2279"></a>
+<span class="sourceLineNo">2280</span>      }<a name="line.2280"></a>
+<span class="sourceLineNo">2281</span>      status.markComplete("Compaction complete");<a name="line.2281"></a>
+<span class="sourceLineNo">2282</span>      return true;<a name="line.2282"></a>
+<span class="sourceLineNo">2283</span>    } finally {<a name="line.2283"></a>
+<span class="sourceLineNo">2284</span>      if (requestNeedsCancellation) store.cancelRequestedCompaction(compaction);<a name="line.2284"></a>
+<span class="sourceLineNo">2285</span>      if (status != null) {<a name="line.2285"></a>
+<span class="sourceLineNo">2286</span>        LOG.debug("Compaction status journal:\n\t" + status.prettyPrintJournal());<a name="line.2286"></a>
+<span class="sourceLineNo">2287</span>        status.cleanup();<a name="line.2287"></a>
+<span class="sourceLineNo">2288</span>      }<a name="line.2288"></a>
+<span class="sourceLineNo">2289</span>    }<a name="line.2289"></a>
+<span class="sourceLineNo">2290</span>  }<a name="line.2290"></a>
+<span class="sourceLineNo">2291</span><a name="line.2291"></a>
+<span class="sourceLineNo">2292</span>  /**<a name="line.2292"></a>
+<span class="sourceLineNo">2293</span>   * Flush the cache.<a name="line.2293"></a>
+<span class="sourceLineNo">2294</span>   *<a name="line.2294"></a>
+<span class="sourceLineNo">2295</span>   * &lt;p&gt;When this method is called the cache will be flushed unless:<a name="line.2295"></a>
+<span class="sourceLineNo">2296</span>   * &lt;ol&gt;<a name="line.2296"></a>
+<span class="sourceLineNo">2297</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.2297"></a>
+<span class="sourceLineNo">2298</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.2298"></a>
+<span class="sourceLineNo">2299</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.2299"></a>
+<span class="sourceLineNo">2300</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.2300"></a>
+<span class="sourceLineNo">2301</span>   * &lt;/ol&gt;<a name="line.2301"></a>
+<span class="sourceLineNo">2302</span>   *<a name="line.2302"></a>
+<span class="sourceLineNo">2303</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.2303"></a>
+<span class="sourceLineNo">2304</span>   * time-sensitive thread.<a name="line.2304"></a>
+<span class="sourceLineNo">2305</span>   * @param force whether we want to force a flush of all stores<a name="line.2305"></a>
+<span class="sourceLineNo">2306</span>   * @return FlushResult indicating whether the flush was successful or not and if<a name="line.2306"></a>
+<span class="sourceLineNo">2307</span>   * the region needs compacting<a name="line.2307"></a>
+<span class="sourceLineNo">2308</span>   *<a name="line.2308"></a>
+<span class="sourceLineNo">2309</span>   * @throws IOException general io exceptions<a name="line.2309"></a>
+<span class="sourceLineNo">2310</span>   * because a snapshot was not properly persisted.<a name="line.2310"></a>
+<span class="sourceLineNo">2311</span>   */<a name="line.2311"></a>
+<span class="sourceLineNo">2312</span>  // TODO HBASE-18905. We might have to expose a requestFlush API for CPs<a name="line.2312"></a>
+<span class="sourceLineNo">2313</span>  public FlushResult flush(boolean force) throws IOException {<a name="line.2313"></a>
+<span class="sourceLineNo">2314</span>    return flushcache(force, false, FlushLifeCycleTracker.DUMMY);<a name="line.2314"></a>
+<span class="sourceLineNo">2315</span>  }<a name="line.2315"></a>
+<span class="sourceLineNo">2316</span><a name="line.2316"></a>
+<span class="sourceLineNo">2317</span>  public interface FlushResult {<a name="line.2317"></a>
+<span class="sourceLineNo">2318</span>    enum Result {<a name="line.2318"></a>
+<span class="sourceLineNo">2319</span>      FLUSHED_NO_COMPACTION_NEEDED,<a name="line.2319"></a>
+<span class="sourceLineNo">2320</span>      FLUSHED_COMPACTION_NEEDED,<a name="line.2320"></a>
+<span class="sourceLineNo">2321</span>      // Special case where a flush didn't run because there's nothing in the memstores. Used when<a name="line.2321"></a>
+<span class="sourceLineNo">2322</span>      // bulk loading to know when we can still load even if a flush didn't happen.<a name="line.2322"></a>
+<span class="sourceLineNo">2323</span>      CANNOT_FLUSH_MEMSTORE_EMPTY,<a name="line.2323"></a>
+<span class="sourceLineNo">2324</span>      CANNOT_FLUSH<a name="line.2324"></a>
+<span class="sourceLineNo">2325</span>    }<a name="line.2325"></a>
 <span class="sourceLineNo">2326</span><a name="line.2326"></a>
-<span class="sourceLineNo">2327</span>    /** @return true if the memstores were flushed, else false */<a name="line.2327"></a>
-<span class="sourceLineNo">2328</span>    boolean isFlushSucceeded();<a name="line.2328"></a>
+<span class="sourceLineNo">2327</span>    /** @return the detailed result code */<a name="line.2327"></a>
+<span class="sourceLineNo">2328</span>    Result getResult();<a name="line.2328"></a>
 <span class="sourceLineNo">2329</span><a name="line.2329"></a>
-<span class="sourceLineNo">2330</span>    /** @return True if the flush requested a compaction, else false */<a name="line.2330"></a>
-<span class="sourceLineNo">2331</span>    boolean isCompactionNeeded();<a name="line.2331"></a>
-<span class="sourceLineNo">2332</span>  }<a name="line.2332"></a>
-<span class="sourceLineNo">2333</span><a name="line.2333"></a>
-<span class="sourceLineNo">2334</span>  /**<a name="line.2334"></a>
-<span class="sourceLineNo">2335</span>   * Flush the cache.<a name="line.2335"></a>
-<span class="sourceLineNo">2336</span>   *<a name="line.2336"></a>
-<span class="sourceLineNo">2337</span>   * When this method is called the cache will be flushed unless:<a name="line.2337"></a>
-<span class="sourceLineNo">2338</span>   * &lt;ol&gt;<a name="line.2338"></a>
-<span class="sourceLineNo">2339</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.2339"></a>
-<span class="sourceLineNo">2340</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.2340"></a>
-<span class="sourceLineNo">2341</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.2341"></a>
-<span class="sourceLineNo">2342</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.2342"></a>
-<span class="sourceLineNo">2343</span>   * &lt;/ol&gt;<a name="line.2343"></a>
-<span class="sourceLineNo">2344</span>   *<a name="line.2344"></a>
-<span class="sourceLineNo">2345</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.2345"></a>
-<span class="sourceLineNo">2346</span>   * time-sensitive thread.<a name="line.2346"></a>
-<span class="sourceLineNo">2347</span>   * @param forceFlushAllStores whether we want to flush all stores<a name="line.2347"></a>
-<span class="sourceLineNo">2348</span>   * @param writeFlushRequestWalMarker whether to write the flush request marker to WAL<a name="line.2348"></a>
-<span class="sourceLineNo">2349</span>   * @param tracker used to track the life cycle of this flush<a name="line.2349"></a>
-<span class="sourceLineNo">2350</span>   * @return whether the flush is success and whether the region needs compacting<a name="line.2350"></a>
-<span class="sourceLineNo">2351</span>   *<a name="line.2351"></a>
-<span class="sourceLineNo">2352</span>   * @throws IOException general io exceptions<a name="line.2352"></a>
-<span class="sourceLineNo">2353</span>   * @throws DroppedSnapshotException Thrown when replay of wal is required<a name="line.2353"></a>
-<span class="sourceLineNo">2354</span>   * because a Snapshot was not properly persisted. The region is put in closing mode, and the<a name="line.2354"></a>
-<span class="sourceLineNo">2355</span>   * caller MUST abort after this.<a name="line.2355"></a>
-<span class="sourceLineNo">2356</span>   */<a name="line.2356"></a>
-<span class="sourceLineNo">2357</span>  public FlushResultImpl flushcache(boolean forceFlushAllStores, boolean writeFlushRequestWalMarker,<a name="line.2357"></a>
-<span class="sourceLineNo">2358</span>      FlushLifeCycleTracker tracker) throws IOException {<a name="line.2358"></a>
-<span class="sourceLineNo">2359</span>    // fail-fast instead of waiting on the lock<a name="line.2359"></a>
-<span class="sourceLineNo">2360</span>    if (this.closing.get()) {<a name="line.2360"></a>
-<span class="sourceLineNo">2361</span>      String msg = "Skipping flush on " + this + " because closing";<a name="line.2361"></a>
-<span class="sourceLineNo">2362</span>      LOG.debug(msg);<a name="line.2362"></a>
-<span class="sourceLineNo">2363</span>      return new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false);<a name="line.2363"></a>
-<span class="sourceLineNo">2364</span>    }<a name="line.2364"></a>
-<span class="sourceLineNo">2365</span>    MonitoredTask status = TaskMonitor.get().createStatus("Flushing " + this);<a name="line.2365"></a>
-<span class="sourceLineNo">2366</span>    status.enableStatusJournal(false);<a name="line.2366"></a>
-<span class="sourceLineNo">2367</span>    status.setStatus("Acquiring readlock on region");<a name="line.2367"></a>
-<span class="sourceLineNo">2368</span>    // block waiting for the lock for flushing cache<a name="line.2368"></a>
-<span class="sourceLineNo">2369</span>    lock.readLock().lock();<a name="line.2369"></a>
-<span class="sourceLineNo">2370</span>    try {<a name="line.2370"></a>
-<span class="sourceLineNo">2371</span>      if (this.closed.get()) {<a name="line.2371"></a>
-<span class="sourceLineNo">2372</span>        String msg = "Skipping flush on " + this + " because closed";<a name="line.2372"></a>
-<span class="sourceLineNo">2373</span>        LOG.debug(msg);<a name="line.2373"></a>
-<span class="sourceLineNo">2374</span>        status.abort(msg);<a name="line.2374"></a>
-<span class="sourceLineNo">2375</span>        return new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false);<a name="line.2375"></a>
-<span class="sourceLineNo">2376</span>      }<a name="line.2376"></a>
-<span class="sourceLineNo">2377</span>      if (coprocessorHost != null) {<a name="line.2377"></a>
-<span class="sourceLineNo">2378</span>        status.setStatus("Running coprocessor pre-flush hooks");<a name="line.2378"></a>
-<span class="sourceLineNo">2379</span>        coprocessorHost.preFlush(tracker);<a name="line.2379"></a>
-<span class="sourceLineNo">2380</span>      }<a name="line.2380"></a>
-<span class="sourceLineNo">2381</span>      // TODO: this should be managed within memstore with the snapshot, updated only after flush<a name="line.2381"></a>
-<span class="sourceLineNo">2382</span>      // successful<a name="line.2382"></a>
-<span class="sourceLineNo">2383</span>      if (numMutationsWithoutWAL.sum() &gt; 0) {<a name="line.2383"></a>
-<span class="sourceLineNo">2384</span>        numMutationsWithoutWAL.reset();<a name="line.2384"></a>
-<span class="sourceLineNo">2385</span>        dataInMemoryWithoutWAL.reset();<a name="line.2385"></a>
-<span class="sourceLineNo">2386</span>      }<a name="line.2386"></a>
-<span class="sourceLineNo">2387</span>      synchronized (writestate) {<a name="line.2387"></a>
-<span class="sourceLineNo">2388</span>        if (!writestate.flushing &amp;&amp; writestate.writesEnabled) {<a name="line.2388"></a>
-<span class="sourceLineNo">2389</span>          this.writestate.flushing = true;<a name="line.2389"></a>
-<span class="sourceLineNo">2390</span>        } else {<a name="line.2390"></a>
-<span class="sourceLineNo">2391</span>          if (LOG.isDebugEnabled()) {<a name="line.2391"></a>
-<span class="sourceLineNo">2392</span>            LOG.debug("NOT flushing memstore for region " + this<a name="line.2392"></a>
-<span class="sourceLineNo">2393</span>                + ", flushing=" + writestate.flushing + ", writesEnabled="<a name="line.2393"></a>
-<span class="sourceLineNo">2394</span>                + writestate.writesEnabled);<a name="line.2394"></a>
-<span class="sourceLineNo">2395</span>          }<a name="line.2395"></a>
-<span class="sourceLineNo">2396</span>          String msg = "Not flushing since "<a name="line.2396"></a>
-<span class="sourceLineNo">2397</span>              + (writestate.flushing ? "already flushing"<a name="line.2397"></a>
-<span class="sourceLineNo">2398</span>              : "writes not enabled");<a name="line.2398"></a>
-<span class="sourceLineNo">2399</span>          status.abort(msg);<a name="line.2399"></a>
-<span class="sourceLineNo">2400</span>          return new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false);<a name="line.2400"></a>
-<span class="sourceLineNo">2401</span>        }<a name="line.2401"></a>
-<span class="sourceLineNo">2402</span>      }<a name="line.2402"></a>
-<span class="sourceLineNo">2403</span><a name="line.2403"></a>
-<span class="sourceLineNo">2404</span>      try {<a name="line.2404"></a>
-<span class="sourceLineNo">2405</span>        Collection&lt;HStore&gt; specificStoresToFlush =<a name="line.2405"></a>
-<span class="sourceLineNo">2406</span>            forceFlushAllStores ? stores.values() : flushPolicy.selectStoresToFlush();<a name="line.2406"></a>
-<span class="sourceLineNo">2407</span>        FlushResultImpl fs =<a name="line.2407"></a>
-<span class="sourceLineNo">2408</span>            internalFlushcache(specificStoresToFlush, status, writeFlushRequestWalMarker, tracker);<a name="line.2408"></a>
-<span class="sourceLineNo">2409</span><a name="line.2409"></a>
-<span class="sourceLineNo">2410</span>        if (coprocessorHost != null) {<a name="line.2410"></a>
-<span class="sourceLineNo">2411</span>          status.setStatus("Running post-flush coprocessor hooks");<a name="line.2411"></a>
-<span class="sourceLineNo">2412</span>          coprocessorHost.postFlush(tracker);<a name="line.2412"></a>
-<span class="sourceLineNo">2413</span>        }<a name="line.2413"></a>
-<span class="sourceLineNo">2414</span><a name="line.2414"></a>
-<span class="sourceLineNo">2415</span>        if(fs.isFlushSucceeded()) {<a name="line.2415"></a>
-<span class="sourceLineNo">2416</span>          flushesQueued.reset();<a name="line.2416"></a>
-<span class="sourceLineNo">2417</span>        }<a name="line.2417"></a>
-<span class="sourceLineNo">2418</span><a name="line.2418"></a>
-<span class="sourceLineNo">2419</span>        status.markComplete("Flush successful");<a name="line.2419"></a>
-<span class="sourceLineNo">2420</span>        return fs;<a name="line.2420"></a>
-<span class="sourceLineNo">2421</span>      } finally {<a name="line.2421"></a>
-<span class="sourceLineNo">2422</span>        synchronized (writestate) {<a name="line.2422"></a>
-<span class="sourceLineNo">2423</span>          writestate.flushing = false;<a name="line.2423"></a>
-<span class="sourceLineNo">2424</span>          this.writestate.flushRequested = false;<a name="line.2424"></a>
-<span class="sourceLineNo">2425</span>          writestate.notifyAll();<a name="line.2425"></a>
-<span class="sourceLineNo">2426</span>        }<a name="line.2426"></a>
-<span class="sourceLineNo">2427</span>      }<a name="line.2427"></a>
-<span class="sourceLineNo">2428</span>    } finally {<a name="line.2428"></a>
-<span class="sourceLineNo">2429</span>      lock.readLock().unlock();<a name="line.2429"></a>
-<span class="sourceLineNo">2430</span>      LOG.debug("Flush status journal:\n\t" + status.prettyPrintJournal());<a name="line.2430"></a>
-<span class="sourceLineNo">2431</span>      status.cleanup();<a name="line.2431"></a>
-<span class="sourceLineNo">2432</span>    }<a name="line.2432"></a>
-<span class="sourceLineNo">2433</span>  }<a name="line.2433"></a>
-<span class="sourceLineNo">2434</span><a name="line.2434"></a>
-<span class="sourceLineNo">2435</span>  /**<a name="line.2435"></a>
-<span class="sourceLineNo">2436</span>   * Should the store be flushed because it is old enough.<a name="line.2436"></a>
-<span class="sourceLineNo">2437</span>   * &lt;p&gt;<a name="line.2437"></a>
-<span class="sourceLineNo">2438</span>   * Every FlushPolicy should call this to determine whether a store is old enough to flush (except<a name="line.2438"></a>
-<span class="sourceLineNo">2439</span>   * that you always flush all stores). Otherwise the method will always<a name="line.2439"></a>
-<span class="sourceLineNo">2440</span>   * returns true which will make a lot of flush requests.<a name="line.2440"></a>
-<span class="sourceLineNo">2441</span>   */<a name="line.2441"></a>
-<span class="sourceLineNo">2442</span>  boolean shouldFlushStore(HStore store) {<a name="line.2442"></a>
-<span class="sourceLineNo">2443</span>    long earliest = this.wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(),<a name="line.2443"></a>
-<span class="sourceLineNo">2444</span>      store.getColumnFamilyDescriptor().getName()) - 1;<a name="line.2444"></a>
-<span class="sourceLineNo">2445</span>    if (earliest &gt; 0 &amp;&amp; earliest + flushPerChanges &lt; mvcc.getReadPoint()) {<a name="line.2445"></a>
-<span class="sourceLineNo">2446</span>      if (LOG.isDebugEnabled()) {<a name="line.2446"></a>
-<span class="sourceLineNo">2447</span>        LOG.debug("Flush column family " + store.getColumnFamilyName() + " of " +<a name="line.2447"></a>
-<span class="sourceLineNo">2448</span>          getRegionInfo().getEncodedName() + " because unflushed sequenceid=" + earliest +<a name="line.2448"></a>
-<span class="sourceLineNo">2449</span>          " is &gt; " + this.flushPerChanges + " from current=" + mvcc.getReadPoint());<a name="line.2449"></a>
-<span class="sourceLineNo">2450</span>      }<a name="line.2450"></a>
-<span class="sourceLineNo">2451</span>      return true;<a name="line.2451"></a>
-<span class="sourceLineNo">2452</span>    }<a name="line.2452"></a>
-<span class="sourceLineNo">2453</span>    if (this.flushCheckInterval &lt;= 0) {<a name="line.2453"></a>
-<span class="sourceLineNo">2454</span>      return false;<a name="line.2454"></a>
+<span class="sourceLineNo">2330</span>    /** @return true if the memstores were flushed, else false */<a name="line.2330"></a>
+<span class="sourceLineNo">2331</span>    boolean isFlushSucceeded();<a name="line.2331"></a>
+<span class="sourceLineNo">2332</span><a name="line.2332"></a>
+<span class="sourceLineNo">2333</span>    /** @return True if the flush requested a compaction, else false */<a name="line.2333"></a>
+<span class="sourceLineNo">2334</span>    boolean isCompactionNeeded();<a name="line.2334"></a>
+<span class="sourceLineNo">2335</span>  }<a name="line.2335"></a>
+<span class="sourceLineNo">2336</span><a name="line.2336"></a>
+<span class="sourceLineNo">2337</span>  /**<a name="line.2337"></a>
+<span class="sourceLineNo">2338</span>   * Flush the cache.<a name="line.2338"></a>
+<span class="sourceLineNo">2339</span>   *<a name="line.2339"></a>
+<span class="sourceLineNo">2340</span>   * When this method is called the cache will be flushed unless:<a name="line.2340"></a>
+<span class="sourceLineNo">2341</span>   * &lt;ol&gt;<a name="line.2341"></a>
+<span class="sourceLineNo">2342</span>   *   &lt;li&gt;the cache is empty&lt;/li&gt;<a name="line.2342"></a>
+<span class="sourceLineNo">2343</span>   *   &lt;li&gt;the region is closed.&lt;/li&gt;<a name="line.2343"></a>
+<span class="sourceLineNo">2344</span>   *   &lt;li&gt;a flush is already in progress&lt;/li&gt;<a name="line.2344"></a>
+<span class="sourceLineNo">2345</span>   *   &lt;li&gt;writes are disabled&lt;/li&gt;<a name="line.2345"></a>
+<span class="sourceLineNo">2346</span>   * &lt;/ol&gt;<a name="line.2346"></a>
+<span class="sourceLineNo">2347</span>   *<a name="line.2347"></a>
+<span class="sourceLineNo">2348</span>   * &lt;p&gt;This method may block for some time, so it should not be called from a<a name="line.2348"></a>
+<span class="sourceLineNo">2349</span>   * time-sensitive thread.<a name="line.2349"></a>
+<span class="sourceLineNo">2350</span>   * @param forceFlushAllStores whether we want to flush all stores<a name="line.2350"></a>
+<span class="sourceLineNo">2351</span>   * @param writeFlushRequestWalMarker whether to write the flush request marker to WAL<a name="line.2351"></a>
+<span class="sourceLineNo">2352</span>   * @param tracker used to track the life cycle of this flush<a name="line.2352"></a>
+<span class="sourceLineNo">2353</span>   * @return whether the flush is success and whether the region needs compacting<a name="line.2353"></a>
+<span class="sourceLineNo">2354</span>   *<a name="line.2354"></a>
+<span class="sourceLineNo">2355</span>   * @throws IOException general io exceptions<a name="line.2355"></a>
+<span class="sourceLineNo">2356</span>   * @throws DroppedSnapshotException Thrown when replay of wal is required<a name="line.2356"></a>
+<span class="sourceLineNo">2357</span>   * because a Snapshot was not properly persisted. The region is put in closing mode, and the<a name="line.2357"></a>
+<span class="sourceLineNo">2358</span>   * caller MUST abort after this.<a name="line.2358"></a>
+<span class="sourceLineNo">2359</span>   */<a name="line.2359"></a>
+<span class="sourceLineNo">2360</span>  public FlushResultImpl flushcache(boolean forceFlushAllStores, boolean writeFlushRequestWalMarker,<a name="line.2360"></a>
+<span class="sourceLineNo">2361</span>      FlushLifeCycleTracker tracker) throws IOException {<a name="line.2361"></a>
+<span class="sourceLineNo">2362</span>    // fail-fast instead of waiting on the lock<a name="line.2362"></a>
+<span class="sourceLineNo">2363</span>    if (this.closing.get()) {<a name="line.2363"></a>
+<span class="sourceLineNo">2364</span>      String msg = "Skipping flush on " + this + " because closing";<a name="line.2364"></a>
+<span class="sourceLineNo">2365</span>      LOG.debug(msg);<a name="line.2365"></a>
+<span class="sourceLineNo">2366</span>      return new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false);<a name="line.2366"></a>
+<span class="sourceLineNo">2367</span>    }<a name="line.2367"></a>
+<span class="sourceLineNo">2368</span>    MonitoredTask status = TaskMonitor.get().createStatus("Flushing " + this);<a name="line.2368"></a>
+<span class="sourceLineNo">2369</span>    status.enableStatusJournal(false);<a name="line.2369"></a>
+<span class="sourceLineNo">2370</span>    status.setStatus("Acquiring readlock on region");<a name="line.2370"></a>
+<span class="sourceLineNo">2371</span>    // block waiting for the lock for flushing cache<a name="line.2371"></a>
+<span class="sourceLineNo">2372</span>    lock.readLock().lock();<a name="line.2372"></a>
+<span class="sourceLineNo">2373</span>    try {<a name="line.2373"></a>
+<span class="sourceLineNo">2374</span>      if (this.closed.get()) {<a name="line.2374"></a>
+<span class="sourceLineNo">2375</span>        String msg = "Skipping flush on " + this + " because closed";<a name="line.2375"></a>
+<span class="sourceLineNo">2376</span>        LOG.debug(msg);<a name="line.2376"></a>
+<span class="sourceLineNo">2377</span>        status.abort(msg);<a name="line.2377"></a>
+<span class="sourceLineNo">2378</span>        return new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false);<a name="line.2378"></a>
+<span class="sourceLineNo">2379</span>      }<a name="line.2379"></a>
+<span class="sourceLineNo">2380</span>      if (coprocessorHost != null) {<a name="line.2380"></a>
+<span class="sourceLineNo">2381</span>        status.setStatus("Running coprocessor pre-flush hooks");<a name="line.2381"></a>
+<span class="sourceLineNo">2382</span>        coprocessorHost.preFlush(tracker);<a name="line.2382"></a>
+<span class="sourceLineNo">2383</span>      }<a name="line.2383"></a>
+<span class="sourceLineNo">2384</span>      // TODO: this should be managed within memstore with the snapshot, updated only after flush<a name="line.2384"></a>
+<span class="sourceLineNo">2385</span>      // successful<a name="line.2385"></a>
+<span class="sourceLineNo">2386</span>      if (numMutationsWithoutWAL.sum() &gt; 0) {<a name="line.2386"></a>
+<span class="sourceLineNo">2387</span>        numMutationsWithoutWAL.reset();<a name="line.2387"></a>
+<span class="sourceLineNo">2388</span>        dataInMemoryWithoutWAL.reset();<a name="line.2388"></a>
+<span class="sourceLineNo">2389</span>      }<a name="line.2389"></a>
+<span class="sourceLineNo">2390</span>      synchronized (writestate) {<a name="line.2390"></a>
+<span class="sourceLineNo">2391</span>        if (!writestate.flushing &amp;&amp; writestate.writesEnabled) {<a name="line.2391"></a>
+<span class="sourceLineNo">2392</span>          this.writestate.flushing = true;<a name="line.2392"></a>
+<span class="sourceLineNo">2393</span>        } else {<a name="line.2393"></a>
+<span class="sourceLineNo">2394</span>          if (LOG.isDebugEnabled()) {<a name="line.2394"></a>
+<span class="sourceLineNo">2395</span>            LOG.debug("NOT flushing memstore for region " + this<a name="line.2395"></a>
+<span class="sourceLineNo">2396</span>                + ", flushing=" + writestate.flushing + ", writesEnabled="<a name="line.2396"></a>
+<span class="sourceLineNo">2397</span>                + writestate.writesEnabled);<a name="line.2397"></a>
+<span class="sourceLineNo">2398</span>          }<a name="line.2398"></a>
+<span class="sourceLineNo">2399</span>          String msg = "Not flushing since "<a name="line.2399"></a>
+<span class="sourceLineNo">2400</span>              + (writestate.flushing ? "already flushing"<a name="line.2400"></a>
+<span class="sourceLineNo">2401</span>              : "writes not enabled");<a name="line.2401"></a>
+<span class="sourceLineNo">2402</span>          status.abort(msg);<a name="line.2402"></a>
+<span class="sourceLineNo">2403</span>          return new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false);<a name="line.2403"></a>
+<span class="sourceLineNo">2404</span>        }<a name="line.2404"></a>
+<span class="sourceLineNo">2405</span>      }<a name="line.2405"></a>
+<span class="sourceLineNo">2406</span><a name="line.2406"></a>
+<span class="sourceLineNo">2407</span>      try {<a name="line.2407"></a>
+<span class="sourceLineNo">2408</span>        Collection&lt;HStore&gt; specificStoresToFlush =<a name="line.2408"></a>
+<span class="sourceLineNo">2409</span>            forceFlushAllStores ? stores.values() : flushPolicy.selectStoresToFlush();<a name="line.2409"></a>
+<span class="sourceLineNo">2410</span>        FlushResultImpl fs =<a name="line.2410"></a>
+<span class="sourceLineNo">2411</span>            internalFlushcache(specificStoresToFlush, status, writeFlushRequestWalMarker, tracker);<a name="line.2411"></a>
+<span class="sourceLineNo">2412</span><a name="line.2412"></a>
+<span class="sourceLineNo">2413</span>        if (coprocessorHost != null) {<a name="line.2413"></a>
+<span class="sourceLineNo">2414</span>          status.setStatus("Running post-flush coprocessor hooks");<a name="line.2414"></a>
+<span class="sourceLineNo">2415</span>          coprocessorHost.postFlush(tracker);<a name="line.2415"></a>
+<span class="sourceLineNo">2416</span>        }<a name="line.2416"></a>
+<span class="sourceLineNo">2417</span><a name="line.2417"></a>
+<span class="sourceLineNo">2418</span>        if(fs.isFlushSucceeded()) {<a name="line.2418"></a>
+<span class="sourceLineNo">2419</span>          flushesQueued.reset();<a name="line.2419"></a>
+<span class="sourceLineNo">2420</span>        }<a name="line.2420"></a>
+<span class="sourceLineNo">2421</span><a name="line.2421"></a>
+<span class="sourceLineNo">2422</span>        status.markComplete("Flush successful");<a name="line.2422"></a>
+<span class="sourceLineNo">2423</span>        return fs;<a name="line.2423"></a>
+<span class="sourceLineNo">2424</span>      } finally {<a name="line.2424"></a>
+<span class="sourceLineNo">2425</span>        synchronized (writestate) {<a name="line.2425"></a>
+<span class="sourceLineNo">2426</span>          writestate.flushing = false;<a name="line.2426"></a>
+<span class="sourceLineNo">2427</span>          this.writestate.flushRequested = false;<a name="line.2427"></a>
+<span class="sourceLineNo">2428</span>          writestate.notifyAll();<a name="line.2428"></a>
+<span class="sourceLineNo">2429</span>        }<a name="line.2429"></a>
+<span class="sourceLineNo">2430</span>      }<a name="line.2430"></a>
+<span class="sourceLineNo">2431</span>    } finally {<a name="line.2431"></a>
+<span class="sourceLineNo">2432</span>      lock.readLock().unlock();<a name="line.2432"></a>
+<span class="sourceLineNo">2433</span>      LOG.debug("Flush status journal:\n\t" + status.prettyPrintJournal());<a name="line.2433"></a>
+<span class="sourceLineNo">2434</span>      status.cleanup();<a name="line.2434"></a>
+<span class="sourceLineNo">2435</span>    }<a name="line.2435"></a>
+<span class="sourceLineNo">2436</span>  }<a name="line.2436"></a>
+<span class="sourceLineNo">2437</span><a name="line.2437"></a>
+<span class="sourceLineNo">2438</span>  /**<a name="line.2438"></a>
+<span class="sourceLineNo">2439</span>   * Should the store be flushed because it is old enough.<a name="line.2439"></a>
+<span class="sourceLineNo">2440</span>   * &lt;p&gt;<a name="line.2440"></a>
+<span class="sourceLineNo">2441</span>   * Every FlushPolicy should call this to determine whether a store is old enough to flush (except<a name="line.2441"></a>
+<span class="sourceLineNo">2442</span>   * that you always flush all stores). Otherwise the method will always<a name="line.2442"></a>
+<span class="sourceLineNo">2443</span>   * returns true which will make a lot of flush requests.<a name="line.2443"></a>
+<span class="sourceLineNo">2444</span>   */<a name="line.2444"></a>
+<span class="sourceLineNo">2445</span>  boolean shouldFlushStore(HStore store) {<a name="line.2445"></a>
+<span class="sourceLineNo">2446</span>    long earliest = this.wal.getEarliestMemStoreSeqNum(getRegionInfo().getEncodedNameAsBytes(),<a name="line.2446"></a>
+<span class="sourceLineNo">2447</span>      store.getColumnFamilyDescriptor().getName()) - 1;<a name="line.2447"></a>
+<span class="sourceLineNo">2448</span>    if (earliest &gt; 0 &amp;&amp; earliest + flushPerChanges &lt; mvcc.getReadPoint()) {<a name="line.2448"></a>
+<span class="sourceLineNo">2449</span>      if (LOG.isDebugEnabled()) {<a name="line.2449"></a>
+<span class="sourceLineNo">2450</span>        LOG.debug("Flush column family " + store.getColumnFamilyName() + " of " +<a name="line.2450"></a>
+<span class="sourceLineNo">2451</span>          getRegionInfo().getEncodedName() + " because unflushed sequenceid=" + earliest +<a name="line.2451"></a>
+<span class="sourceLineNo">2452</span>          " is &gt; " + this.flushPerChanges + " from current=" + mvcc.getReadPoint());<a name="line.2452"></a>
+<span class="sourceLineNo">2453</span>      }<a name="line.2453"></a>
+<span class="sourceLineNo">2454</span>      return true;<a name="line.2454"></a>
 <span class="sourceLineNo">2455</span>    }<a name="line.2455"></a>
-<span class="sourceLineNo">2456</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.2456"></a>
-<span class="sourceLineNo">2457</span>    if (store.timeOfOldestEdit() &lt; now - this.flushCheckInterval) {<a name="line.2457"></a>
-<span class="sourceLineNo">2458</span>      if (LOG.isDebugEnabled()) {<a name="line.2458"></a>
-<span class="sourceLineNo">2459</span>        LOG.debug("Flush column family: " + store.getColumnFamilyName() + " of " +<a name="line.2459"></a>
-<span class="sourceLineNo">2460</span>          getRegionInfo().getEncodedName() + " because time of oldest edit=" +<a name="line.2460"></a>
-<span class="sourceLineNo">2461</span>            store.timeOfOldestEdit() + " is &gt; " + this.flushCheckInterval + " from now =" + now);<a name="line.2461"></a>
-<span class="sourceLineNo">2462</span>      }<a name="line.2462"></a>
-<span class="sourceLineNo">2463</span>      return true;<a name="line.2463"></a>
-<span class="sourceLineNo">2464</span>    }<a name="line.2464"></a>
-<span class="sourceLineNo">2465</span>    return false;<a name="line.2465"></a>
-<span class="sourceLineNo">2466</span>  }<a name="line.2466"></a>
-<span class="sourceLineNo">2467</span><a name="line.2467"></a>
-<span class="sourceLineNo">2468</span>  /**<a name="line.2468"></a>
-<span class="sourceLineNo">2469</span>   * Should the memstore be flushed now<a name="line.2469"></a>
-<span class="sourceLineNo">2470</span>   */<a name="line.2470"></a>
-<span class="sourceLineNo">2471</span>  boolean shouldFlush(final StringBuilder whyFlush) {<a name="line.2471"></a>
-<span class="sourceLineNo">2472</span>    whyFlush.setLength(0);<a name="line.2472"></a>
-<span class="sourceLineNo">2473</span>    // This is a rough measure.<a name="line.2473"></a>
-<span class="sourceLineNo">2474</span>    if (this.maxFlushedSeqId &gt; 0<a name="line.2474"></a>
-<span class="sourceLineNo">2475</span>          &amp;&amp; (this.maxFlushedSeqId + this.flushPerChanges &lt; this.mvcc.getReadPoint())) {<a name="line.2475"></a>
-<span class="sourceLineNo">2476</span>      whyFlush.append("more than max edits, " + this.flushPerChanges + ", since last flush");<a name="line.2476"></a>
-<span class="sourceLineNo">2477</span>      return true;<a name="line.2477"></a>
-<span class="sourceLineNo">2478</span>    }<a name="line.2478"></a>
-<span class="sourceLineNo">2479</span>    long modifiedFlushCheckInterval = flushCheckInterval;<a name="line.2479"></a>
-<span class="sourceLineNo">2480</span>    if (getRegionInfo().getTable().isSystemTable() &amp;&amp;<a name="line.2480"></a>
-<span class="sourceLineNo">2481</span>        getRegionInfo().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2481"></a>
-<span class="sourceLineNo">2482</span>      modifiedFlushCheckInterval = SYSTEM_CACHE_FLUSH_INTERVAL;<a name="line.2482"></a>
-<span class="sourceLineNo">2483</span>    }<a name="line.2483"></a>
-<span class="sourceLineNo">2484</span>    if (modifiedFlushCheckInterval &lt;= 0) { //disabled<a name="line.2484"></a>
-<span class="sourceLineNo">2485</span>      return false;<a name="line.2485"></a>
+<span class="sourceLineNo">2456</span>    if (this.flushCheckInterval &lt;= 0) {<a name="line.2456"></a>
+<span class="sourceLineNo">2457</span>      return false;<a name="line.2457"></a>
+<span class="sourceLineNo">2458</span>    }<a name="line.2458"></a>
+<span class="sourceLineNo">2459</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.2459"></a>
+<span class="sourceLineNo">2460</span>    if (store.timeOfOldestEdit() &lt; now - this.flushCheckInterval) {<a name="line.2460"></a>
+<span class="sourceLineNo">2461</span>      if (LOG.isDebugEnabled()) {<a name="line.2461"></a>
+<span class="sourceLineNo">2462</span>        LOG.debug("Flush column family: " + store.getColumnFamilyName() + " of " +<a name="line.2462"></a>
+<span class="sourceLineNo">2463</span>          getRegionInfo().getEncodedName() + " because time of oldest edit=" +<a name="line.2463"></a>
+<span class="sourceLineNo">2464</span>            store.timeOfOldestEdit() + " is &gt; " + this.flushCheckInterval + " from now =" + now);<a name="line.2464"></a>
+<span class="sourceLineNo">2465</span>      }<a name="line.2465"></a>
+<span class="sourceLineNo">2466</span>      return true;<a name="line.2466"></a>
+<span class="sourceLineNo">2467</span>    }<a name="line.2467"></a>
+<span class="sourceLineNo">2468</span>    return false;<a name="line.2468"></a>
+<span class="sourceLineNo">2469</span>  }<a name="line.2469"></a>
+<span class="sourceLineNo">2470</span><a name="line.2470"></a>
+<span class="sourceLineNo">2471</span>  /**<a name="line.2471"></a>
+<span class="sourceLineNo">2472</span>   * Should the memstore be flushed now<a name="line.2472"></a>
+<span class="sourceLineNo">2473</span>   */<a name="line.2473"></a>
+<span class="sourceLineNo">2474</span>  boolean shouldFlush(final StringBuilder whyFlush) {<a name="line.2474"></a>
+<span class="sourceLineNo">2475</span>    whyFlush.setLength(0);<a name="line.2475"></a>
+<span class="sourceLineNo">2476</span>    // This is a rough measure.<a name="line.2476"></a>
+<span class="sourceLineNo">2477</span>    if (this.maxFlushedSeqId &gt; 0<a name="line.2477"></a>
+<span class="sourceLineNo">2478</span>          &amp;&amp; (this.maxFlushedSeqId + this.flushPerChanges &lt; this.mvcc.getReadPoint())) {<a name="line.2478"></a>
+<span class="sourceLineNo">2479</span>      whyFlush.append("more than max edits, " + this.flushPerChanges + ", since last flush");<a name="line.2479"></a>
+<span class="sourceLineNo">2480</span>      return true;<a name="line.2480"></a>
+<span class="sourceLineNo">2481</span>    }<a name="line.2481"></a>
+<span class="sourceLineNo">2482</span>    long modifiedFlushCheckInterval = flushCheckInterval;<a name="line.2482"></a>
+<span class="sourceLineNo">2483</span>    if (getRegionInfo().getTable().isSystemTable() &amp;&amp;<a name="line.2483"></a>
+<span class="sourceLineNo">2484</span>        getRegionInfo().getReplicaId() == RegionInfo.DEFAULT_REPLICA_ID) {<a name="line.2484"></a>
+<span class="sourceLineNo">2485</span>      modifiedFlushCheckInterval = SYSTEM_CACHE_FLUSH_INTERVAL;<a name="line.2485"></a>
 <span class="sourceLineNo">2486</span>    }<a name="line.2486"></a>
-<span class="sourceLineNo">2487</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.2487"></a>
-<span class="sourceLineNo">2488</span>    //if we flushed in the recent past, we don't need to do again now<a name="line.2488"></a>
-<span class="sourceLineNo">2489</span>    if ((now - getEarliestFlushTimeForAllStores() &lt; modifiedFlushCheckInterval)) {<a name="line.2489"></a>
-<span class="sourceLineNo">2490</span>      return false;<a name="line.2490"></a>
-<span class="sourceLineNo">2491</span>    }<a name="line.2491"></a>
-<span class="sourceLineNo">2492</span>    //since we didn't flush in the recent past, flush now if certain conditions<a name="line.2492"></a>
-<span class="sourceLineNo">2493</span>    //are met. Return true on first such memstore hit.<a name="line.2493"></a>
-<span class="sourceLineNo">2494</span>    for (HStore s : stores.values()) {<a name="line.2494"></a>
-<span class="sourceLineNo">2495</span>      if (s.timeOfOldestEdit() &lt; now - modifiedFlushCheckInterval) {<a name="line.2495"></a>
-<span class="sourceLineNo">2496</span>        // we have an old enough edit in the memstore, flush<a name="line.2496"></a>
-<span class="sourceLineNo">2497</span>        whyFlush.append(s.toString() + " has an old edit so flush to free WALs");<a name="line.2497"></a>
-<span class="sourceLineNo">2498</span>        return true;<a name="line.2498"></a>
-<span class="sourceLineNo">2499</span>      }<a name="line.2499"></a>
-<span class="sourceLineNo">2500</span>    }<a name="line.2500"></a>
-<span class="sourceLineNo">2501</span>    return false;<a name="line.2501"></a>
-<span class="sourceLineNo">2502</span>  }<a name="line.2502"></a>
-<span class="sourceLineNo">2503</span><a name="line.2503"></a>
-<span class="sourceLineNo">2504</span>  /**<a name="line.2504"></a>
-<span class="sourceLineNo">2505</span>   * Flushing all stores.<a name="line.2505"></a>
-<span class="sourceLineNo">2506</span>   * @see #internalFlushcache(Collection, MonitoredTask, boolean, FlushLifeCycleTracker)<a name="line.2506"></a>
-<span class="sourceLineNo">2507</span>   */<a name="line.2507"></a>
-<span class="sourceLineNo">2508</span>  private FlushResult internalFlushcache(MonitoredTask status) throws IOException {<a name="line.2508"></a>
-<span class="sourceLineNo">2509</span>    return internalFlushcache(stores.values(), status, false, FlushLifeCycleTracker.DUMMY);<a name="line.2509"></a>
-<span class="sourceLineNo">2510</span>  }<a name="line.2510"></a>
-<span class="sourceLineNo">2511</span><a name="line.2511"></a>
-<span class="sourceLineNo">2512</span>  /**<a name="line.2512"></a>
-<span class="sourceLineNo">2513</span>   * Flushing given stores.<a name="line.2513"></a>
-<span class="sourceLineNo">2514</span>   * @see #internalFlushcache(WAL, long, Collection, MonitoredTask, boolean, FlushLifeCycleTracker)<a name="line.2514"></a>
-<span class="sourceLineNo">2515</span>   */<a name="line.2515"></a>
-<span class="sourceLineNo">2516</span>  private FlushResultImpl internalFlushcache(Collection&lt;HStore&gt; storesToFlush, MonitoredTask status,<a name="line.2516"></a>
-<span class="sourceLineNo">2517</span>      boolean writeFlushWalMarker, FlushLifeCycleTracker tracker) throws IOException {<a name="line.2517"></a>
-<span class="sourceLineNo">2518</span>    return internalFlushcache(this.wal, HConstants.NO_SEQNUM, storesToFlush, status,<a name="line.2518"></a>
-<span class="sourceLineNo">2519</span>      writeFlushWalMarker, tracker);<a name="line.2519"></a>
-<span class="sourceLineNo">2520</span>  }<a name="line.2520"></a>
-<span class="sourceLineNo">2521</span><a name="line.2521"></a>
-<span class="sourceLineNo">2522</span>  /**<a name="line.2522"></a>
-<span class="sourceLineNo">2523</span>   * Flush the memstore. Flushing the memstore is a little tricky. We have a lot of updates in the<a name="line.2523"></a>
-<span class="sourceLineNo">2524</span>   * memstore, all of which have also been written to the wal. We need to write those updates in the<a name="line.2524"></a>
-<span class="sourceLineNo">2525</span>   * memstore out to disk, while being able to process reads/writes as much as possible during the<a name="line.2525"></a>
-<span class="sourceLineNo">2526</span>   * flush operation.<a name="line.2526"></a>
-<span class="sourceLineNo">2527</span>   * &lt;p&gt;<a name="line.2527"></a>
-<span class="sourceLineNo">2528</span>   * This method may block for some time. Every time you call it, we up the regions sequence id even<a name="line.2528"></a>
-<span class="sourceLineNo">2529</span>   * if we don't flush; i.e. the returned region id will be at least one larger than the last edit<a name="line.2529"></a>
-<span class="sourceLineNo">2530</span>   * applied to this region. The returned id does not refer to an actual edit. The returned id can<a name="line.2530"></a>
-<span class="sourceLineNo">2531</span>   * be used for say installing a bulk loaded file just ahead of the last hfile that was the result<a name="line.2531"></a>
-<span class="sourceLineNo">2532</span>   * of this flush, etc.<a name="line.2532"></a>
-<span class="sourceLineNo">2533</span>   * @param wal Null if we're NOT to go via wal.<a name="line.2533"></a>
-<span class="sourceLineNo">2534</span>   * @param myseqid The seqid to use if &lt;code&gt;wal&lt;/code&gt; is null writing out flush file.<a name="line.2534"></a>
-<span class="sourceLineNo">2535</span>   * @param storesToFlush The list of stores to flush.<a name="line.2535"></a>
-<span class="sourceLineNo">2536</span>   * @return object describing the flush's state<a name="line.2536"></a>
-<span class="sourceLineNo">2537</span>   * @throws IOException general io exceptions<a name="line.2537"></a>
-<span class="sourceLineNo">2538</span>   * @throws DroppedSnapshotException Thrown when replay of WAL is required.<a name="line.2538"></a>
-<span class="sourceLineNo">2539</span>   */<a name="line.2539"></a>
-<span class="sourceLineNo">2540</span>  protected FlushResultImpl internalFlushcache(WAL wal, long myseqid,<a name="line.2540"></a>
-<span class="sourceLineNo">2541</span>      Collection&lt;HStore&gt; storesToFlush, MonitoredTask status, boolean writeFlushWalMarker,<a name="line.2541"></a>
-<span class="sourceLineNo">2542</span>      FlushLifeCycleTracker tracker) throws IOException {<a name="line.2542"></a>
-<span class="sourceLineNo">2543</span>    PrepareFlushResult result =<a name="line.2543"></a>
-<span class="sourceLineNo">2544</span>        internalPrepareFlushCache(wal, myseqid, storesToFlush, status, writeFlushWalMarker, tracker);<a name="line.2544"></a>
-<span class="sourceLineNo">2545</span>    if (result.result == null) {<a name="line.2545"></a>
-<span class="sourceLineNo">2546</span>      return internalFlushCacheAndCommit(wal, status, result, storesToFlush);<a name="line.2546"></a>
-<span class="sourceLineNo">2547</span>    } else {<a name="line.2547"></a>
-<span class="sourceLineNo">2548</span>      return result.result; // early exit due to failure from prepare stage<a name="line.2548"></a>
-<span class="sourceLineNo">2549</span>    }<a name="line.2549"></a>
-<span class="sourceLineNo">2550</span>  }<a name="line.2550"></a>
-<span class="sourceLineNo">2551</span><a name="line.2551"></a>
-<span class="sourceLineNo">2552</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DLS_DEAD_LOCAL_STORE",<a name="line.2552"></a>
-<span class="sourceLineNo">2553</span>      justification="FindBugs seems confused about trxId")<a name="line.2553"></a>
-<span class="sourceLineNo">2554</span>  protected PrepareFlushResult internalPrepareFlushCache(WAL wal, long myseqid,<a name="line.2554"></a>
-<span class="sourceLineNo">2555</span>      Collection&lt;HStore&gt; storesToFlush, MonitoredTask status, boolean writeFlushWalMarker,<a name="line.2555"></a>
-<span class="sourceLineNo">2556</span>      FlushLifeCycleTracker tracker) throws IOException {<a name="line.2556"></a>
-<span class="sourceLineNo">2557</span>    if (this.rsServices != null &amp;&amp; this.rsServices.isAborted()) {<a name="line.2557"></a>
-<span class="sourceLineNo">2558</span>      // Don't flush when server aborting, it's unsafe<a name="line.2558"></a>
-<span class="sourceLineNo">2559</span>      throw new IOException("Aborting flush because server is aborted...");<a name="line.2559"></a>
-<span class="sourceLineNo">2560</span>    }<a name="line.2560"></a>
-<span class="sourceLineNo">2561</span>    final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.2561"></a>
-<span class="sourceLineNo">2562</span>    // If nothing to flush, return, but return with a valid unused sequenceId.<a name="line.2562"></a>
-<span class="sourceLineNo">2563</span>    // Its needed by bulk upload IIRC. It flushes until no edits in memory so it can insert a<a name="line.2563"></a>
-<span class="sourceLineNo">2564</span>    // bulk loaded file between memory and existing hfiles. It wants a good seqeunceId that belongs<a name="line.2564"></a>
-<span class="sourceLineNo">2565</span>    // to no other that it can use to associate with the bulk load. Hence this little dance below<a name="line.2565"></a>
-<span class="sourceLineNo">2566</span>    // to go get one.<a name="line.2566"></a>
-<span class="sourceLineNo">2567</span>    if (this.memStoreSizing.getDataSize() &lt;= 0) {<a name="line.2567"></a>
-<span class="sourceLineNo">2568</span>      // Take an update lock so no edits can come into memory just yet.<a name="line.2568"></a>
-<span class="sourceLineNo">2569</span>      this.updatesLock.writeLock().lock();<a name="line.2569"></a>
-<span class="sourceLineNo">2570</span>      WriteEntry writeEntry = null;<a name="line.2570"></a>
-<span class="sourceLineNo">2571</span>      try {<a name="line.2571"></a>
-<span class="sourceLineNo">2572</span>        if (this.memStoreSizing.getDataSize() &lt;= 0) {<a name="line.2572"></a>
-<span class="sourceLineNo">2573</span>          // Presume that if there are still no edits in the memstore, then there are no edits for<a name="line.2573"></a>
-<span class="sourceLineNo">2574</span>          // this region out in the WAL subsystem so no need to do any trickery clearing out<a name="line.2574"></a>
-<span class="sourceLineNo">2575</span>          // edits in the WAL sub-system. Up the sequence number so the resulting flush id is for<a name="line.2575"></a>
-<span class="sourceLineNo">2576</span>          // sure just beyond the last appended region edit and not associated with any edit<a name="line.2576"></a>
-<span class="sourceLineNo">2577</span>          // (useful as marker when bulk loading, etc.).<a name="line.2577"></a>
-<span class="sourceLineNo">2578</span>          if (wal != null) {<a name="line.2578"></a>
-<span class="sourceLineNo">2579</span>            writeEntry = mvcc.begin();<a name="line.2579"></a>
-<span class="sourceLineNo">2580</span>            long flushOpSeqId = writeEntry.getWriteNumber();<a name="line.2580"></a>
-<span class="sourceLineNo">2581</span>            FlushResultImpl flushResult =<a name="line.2581"></a>
-<span class="sourceLineNo">2582</span>                new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY, flushOpSeqId,<a name="line.2582"></a>
-<span class="sourceLineNo">2583</span>                    "Nothing to flush", writeFlushRequestMarkerToWAL(wal, writeFlushWalMarker));<a name="line.2583"></a>
-<span class="sourceLineNo">2584</span>            mvcc.completeAndWait(writeEntry);<a name="line.2584"></a>
-<span class="sourceLineNo">2585</span>            // Set to null so we don't complete it again down in finally block.<a name="line.2585"></a>
-<span class="sourceLineNo">2586</span>            writeEntry = null;<a name="line.2586"></a>
-<span class="sourceLineNo">2587</span>            return new PrepareFlushResult(flushResult, myseqid);<a name="line.2587"></a>
-<span class="sourceLineNo">2588</span>          } else {<a name="line.2588"></a>
-<span class="sourceLineNo">2589</span>            return new PrepareFlushResult(new FlushResultImpl(<a name="line.2589"></a>
-<span class="sourceLineNo">2590</span>              FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY, "Nothing to flush", false), myseqid);<a name="line.2590"></a>
-<span class="sourceLineNo">2591</span>          }<a name="line.2591"></a>
-<span class="sourceLineNo">2592</span>        }<a name="line.2592"></a>
-<span class="sourceLineNo">2593</span>      } finally {<a name="line.2593"></a>
-<span class="sourceLineNo">2594</span>        if (writeEntry != null) {<a name="line.2594"></a>
-<span class="sourceLineNo">2595</span>          // If writeEntry is non-null, this operation failed; the mvcc transaction failed...<a name="line.2595"></a>
-<span class="sourceLineNo">2596</span>          // but complete it anyways so it doesn't block the mvcc queue.<a name="line.2596"></a>
-<span class="sourceLineNo">2597</span>          mvcc.complete(writeEntry);<a name="line.2597"></a>
-<span class="sourceLineNo">2598</span>        }<a name="line.2598"></a>
-<span class="sourceLineNo">2599</span>        this.updatesLock.writeLock().unlock();<a name="line.2599"></a>
-<span class="sourceLineNo">2600</span>      }<a name="line.2600"></a>
-<span class="sourceLineNo">2601</span>    }<a name="line.2601"></a>
-<span class="sourceLineNo">2602</span>    logFatLineOnFlush(storesToFlush, myseqid);<a name="line.2602"></a>
-<span class="sourceLineNo">2603</span>    // Stop updates while we snapshot the memstore of all of these regions' stores. We only have<a name="line.2603"></a>
-<span class="sourceLineNo">2604</span>    // to do this for a moment.  It is quick. We also set the memstore size to zero here before we<a name="line.2604"></a>
-<span class="sourceLineNo">2605</span>    // allow updates again so its value will represent the size of the updates received<a name="line.2605"></a>
-<span class="sourceLineNo">2606</span>    // during flush<a name="line.2606"></a>
-<span class="sourceLineNo">2607</span><a name="line.2607"></a>
-<span class="sourceLineNo">2608</span>    // We have to take an update lock during snapshot, or else a write could end up in both snapshot<a name="line.2608"></a>
-<span class="sourceLineNo">2609</span>    // and memstore (makes it difficult to do atomic rows then)<a name="line.2609"></a>
-<span class="sourceLineNo">2610</span>    status.setStatus("Obtaining lock to block concurrent updates");<a name="line.2610"></a>
-<span class="sourceLineNo">2611</span>    // block waiting for the lock for internal flush<a name="line.2611"></a>
-<span class="sourceLineNo">2612</span>    this.updatesLock.writeLock().lock();<a name="line.2612"></a>
-<span class="sourceLineNo">2613</span>    status.setStatus("Preparing flush snapshotting stores in " + getRegionInfo().getEncodedName());<a name="line.2613"></a>
-<span class="sourceLineNo">2614</span>    MemStoreSizing totalSizeOfFlushableStores = new NonThreadSafeMemStoreSizing();<a name="line.2614"></a>
-<span class="sourceLineNo">2615</span><a name="line.2615"></a>
-<span class="sourceLineNo">2616</span>    Map&lt;byte[], Long&gt; flushedFamilyNamesToSeq = new HashMap&lt;&gt;();<a name="line.2616"></a>
-<span class="sourceLineNo">2617</span>    for (HStore store : storesToFlush) {<a name="line.2617"></a>
-<span class="sourceLineNo">2618</span>      flushedFamilyNamesToSeq.put(store.getColumnFamilyDescriptor().getName(),<a name="line.2618"></a>
-<span class="sourceLineNo">2619</span>        store.preFlushSeqIDEstimation());<a name="line.2619"></a>
-<span class="sourceLineNo">2620</span>    }<a name="line.2620"></a>
-<span class="sourceLineNo">2621</span><a name="line.2621"></a>
-<span class="sourceLineNo">2622</span>    TreeMap&lt;byte[], StoreFlushContext&gt; storeFlushCtxs = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.2622"></a>
-<span class="sourceLineNo">2623</span>    TreeMap&lt;byte[], List&lt;Path&gt;&gt; committedFiles = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.2623"></a>
-<span class="sourceLineNo">2624</span>    TreeMap&lt;byte[], MemStoreSize&gt; storeFlushableSize = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.2624"></a>
-<span class="sourceLineNo">2625</span>    // The sequence id of this flush operation which is used to log FlushMarker and pass to<a name="line.2625"></a>
-<span class="sourceLineNo">2626</span>    // createFlushContext to use as the store file's sequence id. It can be in advance of edits<a name="line.2626"></a>
-<span class="sourceLineNo">2627</span>    // still in the memstore, edits that are in other column families yet to be flushed.<a name="line.2627"></a>
-<span class="sourceLineNo">2628</span>    long flushOpSeqId = HConstants.NO_SEQNUM;<a name="line.2628"></a>
-<span class="sourceLineNo">2629</span>    // The max flushed sequence id after this flush operation completes. All edits in memstore<a name="line.2629"></a>
-<span class="sourceLineNo">2630</span>    // will be in advance of this sequence id.<a name="line.2630"></a>
-<span class="sourceLineNo">2631</span>    long flushedSeqId = HConstants.NO_SEQNUM;<a name="line.2631"></a>
-<span class="sourceLineNo">2632</span>    byte[] encodedRegionName = getRegionInfo().getEncodedNameAsBytes();<a name="line.2632"></a>
-<span class="sourceLineNo">2633</span>    try {<a name="line.2633"></a>
-<span class="sourceLineNo">2634</span>      if (wal != null) {<a name="line.2634"></a>
-<span class="sourceLineNo">2635</span>        Long earliestUnflushedSequenceIdForTheRegion =<a name="line.2635"></a>
-<span class="sourceLineNo">2636</span>            wal.startCacheFlush(encodedRegionName, flushedFamilyNamesToSeq);<a name="line.2636"></a>
-<span class="sourceLineNo">2637</span>        if (earliestUnflushedSequenceIdForTheRegion == null) {<a name="line.2637"></a>
-<span class="sourceLineNo">2638</span>          // This should never happen. This is how startCacheFlush signals flush cannot proceed.<a name="line.2638"></a>
-<span class="sourceLineNo">2639</span>          String msg = this.getRegionInfo().getEncodedName() + " flush aborted; WAL closing.";<a name="line.2639"></a>
-<span class="sourceLineNo">2640</span>          status.setStatus(msg);<a name="line.2640"></a>
-<span class="sourceLineNo">2641</span>          return new PrepareFlushResult(<a name="line.2641"></a>
-<span class="sourceLineNo">2642</span>              new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false),<a name="line.2642"></a>
-<span class="sourceLineNo">2643</span>              myseqid);<a name="line.2643"></a>
-<span class="sourceLineNo">2644</span>        }<a name="line.2644"></a>
-<span class="sourceLineNo">2645</span>        flushOpSeqId = getNextSequenceId(wal);<a name="line.2645"></a>
-<span class="sourceLineNo">2646</span>        // Back up 1, minus 1 from oldest sequence id in memstore to get last 'flushed' edit<a name="line.2646"></a>
-<span class="sourceLineNo">2647</span>        flushedSeqId =<a name="line.2647"></a>
-<span class="sourceLineNo">2648</span>            earliestUnflushedSequenceIdForTheRegion.longValue() == HConstants.NO_SEQNUM?<a name="line.2648"></a>
-<span class="sourceLineNo">2649</span>                flushOpSeqId: earliestUnflushedSequenceIdForTheRegion.longValue() - 1;<a name="line.2649"></a>
-<span class="sourceLineNo">2650</span>      } else {<a name="line.2650"></a>
-<span class="sourceLineNo">2651</span>        // use the provided sequence Id as WAL is not being used for this flush.<a name="line.2651"></a>
-<span class="sourceLineNo">2652</span>        flushedSeqId = flushOpSeqId = myseqid;<a name="line.2652"></a>
-<span class="sourceLineNo">2653</span>      }<a name="line.2653"></a>
-<span class="sourceLineNo">2654</span><a name="line.2654"></a>
-<span class="sourceLineNo">2655</span>      for (HStore s : storesToFlush) {<a name="line.2655"></a>
-<span class="sourceLineNo">2656</span>        storeFlushCtxs.put(s.getColumnFamilyDescriptor().getName(),<a name="line.2656"></a>
-<span class="sourceLineNo">2657</span>          s.createFlushContext(flushOpSeqId, tracker));<a name="line.2657"></a>
-<span class="sourceLineNo">2658</span>        // for writing stores to WAL<a name="line.2658"></a>
-<span class="sourceLineNo">2659</span>        committedFiles.put(s.getColumnFamilyDescriptor().getName(), null);<a name="line.2659"></a>
-<span class="sourceLineNo">2660</span>      }<a name="line.2660"></a>
-<span class="sourceLineNo">2661</span><a name="line.2661"></a>
-<span class="sourceLineNo">2662</span>      // write the snapshot start to WAL<a name="line.2662"></a>
-<span class="sourceLineNo">2663</span>      if (wal != null &amp;&amp; !writestate.readOnly) {<a name="line.2663"></a>
-<span class="sourceLineNo">2664</span>        FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.START_FLUSH,<a name="line.2664"></a>
-<span class="sourceLineNo">2665</span>            getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2665"></a>
-<span class="sourceLineNo">2666</span>        // No sync. Sync is below where no updates lock and we do FlushAction.COMMIT_FLUSH<a name="line.2666"></a>
-<span class="sourceLineNo">2667</span>        WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, false,<a name="line.2667"></a>
-<span class="sourceLineNo">2668</span>            mvcc);<a name="line.2668"></a>
-<span class="sourceLineNo">2669</span>      }<a name="line.2669"></a>
-<span class="sourceLineNo">2670</span><a name="line.2670"></a>
-<span class="sourceLineNo">2671</span>      // Prepare flush (take a snapshot)<a name="line.2671"></a>
-<span class="sourceLineNo">2672</span>      storeFlushCtxs.forEach((name, flush) -&gt; {<a name="line.2672"></a>
-<span class="sourceLineNo">2673</span>        MemStoreSize snapshotSize = flush.prepare();<a name="line.2673"></a>
-<span class="sourceLineNo">2674</span>        totalSizeOfFlushableStores.incMemStoreSize(snapshotSize);<a name="line.2674"></a>
-<span class="sourceLineNo">2675</span>        storeFlushableSize.put(name, snapshotSize);<a name="line.2675"></a>
-<span class="sourceLineNo">2676</span>      });<a name="line.2676"></a>
-<span class="sourceLineNo">2677</span>    } catch (IOException ex) {<a name="line.2677"></a>
-<span class="sourceLineNo">2678</span>      doAbortFlushToWAL(wal, flushOpSeqId, committedFiles);<a name="line.2678"></a>
-<span class="sourceLineNo">2679</span>      throw ex;<a name="line.2679"></a>
-<span class="sourceLineNo">2680</span>    } finally {<a name="line.2680"></a>
-<span class="sourceLineNo">2681</span>      this.updatesLock.writeLock().unlock();<a name="line.2681"></a>
-<span class="sourceLineNo">2682</span>    }<a name="line.2682"></a>
-<span class="sourceLineNo">2683</span>    String s = "Finished memstore snapshotting " + this + ", syncing WAL and waiting on mvcc, " +<a name="line.2683"></a>
-<span class="sourceLineNo">2684</span>        "flushsize=" + totalSizeOfFlushableStores;<a name="line.2684"></a>
-<span class="sourceLineNo">2685</span>    status.setStatus(s);<a name="line.2685"></a>
-<span class="sourceLineNo">2686</span>    doSyncOfUnflushedWALChanges(wal, getRegionInfo());<a name="line.2686"></a>
-<span class="sourceLineNo">2687</span>    return new PrepareFlushResult(storeFlushCtxs, committedFiles, storeFlushableSize, startTime,<a name="line.2687"></a>
-<span class="sourceLineNo">2688</span>        flushOpSeqId, flushedSeqId, totalSizeOfFlushableStores);<a name="line.2688"></a>
-<span class="sourceLineNo">2689</span>  }<a name="line.2689"></a>
-<span class="sourceLineNo">2690</span><a name="line.2690"></a>
-<span class="sourceLineNo">2691</span>  /**<a name="line.2691"></a>
-<span class="sourceLineNo">2692</span>   * Utility method broken out of internalPrepareFlushCache so that method is smaller.<a name="line.2692"></a>
-<span class="sourceLineNo">2693</span>   */<a name="line.2693"></a>
-<span class="sourceLineNo">2694</span>  private void logFatLineOnFlush(Collection&lt;HStore&gt; storesToFlush, long sequenceId) {<a name="line.2694"></a>
-<span class="sourceLineNo">2695</span>    if (!LOG.isInfoEnabled()) {<a name="line.2695"></a>
-<span class="sourceLineNo">2696</span>      return;<a name="line.2696"></a>
-<span class="sourceLineNo">2697</span>    }<a name="line.2697"></a>
-<span class="sourceLineNo">2698</span>    // Log a fat line detailing what is being flushed.<a name="line.2698"></a>
-<span class="sourceLineNo">2699</span>    StringBuilder perCfExtras = null;<a name="line.2699"></a>
-<span class="sourceLineNo">2700</span>    if (!isAllFamilies(storesToFlush)) {<a name="line.2700"></a>
-<span class="sourceLineNo">2701</span>      perCfExtras = new StringBuilder();<a name="line.2701"></a>
-<span class="sourceLineNo">2702</span>      for (HStore store: storesToFlush) {<a name="line.2702"></a>
-<span class="sourceLineNo">2703</span>        MemStoreSize mss = store.getFlushableSize();<a name="line.2703"></a>
-<span class="sourceLineNo">2704</span>        perCfExtras.append("; ").append(store.getColumnFamilyName());<a name="line.2704"></a>
-<span class="sourceLineNo">2705</span>        perCfExtras.append("={dataSize=")<a name="line.2705"></a>
-<span class="sourceLineNo">2706</span>            .append(StringUtils.byteDesc(mss.getDataSize()));<a name="line.2706"></a>
-<span class="sourceLineNo">2707</span>        perCfExtras.append(", heapSize=")<a name="line.2707"></a>
-<span class="sourceLineNo">2708</span>            .append(StringUtils.byteDesc(mss.getHeapSize()));<a name="line.2708"></a>
-<span class="sourceLineNo">2709</span>        perCfExtras.append(", offHeapSize=")<a name="line.2709"></a>
-<span class="sourceLineNo">2710</span>            .append(StringUtils.byteDesc(mss.getOffHeapSize()));<a name="line.2710"></a>
-<span class="sourceLineNo">2711</span>        perCfExtras.append("}");<a name="line.2711"></a>
-<span class="sourceLineNo">2712</span>      }<a name="line.2712"></a>
-<span class="sourceLineNo">2713</span>    }<a name="line.2713"></a>
-<span class="sourceLineNo">2714</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2714"></a>
-<span class="sourceLineNo">2715</span>    LOG.info("Flushing " + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2715"></a>
-<span class="sourceLineNo">2716</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2716"></a>
-<span class="sourceLineNo">2717</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2717"></a>
-<span class="sourceLineNo">2718</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2718"></a>
-<span class="sourceLineNo">2719</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2719"></a>
-<span class="sourceLineNo">2720</span>  }<a name="line.2720"></a>
-<span class="sourceLineNo">2721</span><a name="line.2721"></a>
-<span class="sourceLineNo">2722</span>  private void doAbortFlushToWAL(final WAL wal, final long flushOpSeqId,<a name="line.2722"></a>
-<span class="sourceLineNo">2723</span>      final Map&lt;byte[], List&lt;Path&gt;&gt; committedFiles) {<a name="line.2723"></a>
-<span class="sourceLineNo">2724</span>    if (wal == null) return;<a name="line.2724"></a>
-<span class="sourceLineNo">2725</span>    try {<a name="line.2725"></a>
-<span class="sourceLineNo">2726</span>      FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.ABORT_FLUSH,<a name="line.2726"></a>
-<span class="sourceLineNo">2727</span>          getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2727"></a>
-<span class="sourceLineNo">2728</span>      WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, false,<a name="line.2728"></a>
-<span class="sourceLineNo">2729</span>          mvcc);<a name="line.2729"></a>
-<span class="sourceLineNo">2730</span>    } catch (Throwable t) {<a name="line.2730"></a>
-<span class="sourceLineNo">2731</span>      LOG.warn("Received unexpected exception trying to write ABORT_FLUSH marker to WAL:" +<a name="line.2731"></a>
-<span class="sourceLineNo">2732</span>          StringUtils.stringifyException(t));<a name="line.2732"></a>
-<span class="sourceLineNo">2733</span>      // ignore this since we will be aborting the RS with DSE.<a name="line.2733"></a>
-<span class="sourceLineNo">2734</span>    }<a name="line.2734"></a>
-<span class="sourceLineNo">2735</span>    // we have called wal.startCacheFlush(), now we have to abort it<a name="line.2735"></a>
-<span class="sourceLineNo">2736</span>    wal.abortCacheFlush(this.getRegionInfo().getEncodedNameAsBytes());<a name="line.2736"></a>
-<span class="sourceLineNo">2737</span>  }<a name="line.2737"></a>
-<span class="sourceLineNo">2738</span><a name="line.2738"></a>
-<span class="sourceLineNo">2739</span>  /**<a name="line.2739"></a>
-<span class="sourceLineNo">2740</span>   * Sync unflushed WAL changes. See HBASE-8208 for details<a name="line.2740"></a>
-<span class="sourceLineNo">2741</span>   */<a name="line.2741"></a>
-<span class="sourceLineNo">2742</span>  private static void doSyncOfUnflushedWALChanges(final WAL wal, final RegionInfo hri)<a name="line.2742"></a>
-<span class="sourceLineNo">2743</span>  throws IOException {<a name="line.2743"></a>
-<span class="sourceLineNo">2744</span>    if (wal == null) {<a name="line.2744"></a>
-<span class="sourceLineNo">2745</span>      return;<a name="line.2745"></a>
-<span class="sourceLineNo">2746</span>    }<a name="line.2746"></a>
-<span class="sourceLineNo">2747</span>    try {<a name="line.2747"></a>
-<span class="sourceLineNo">2748</span>      wal.sync(); // ensure that flush marker is sync'ed<a name="line.2748"></a>
-<span class="sourceLineNo">2749</span>    } catch (IOException ioe) {<a name="line.2749"></a>
-<span class="sourceLineNo">2750</span>      wal.abortCacheFlush(hri.getEncodedNameAsBytes());<a name="line.2750"></a>
-<span class="sourceLineNo">2751</span>      throw ioe;<a name="line.2751"></a>
-<span class="sourceLineNo">2752</span>    }<a name="line.2752"></a>
-<span class="sourceLineNo">2753</span>  }<a name="line.2753"></a>
-<span class="sourceLineNo">2754</span><a name="line.2754"></a>
-<span class="sourceLineNo">2755</span>  /**<a name="line.2755"></a>
-<span class="sourceLineNo">2756</span>   * @return True if passed Set is all families in the region.<a name="line.2756"></a>
-<span class="sourceLineNo">2757</span>   */<a name="line.2757"></a>
-<span class="sourceLineNo">2758</span>  private boolean isAllFamilies(Collection&lt;HStore&gt; families) {<a name="line.2758"></a>
-<span class="sourceLineNo">2759</span>    return families == null || this.stores.size() == families.size();<a name="line.2759"></a>
-<span class="sourceLineNo">2760</span>  }<a name="line.2760"></a>
-<span class="sourceLineNo">2761</span><a name="line.2761"></a>
-<span class="sourceLineNo">2762</span>  /**<a name="line.2762"></a>
-<span class="sourceLineNo">2763</span>   * Writes a marker to WAL indicating a flush is requested but cannot be complete due to various<a name="line.2763"></a>
-<span class="sourceLineNo">2764</span>   * reasons. Ignores exceptions from WAL. Returns whether the write succeeded.<a name="line.2764"></a>
-<span class="sourceLineNo">2765</span>   * @param wal<a name="line.2765"></a>
-<span class="sourceLineNo">2766</span>   * @return whether WAL write was successful<a name="line.2766"></a>
-<span class="sourceLineNo">2767</span>   */<a name="line.2767"></a>
-<span class="sourceLineNo">2768</span>  private boolean writeFlushRequestMarkerToWAL(WAL wal, boolean writeFlushWalMarker) {<a name="line.2768"></a>
-<span class="sourceLineNo">2769</span>    if (writeFlushWalMarker &amp;&amp; wal != null &amp;&amp; !writestate.readOnly) {<a name="line.2769"></a>
-<span class="sourceLineNo">2770</span>      FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.CANNOT_FLUSH,<a name="line.2770"></a>
-<span class="sourceLineNo">2771</span>        getRegionInfo(), -1, new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR));<a name="line.2771"></a>
-<span class="sourceLineNo">2772</span>      try {<a name="line.2772"></a>
-<span class="sourceLineNo">2773</span>        WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, true,<a name="line.2773"></a>
-<span class="sourceLineNo">2774</span>            mvcc);<a name="line.2774"></a>
-<span class="sourceLineNo">2775</span>        return true;<a name="line.2775"></a>
-<span class="sourceLineNo">2776</span>      } catch (IOException e) {<a name="line.2776"></a>
-<span class="sourceLineNo">2777</span>        LOG.warn(getRegionInfo().getEncodedName() + " : "<a name="line.2777"></a>
-<span class="sourceLineNo">2778</span>            + "Received exception while trying to write the flush request to wal", e);<a name="line.2778"></a>
-<span class="sourceLineNo">2779</span>      }<a name="line.2779"></a>
-<span class="sourceLineNo">2780</span>    }<a name="line.2780"></a>
-<span class="sourceLineNo">2781</span>    return false;<a name="line.2781"></a>
-<span class="sourceLineNo">2782</span>  }<a name="line.2782"></a>
-<span class="sourceLineNo">2783</span><a name="line.2783"></a>
-<span class="sourceLineNo">2784</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NN_NAKED_NOTIFY",<a name="line.2784"></a>
-<span class="sourceLineNo">2785</span>      justification="Intentional; notify is about completed flush")<a name="line.2785"></a>
-<span class="sourceLineNo">2786</span>  protected FlushResultImpl internalFlushCacheAndCommit(WAL wal, MonitoredTask status,<a name="line.2786"></a>
-<span class="sourceLineNo">2787</span>      PrepareFlushResult prepareResult, Collection&lt;HStore&gt; storesToFlush) throws IOException {<a name="line.2787"></a>
-<span class="sourceLineNo">2788</span>    // prepare flush context is carried via PrepareFlushResult<a name="line.2788"></a>
-<span class="sourceLineNo">2789</span>    TreeMap&lt;byte[], StoreFlushContext&gt; storeFlushCtxs = prepareResult.storeFlushCtxs;<a name="line.2789"></a>
-<span class="sourceLineNo">2790</span>    TreeMap&lt;byte[], List&lt;Path&gt;&gt; committedFiles = prepareResult.committedFiles;<a name="line.2790"></a>
-<span class="sourceLineNo">2791</span>    long startTime = prepareResult.startTime;<a name="line.2791"></a>
-<span class="sourceLineNo">2792</span>    long flushOpSeqId = prepareResult.flushOpSeqId;<a name="line.2792"></a>
-<span class="sourceLineNo">2793</span>    long flushedSeqId = prepareResult.flushedSeqId;<a name="line.2793"></a>
-<span class="sourceLineNo">2794</span><a name="line.2794"></a>
-<span class="sourceLineNo">2795</span>    String s = "Flushing stores of " + this;<a name="line.2795"></a>
-<span class="sourceLineNo">2796</span>    status.setStatus(s);<a name="line.2796"></a>
-<span class="sourceLineNo">2797</span>    if (LOG.isTraceEnabled()) LOG.trace(s);<a name="line.2797"></a>
-<span class="sourceLineNo">2798</span><a name="line.2798"></a>
-<span class="sourceLineNo">2799</span>    // Any failure from here on out will be catastrophic requiring server<a name="line.2799"></a>
-<span class="sourceLineNo">2800</span>    // restart so wal content can be replayed and put back into the memstore.<a name="line.2800"></a>
-<span class="sourceLineNo">2801</span>    // Otherwise, the snapshot content while backed up in the wal, it will not<a name="line.2801"></a>
-<span class="sourceLineNo">2802</span>    // be part of the current running servers state.<a name="line.2802"></a>
-<span class="sourceLineNo">2803</span>    boolean compactionRequested = false;<a name="line.2803"></a>
-<span class="sourceLineNo">2804</span>    long flushedOutputFileSize = 0;<a name="line.2804"></a>
-<span class="sourceLineNo">2805</span>    try {<a name="line.2805"></a>
-<span class="sourceLineNo">2806</span>      // A.  Flush memstore to all the HStores.<a name="line.2806"></a>
-<span class="sourceLineNo">2807</span>      // Keep running vector of all store files that includes both old and the<a name="line.2807"></a>
-<span class="sourceLineNo">2808</span>      // just-made new flush store file. The new flushed file is still in the<a name="line.2808"></a>
-<span class="sourceLineNo">2809</span>      // tmp directory.<a name="line.2809"></a>
-<span class="sourceLineNo">2810</span><a name="line.2810"></a>
-<span class="sourceLineNo">2811</span>      for (StoreFlushContext flush : storeFlushCtxs.values()) {<a name="line.2811"></a>
-<span class="sourceLineNo">2812</span>        flush.flushCache(status);<a name="line.2812"></a>
-<span class="sourceLineNo">2813</span>      }<a name="line.2813"></a>
-<span class="sourceLineNo">2814</span><a name="line.2814"></a>
-<span class="sourceLineNo">2815</span>      // Switch snapshot (in memstore) -&gt; new hfile (thus causing<a name="line.2815"></a>
-<span class="sourceLineNo">2816</span>      // all the store scanners to reset/reseek).<a name="line.2816"></a>
-<span class="sourceLineNo">2817</span>      Iterator&lt;HStore&gt; it = storesToFlush.iterator();<a name="line.2817"></a>
-<span class="sourceLineNo">2818</span>      // stores.values() and storeFlushCtxs have same order<a name="line.2818"></a>
-<span class="sourceLineNo">2819</span>      for (StoreFlushContext flush : storeFlushCtxs.values()) {<a name="line.2819"></a>
-<span class="sourceLineNo">2820</span>        boolean needsCompaction = flush.commit(status);<a name="line.2820"></a>
-<span class="sourceLineNo">2821</span>        if (needsCompaction) {<a name="line.2821"></a>
-<span class="sourceLineNo">2822</span>          compactionRequested = true;<a name="line.2822"></a>
-<span class="sourceLineNo">2823</span>        }<a name="line.2823"></a>
-<span class="sourceLineNo">2824</span>        byte[] storeName = it.next().getColumnFamilyDescriptor().getName();<a name="line.2824"></a>
-<span class="sourceLineNo">2825</span>        List&lt;Path&gt; storeCommittedFiles = flush.getCommittedFiles();<a name="line.2825"></a>
-<span class="sourceLineNo">2826</span>        committedFiles.put(storeName, storeCommittedFiles);<a name="line.2826"></a>
-<span class="sourceLineNo">2827</span>        // Flush committed no files, indicating flush is empty or flush was canceled<a name="line.2827"></a>
-<span class="sourceLineNo">2828</span>        if (storeCommittedFiles == null || storeCommittedFiles.isEmpty()) {<a name="line.2828"></a>
-<span class="sourceLineNo">2829</span>          MemStoreSize storeFlushableSize = prepareResult.storeFlushableSize.get(storeName);<a name="line.2829"></a>
-<span class="sourceLineNo">2830</span>          prepareResult.totalFlushableSize.decMemStoreSize(storeFlushableSize);<a name="line.2830"></a>
-<span class="sourceLineNo">2831</span>        }<a name="line.2831"></a>
-<span class="sourceLineNo">2832</span>        flushedOutputFileSize += flush.getOutputFileSize();<a name="line.2832"></a>
-<span class="sourceLineNo">2833</span>      }<a name="line.2833"></a>
-<span class="sourceLineNo">2834</span>      storeFlushCtxs.clear();<a name="line.2834"></a>
-<span class="sourceLineNo">2835</span><a name="line.2835"></a>
-<span class="sourceLineNo">2836</span>      // Set down the memstore size by amount of flush.<a name="line.2836"></a>
-<span class="sourceLineNo">2837</span>      MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2837"></a>
-<span class="sourceLineNo">2838</span>      this.decrMemStoreSize(mss);<a name="line.2838"></a>
-<span class="sourceLineNo">2839</span><a name="line.2839"></a>
-<span class="sourceLineNo">2840</span>      // Increase the size of this Region for the purposes of quota. Noop if quotas are disabled.<a name="line.2840"></a>
-<span class="sourceLineNo">2841</span>      // During startup, quota manager may not be initialized yet.<a name="line.2841"></a>
-<span class="sourceLineNo">2842</span>      if (rsServices != null) {<a name="line.2842"></a>
-<span class="sourceLineNo">2843</span>        RegionServerSpaceQuotaManager quotaManager = rsServices.getRegionServerSpaceQuotaManager();<a name="line.2843"></a>
-<span class="sourceLineNo">2844</span>        if (quotaManager != null) {<a name="line.2844"></a>
-<span class="sourceLineNo">2845</span>          quotaManager.getRegionSizeStore().incrementRegionSize(<a name="line.2845"></a>
-<span class="sourceLineNo">2846</span>              this.getRegionInfo(), flushedOutputFileSize);<a name="line.2846"></a>
-<span class="sourceLineNo">2847</span>        }<a name="line.2847"></a>
-<span class="sourceLineNo">2848</span>      }<a name="line.2848"></a>
-<span class="sourceLineNo">2849</span><a name="line.2849"></a>
-<span class="sourceLineNo">2850</span>      if (wal != null) {<a name="line.2850"></a>
-<span class="sourceLineNo">2851</span>        // write flush marker to WAL. If fail, we should throw DroppedSnapshotException<a name="line.2851"></a>
-<span class="sourceLineNo">2852</span>        FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.COMMIT_FLUSH,<a name="line.2852"></a>
-<span class="sourceLineNo">2853</span>          getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2853"></a>
-<span class="sourceLineNo">2854</span>        WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, true,<a name="line.2854"></a>
-<span class="sourceLineNo">2855</span>            mvcc);<a name="line.2855"></a>
-<span class="sourceLineNo">2856</span>      }<a name="line.2856"></a>
-<span class="sourceLineNo">2857</span>    } catch (Throwable t) {<a name="line.2857"></a>
-<span class="sourceLineNo">2858</span>      // An exception here means that the snapshot was not persisted.<a name="line.2858"></a>
-<span class="sourceLineNo">2859</span>      // The wal needs to be replayed so its content is restored to memstore.<a name="line.2859"></a>
-<span class="sourceLineNo">2860</span>      // Currently, only a server restart will do this.<a name="line.2860"></a>
-<span class="sourceLineNo">2861</span>      // We used to only catch IOEs but its possible that we'd get other<a name="line.2861"></a>
-<span class="sourceLineNo">2862</span>      // exceptions -- e.g. HBASE-659 was about an NPE -- so now we catch<a name="line.2862"></a>
-<span class="sourceLineNo">2863</span>      // all and sundry.<a name="line.2863"></a>
-<span class="sourceLineNo">2864</span>      if (wal != null) {<a name="line.2864"></a>
-<span class="sourceLineNo">2865</span>        try {<a name="line.2865"></a>
-<span class="sourceLineNo">2866</span>          FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.ABORT_FLUSH,<a name="line.2866"></a>
-<span class="sourceLineNo">2867</span>            getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2867"></a>
-<span class="sourceLineNo">2868</span>          WALUtil.writeFlushMarker(wal, this.replicationScope, getRegionInfo(), desc, false, mvcc);<a name="line.2868"></a>
-<span class="sourceLineNo">2869</span>        } catch (Throwable ex) {<a name="line.2869"></a>
-<span class="sourceLineNo">2870</span>          LOG.warn(getRegionInfo().getEncodedName() + " : "<a name="line.2870"></a>
-<span class="sourceLineNo">2871</span>              + "failed writing ABORT_FLUSH marker to WAL", ex);<a name="line.2871"></a>
-<span class="sourceLineNo">2872</span>          // ignore this since we will be aborting the RS with DSE.<a name="line.2872"></a>
-<span class="sourceLineNo">2873</span>        }<a name="line.2873"></a>
-<span class="sourceLineNo">2874</span>        wal.abortCacheFlush(this.getRegionInfo().getEncodedNameAsBytes());<a name="line.2874"></a>
-<span class="sourceLineNo">2875</span>      }<a name="line.2875"></a>
-<span class="sourceLineNo">2876</span>      DroppedSnapshotException dse = new DroppedSnapshotException("region: " +<a name="line.2876"></a>
-<span class="sourceLineNo">2877</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.2877"></a>
-<span class="sourceLineNo">2878</span>      dse.initCause(t);<a name="line.2878"></a>
-<span class="sourceLineNo">2879</span>      status.abort("Flush failed: " + StringUtils.stringifyException(t));<a name="line.2879"></a>
-<span class="sourceLineNo">2880</span><a name="line.2880"></a>
-<span class="sourceLineNo">2881</span>      // Callers for flushcache() should catch DroppedSnapshotException and abort the region server.<a name="line.2881"></a>
-<span class="sourceLineNo">2882</span>      // However, since we may have the region read lock, we cannot call close(true) here since<a name="line.2882"></a>
-<span class="sourceLineNo">2883</span>      // we cannot promote to a write lock. Instead we are setting closing so that all other region<a name="line.2883"></a>
-<span class="sourceLineNo">2884</span>      // operations except for close will be rejected.<a name="line.2884"></a>
-<span class="sourceLineNo">2885</span>      this.closing.set(true);<a name="line.2885"></a>
-<span class="sourceLineNo">2886</span><a name="line.2886"></a>
-<span class="sourceLineNo">2887</span>      if (rsServices != null) {<a name="line.2887"></a>
-<span class="sourceLineNo">2888</span>        // This is a safeguard against the case where the caller fails to explicitly handle aborting<a name="line.2888"></a>
-<span class="sourceLineNo">2889</span>        rsServices.abort("Replay of WAL required. Forcing server shutdown", dse);<a name="line.2889"></a>
-<span class="sourceLineNo">2890</span>      }<a name="line.2890"></a>
-<span class="sourceLineNo">2891</span><a name="line.2891"></a>
-<span class="sourceLineNo">2892</span>      throw dse;<a name="line.2892"></a>
-<span class="sourceLineNo">2893</span>    }<a name="line.2893"></a>
+<span class="sourceLineNo">2487</span>    if (modifiedFlushCheckInterval &lt;= 0) { //disabled<a name="line.2487"></a>
+<span class="sourceLineNo">2488</span>      return false;<a name="line.2488"></a>
+<span class="sourceLineNo">2489</span>    }<a name="line.2489"></a>
+<span class="sourceLineNo">2490</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.2490"></a>
+<span class="sourceLineNo">2491</span>    //if we flushed in the recent past, we don't need to do again now<a name="line.2491"></a>
+<span class="sourceLineNo">2492</span>    if ((now - getEarliestFlushTimeForAllStores() &lt; modifiedFlushCheckInterval)) {<a name="line.2492"></a>
+<span class="sourceLineNo">2493</span>      return false;<a name="line.2493"></a>
+<span class="sourceLineNo">2494</span>    }<a name="line.2494"></a>
+<span class="sourceLineNo">2495</span>    //since we didn't flush in the recent past, flush now if certain conditions<a name="line.2495"></a>
+<span class="sourceLineNo">2496</span>    //are met. Return true on first such memstore hit.<a name="line.2496"></a>
+<span class="sourceLineNo">2497</span>    for (HStore s : stores.values()) {<a name="line.2497"></a>
+<span class="sourceLineNo">2498</span>      if (s.timeOfOldestEdit() &lt; now - modifiedFlushCheckInterval) {<a name="line.2498"></a>
+<span class="sourceLineNo">2499</span>        // we have an old enough edit in the memstore, flush<a name="line.2499"></a>
+<span class="sourceLineNo">2500</span>        whyFlush.append(s.toString() + " has an old edit so flush to free WALs");<a name="line.2500"></a>
+<span class="sourceLineNo">2501</span>        return true;<a name="line.2501"></a>
+<span class="sourceLineNo">2502</span>      }<a name="line.2502"></a>
+<span class="sourceLineNo">2503</span>    }<a name="line.2503"></a>
+<span class="sourceLineNo">2504</span>    return false;<a name="line.2504"></a>
+<span class="sourceLineNo">2505</span>  }<a name="line.2505"></a>
+<span class="sourceLineNo">2506</span><a name="line.2506"></a>
+<span class="sourceLineNo">2507</span>  /**<a name="line.2507"></a>
+<span class="sourceLineNo">2508</span>   * Flushing all stores.<a name="line.2508"></a>
+<span class="sourceLineNo">2509</span>   * @see #internalFlushcache(Collection, MonitoredTask, boolean, FlushLifeCycleTracker)<a name="line.2509"></a>
+<span class="sourceLineNo">2510</span>   */<a name="line.2510"></a>
+<span class="sourceLineNo">2511</span>  private FlushResult internalFlushcache(MonitoredTask status) throws IOException {<a name="line.2511"></a>
+<span class="sourceLineNo">2512</span>    return internalFlushcache(stores.values(), status, false, FlushLifeCycleTracker.DUMMY);<a name="line.2512"></a>
+<span class="sourceLineNo">2513</span>  }<a name="line.2513"></a>
+<span class="sourceLineNo">2514</span><a name="line.2514"></a>
+<span class="sourceLineNo">2515</span>  /**<a name="line.2515"></a>
+<span class="sourceLineNo">2516</span>   * Flushing given stores.<a name="line.2516"></a>
+<span class="sourceLineNo">2517</span>   * @see #internalFlushcache(WAL, long, Collection, MonitoredTask, boolean, FlushLifeCycleTracker)<a name="line.2517"></a>
+<span class="sourceLineNo">2518</span>   */<a name="line.2518"></a>
+<span class="sourceLineNo">2519</span>  private FlushResultImpl internalFlushcache(Collection&lt;HStore&gt; storesToFlush, MonitoredTask status,<a name="line.2519"></a>
+<span class="sourceLineNo">2520</span>      boolean writeFlushWalMarker, FlushLifeCycleTracker tracker) throws IOException {<a name="line.2520"></a>
+<span class="sourceLineNo">2521</span>    return internalFlushcache(this.wal, HConstants.NO_SEQNUM, storesToFlush, status,<a name="line.2521"></a>
+<span class="sourceLineNo">2522</span>      writeFlushWalMarker, tracker);<a name="line.2522"></a>
+<span class="sourceLineNo">2523</span>  }<a name="line.2523"></a>
+<span class="sourceLineNo">2524</span><a name="line.2524"></a>
+<span class="sourceLineNo">2525</span>  /**<a name="line.2525"></a>
+<span class="sourceLineNo">2526</span>   * Flush the memstore. Flushing the memstore is a little tricky. We have a lot of updates in the<a name="line.2526"></a>
+<span class="sourceLineNo">2527</span>   * memstore, all of which have also been written to the wal. We need to write those updates in the<a name="line.2527"></a>
+<span class="sourceLineNo">2528</span>   * memstore out to disk, while being able to process reads/writes as much as possible during the<a name="line.2528"></a>
+<span class="sourceLineNo">2529</span>   * flush operation.<a name="line.2529"></a>
+<span class="sourceLineNo">2530</span>   * &lt;p&gt;<a name="line.2530"></a>
+<span class="sourceLineNo">2531</span>   * This method may block for some time. Every time you call it, we up the regions sequence id even<a name="line.2531"></a>
+<span class="sourceLineNo">2532</span>   * if we don't flush; i.e. the returned region id will be at least one larger than the last edit<a name="line.2532"></a>
+<span class="sourceLineNo">2533</span>   * applied to this region. The returned id does not refer to an actual edit. The returned id can<a name="line.2533"></a>
+<span class="sourceLineNo">2534</span>   * be used for say installing a bulk loaded file just ahead of the last hfile that was the result<a name="line.2534"></a>
+<span class="sourceLineNo">2535</span>   * of this flush, etc.<a name="line.2535"></a>
+<span class="sourceLineNo">2536</span>   * @param wal Null if we're NOT to go via wal.<a name="line.2536"></a>
+<span class="sourceLineNo">2537</span>   * @param myseqid The seqid to use if &lt;code&gt;wal&lt;/code&gt; is null writing out flush file.<a name="line.2537"></a>
+<span class="sourceLineNo">2538</span>   * @param storesToFlush The list of stores to flush.<a name="line.2538"></a>
+<span class="sourceLineNo">2539</span>   * @return object describing the flush's state<a name="line.2539"></a>
+<span class="sourceLineNo">2540</span>   * @throws IOException general io exceptions<a name="line.2540"></a>
+<span class="sourceLineNo">2541</span>   * @throws DroppedSnapshotException Thrown when replay of WAL is required.<a name="line.2541"></a>
+<span class="sourceLineNo">2542</span>   */<a name="line.2542"></a>
+<span class="sourceLineNo">2543</span>  protected FlushResultImpl internalFlushcache(WAL wal, long myseqid,<a name="line.2543"></a>
+<span class="sourceLineNo">2544</span>      Collection&lt;HStore&gt; storesToFlush, MonitoredTask status, boolean writeFlushWalMarker,<a name="line.2544"></a>
+<span class="sourceLineNo">2545</span>      FlushLifeCycleTracker tracker) throws IOException {<a name="line.2545"></a>
+<span class="sourceLineNo">2546</span>    PrepareFlushResult result =<a name="line.2546"></a>
+<span class="sourceLineNo">2547</span>        internalPrepareFlushCache(wal, myseqid, storesToFlush, status, writeFlushWalMarker, tracker);<a name="line.2547"></a>
+<span class="sourceLineNo">2548</span>    if (result.result == null) {<a name="line.2548"></a>
+<span class="sourceLineNo">2549</span>      return internalFlushCacheAndCommit(wal, status, result, storesToFlush);<a name="line.2549"></a>
+<span class="sourceLineNo">2550</span>    } else {<a name="line.2550"></a>
+<span class="sourceLineNo">2551</span>      return result.result; // early exit due to failure from prepare stage<a name="line.2551"></a>
+<span class="sourceLineNo">2552</span>    }<a name="line.2552"></a>
+<span class="sourceLineNo">2553</span>  }<a name="line.2553"></a>
+<span class="sourceLineNo">2554</span><a name="line.2554"></a>
+<span class="sourceLineNo">2555</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="DLS_DEAD_LOCAL_STORE",<a name="line.2555"></a>
+<span class="sourceLineNo">2556</span>      justification="FindBugs seems confused about trxId")<a name="line.2556"></a>
+<span class="sourceLineNo">2557</span>  protected PrepareFlushResult internalPrepareFlushCache(WAL wal, long myseqid,<a name="line.2557"></a>
+<span class="sourceLineNo">2558</span>      Collection&lt;HStore&gt; storesToFlush, MonitoredTask status, boolean writeFlushWalMarker,<a name="line.2558"></a>
+<span class="sourceLineNo">2559</span>      FlushLifeCycleTracker tracker) throws IOException {<a name="line.2559"></a>
+<span class="sourceLineNo">2560</span>    if (this.rsServices != null &amp;&amp; this.rsServices.isAborted()) {<a name="line.2560"></a>
+<span class="sourceLineNo">2561</span>      // Don't flush when server aborting, it's unsafe<a name="line.2561"></a>
+<span class="sourceLineNo">2562</span>      throw new IOException("Aborting flush because server is aborted...");<a name="line.2562"></a>
+<span class="sourceLineNo">2563</span>    }<a name="line.2563"></a>
+<span class="sourceLineNo">2564</span>    final long startTime = EnvironmentEdgeManager.currentTime();<a name="line.2564"></a>
+<span class="sourceLineNo">2565</span>    // If nothing to flush, return, but return with a valid unused sequenceId.<a name="line.2565"></a>
+<span class="sourceLineNo">2566</span>    // Its needed by bulk upload IIRC. It flushes until no edits in memory so it can insert a<a name="line.2566"></a>
+<span class="sourceLineNo">2567</span>    // bulk loaded file between memory and existing hfiles. It wants a good seqeunceId that belongs<a name="line.2567"></a>
+<span class="sourceLineNo">2568</span>    // to no other that it can use to associate with the bulk load. Hence this little dance below<a name="line.2568"></a>
+<span class="sourceLineNo">2569</span>    // to go get one.<a name="line.2569"></a>
+<span class="sourceLineNo">2570</span>    if (this.memStoreSizing.getDataSize() &lt;= 0) {<a name="line.2570"></a>
+<span class="sourceLineNo">2571</span>      // Take an update lock so no edits can come into memory just yet.<a name="line.2571"></a>
+<span class="sourceLineNo">2572</span>      this.updatesLock.writeLock().lock();<a name="line.2572"></a>
+<span class="sourceLineNo">2573</span>      WriteEntry writeEntry = null;<a name="line.2573"></a>
+<span class="sourceLineNo">2574</span>      try {<a name="line.2574"></a>
+<span class="sourceLineNo">2575</span>        if (this.memStoreSizing.getDataSize() &lt;= 0) {<a name="line.2575"></a>
+<span class="sourceLineNo">2576</span>          // Presume that if there are still no edits in the memstore, then there are no edits for<a name="line.2576"></a>
+<span class="sourceLineNo">2577</span>          // this region out in the WAL subsystem so no need to do any trickery clearing out<a name="line.2577"></a>
+<span class="sourceLineNo">2578</span>          // edits in the WAL sub-system. Up the sequence number so the resulting flush id is for<a name="line.2578"></a>
+<span class="sourceLineNo">2579</span>          // sure just beyond the last appended region edit and not associated with any edit<a name="line.2579"></a>
+<span class="sourceLineNo">2580</span>          // (useful as marker when bulk loading, etc.).<a name="line.2580"></a>
+<span class="sourceLineNo">2581</span>          if (wal != null) {<a name="line.2581"></a>
+<span class="sourceLineNo">2582</span>            writeEntry = mvcc.begin();<a name="line.2582"></a>
+<span class="sourceLineNo">2583</span>            long flushOpSeqId = writeEntry.getWriteNumber();<a name="line.2583"></a>
+<span class="sourceLineNo">2584</span>            FlushResultImpl flushResult =<a name="line.2584"></a>
+<span class="sourceLineNo">2585</span>                new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY, flushOpSeqId,<a name="line.2585"></a>
+<span class="sourceLineNo">2586</span>                    "Nothing to flush", writeFlushRequestMarkerToWAL(wal, writeFlushWalMarker));<a name="line.2586"></a>
+<span class="sourceLineNo">2587</span>            mvcc.completeAndWait(writeEntry);<a name="line.2587"></a>
+<span class="sourceLineNo">2588</span>            // Set to null so we don't complete it again down in finally block.<a name="line.2588"></a>
+<span class="sourceLineNo">2589</span>            writeEntry = null;<a name="line.2589"></a>
+<span class="sourceLineNo">2590</span>            return new PrepareFlushResult(flushResult, myseqid);<a name="line.2590"></a>
+<span class="sourceLineNo">2591</span>          } else {<a name="line.2591"></a>
+<span class="sourceLineNo">2592</span>            return new PrepareFlushResult(new FlushResultImpl(<a name="line.2592"></a>
+<span class="sourceLineNo">2593</span>              FlushResult.Result.CANNOT_FLUSH_MEMSTORE_EMPTY, "Nothing to flush", false), myseqid);<a name="line.2593"></a>
+<span class="sourceLineNo">2594</span>          }<a name="line.2594"></a>
+<span class="sourceLineNo">2595</span>        }<a name="line.2595"></a>
+<span class="sourceLineNo">2596</span>      } finally {<a name="line.2596"></a>
+<span class="sourceLineNo">2597</span>        if (writeEntry != null) {<a name="line.2597"></a>
+<span class="sourceLineNo">2598</span>          // If writeEntry is non-null, this operation failed; the mvcc transaction failed...<a name="line.2598"></a>
+<span class="sourceLineNo">2599</span>          // but complete it anyways so it doesn't block the mvcc queue.<a name="line.2599"></a>
+<span class="sourceLineNo">2600</span>          mvcc.complete(writeEntry);<a name="line.2600"></a>
+<span class="sourceLineNo">2601</span>        }<a name="line.2601"></a>
+<span class="sourceLineNo">2602</span>        this.updatesLock.writeLock().unlock();<a name="line.2602"></a>
+<span class="sourceLineNo">2603</span>      }<a name="line.2603"></a>
+<span class="sourceLineNo">2604</span>    }<a name="line.2604"></a>
+<span class="sourceLineNo">2605</span>    logFatLineOnFlush(storesToFlush, myseqid);<a name="line.2605"></a>
+<span class="sourceLineNo">2606</span>    // Stop updates while we snapshot the memstore of all of these regions' stores. We only have<a name="line.2606"></a>
+<span class="sourceLineNo">2607</span>    // to do this for a moment.  It is quick. We also set the memstore size to zero here before we<a name="line.2607"></a>
+<span class="sourceLineNo">2608</span>    // allow updates again so its value will represent the size of the updates received<a name="line.2608"></a>
+<span class="sourceLineNo">2609</span>    // during flush<a name="line.2609"></a>
+<span class="sourceLineNo">2610</span><a name="line.2610"></a>
+<span class="sourceLineNo">2611</span>    // We have to take an update lock during snapshot, or else a write could end up in both snapshot<a name="line.2611"></a>
+<span class="sourceLineNo">2612</span>    // and memstore (makes it difficult to do atomic rows then)<a name="line.2612"></a>
+<span class="sourceLineNo">2613</span>    status.setStatus("Obtaining lock to block concurrent updates");<a name="line.2613"></a>
+<span class="sourceLineNo">2614</span>    // block waiting for the lock for internal flush<a name="line.2614"></a>
+<span class="sourceLineNo">2615</span>    this.updatesLock.writeLock().lock();<a name="line.2615"></a>
+<span class="sourceLineNo">2616</span>    status.setStatus("Preparing flush snapshotting stores in " + getRegionInfo().getEncodedName());<a name="line.2616"></a>
+<span class="sourceLineNo">2617</span>    MemStoreSizing totalSizeOfFlushableStores = new NonThreadSafeMemStoreSizing();<a name="line.2617"></a>
+<span class="sourceLineNo">2618</span><a name="line.2618"></a>
+<span class="sourceLineNo">2619</span>    Map&lt;byte[], Long&gt; flushedFamilyNamesToSeq = new HashMap&lt;&gt;();<a name="line.2619"></a>
+<span class="sourceLineNo">2620</span>    for (HStore store : storesToFlush) {<a name="line.2620"></a>
+<span class="sourceLineNo">2621</span>      flushedFamilyNamesToSeq.put(store.getColumnFamilyDescriptor().getName(),<a name="line.2621"></a>
+<span class="sourceLineNo">2622</span>        store.preFlushSeqIDEstimation());<a name="line.2622"></a>
+<span class="sourceLineNo">2623</span>    }<a name="line.2623"></a>
+<span class="sourceLineNo">2624</span><a name="line.2624"></a>
+<span class="sourceLineNo">2625</span>    TreeMap&lt;byte[], StoreFlushContext&gt; storeFlushCtxs = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.2625"></a>
+<span class="sourceLineNo">2626</span>    TreeMap&lt;byte[], List&lt;Path&gt;&gt; committedFiles = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.2626"></a>
+<span class="sourceLineNo">2627</span>    TreeMap&lt;byte[], MemStoreSize&gt; storeFlushableSize = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.2627"></a>
+<span class="sourceLineNo">2628</span>    // The sequence id of this flush operation which is used to log FlushMarker and pass to<a name="line.2628"></a>
+<span class="sourceLineNo">2629</span>    // createFlushContext to use as the store file's sequence id. It can be in advance of edits<a name="line.2629"></a>
+<span class="sourceLineNo">2630</span>    // still in the memstore, edits that are in other column families yet to be flushed.<a name="line.2630"></a>
+<span class="sourceLineNo">2631</span>    long flushOpSeqId = HConstants.NO_SEQNUM;<a name="line.2631"></a>
+<span class="sourceLineNo">2632</span>    // The max flushed sequence id after this flush operation completes. All edits in memstore<a name="line.2632"></a>
+<span class="sourceLineNo">2633</span>    // will be in advance of this sequence id.<a name="line.2633"></a>
+<span class="sourceLineNo">2634</span>    long flushedSeqId = HConstants.NO_SEQNUM;<a name="line.2634"></a>
+<span class="sourceLineNo">2635</span>    byte[] encodedRegionName = getRegionInfo().getEncodedNameAsBytes();<a name="line.2635"></a>
+<span class="sourceLineNo">2636</span>    try {<a name="line.2636"></a>
+<span class="sourceLineNo">2637</span>      if (wal != null) {<a name="line.2637"></a>
+<span class="sourceLineNo">2638</span>        Long earliestUnflushedSequenceIdForTheRegion =<a name="line.2638"></a>
+<span class="sourceLineNo">2639</span>            wal.startCacheFlush(encodedRegionName, flushedFamilyNamesToSeq);<a name="line.2639"></a>
+<span class="sourceLineNo">2640</span>        if (earliestUnflushedSequenceIdForTheRegion == null) {<a name="line.2640"></a>
+<span class="sourceLineNo">2641</span>          // This should never happen. This is how startCacheFlush signals flush cannot proceed.<a name="line.2641"></a>
+<span class="sourceLineNo">2642</span>          String msg = this.getRegionInfo().getEncodedName() + " flush aborted; WAL closing.";<a name="line.2642"></a>
+<span class="sourceLineNo">2643</span>          status.setStatus(msg);<a name="line.2643"></a>
+<span class="sourceLineNo">2644</span>          return new PrepareFlushResult(<a name="line.2644"></a>
+<span class="sourceLineNo">2645</span>              new FlushResultImpl(FlushResult.Result.CANNOT_FLUSH, msg, false),<a name="line.2645"></a>
+<span class="sourceLineNo">2646</span>              myseqid);<a name="line.2646"></a>
+<span class="sourceLineNo">2647</span>        }<a name="line.2647"></a>
+<span class="sourceLineNo">2648</span>        flushOpSeqId = getNextSequenceId(wal);<a name="line.2648"></a>
+<span class="sourceLineNo">2649</span>        // Back up 1, minus 1 from oldest sequence id in memstore to get last 'flushed' edit<a name="line.2649"></a>
+<span class="sourceLineNo">2650</span>        flushedSeqId =<a name="line.2650"></a>
+<span class="sourceLineNo">2651</span>            earliestUnflushedSequenceIdForTheRegion.longValue() == HConstants.NO_SEQNUM?<a name="line.2651"></a>
+<span class="sourceLineNo">2652</span>                flushOpSeqId: earliestUnflushedSequenceIdForTheRegion.longValue() - 1;<a name="line.2652"></a>
+<span class="sourceLineNo">2653</span>      } else {<a name="line.2653"></a>
+<span class="sourceLineNo">2654</span>        // use the provided sequence Id as WAL is not being used for this flush.<a name="line.2654"></a>
+<span class="sourceLineNo">2655</span>        flushedSeqId = flushOpSeqId = myseqid;<a name="line.2655"></a>
+<span class="sourceLineNo">2656</span>      }<a name="line.2656"></a>
+<span class="sourceLineNo">2657</span><a name="line.2657"></a>
+<span class="sourceLineNo">2658</span>      for (HStore s : storesToFlush) {<a name="line.2658"></a>
+<span class="sourceLineNo">2659</span>        storeFlushCtxs.put(s.getColumnFamilyDescriptor().getName(),<a name="line.2659"></a>
+<span class="sourceLineNo">2660</span>          s.createFlushContext(flushOpSeqId, tracker));<a name="line.2660"></a>
+<span class="sourceLineNo">2661</span>        // for writing stores to WAL<a name="line.2661"></a>
+<span class="sourceLineNo">2662</span>        committedFiles.put(s.getColumnFamilyDescriptor().getName(), null);<a name="line.2662"></a>
+<span class="sourceLineNo">2663</span>      }<a name="line.2663"></a>
+<span class="sourceLineNo">2664</span><a name="line.2664"></a>
+<span class="sourceLineNo">2665</span>      // write the snapshot start to WAL<a name="line.2665"></a>
+<span class="sourceLineNo">2666</span>      if (wal != null &amp;&amp; !writestate.readOnly) {<a name="line.2666"></a>
+<span class="sourceLineNo">2667</span>        FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.START_FLUSH,<a name="line.2667"></a>
+<span class="sourceLineNo">2668</span>            getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2668"></a>
+<span class="sourceLineNo">2669</span>        // No sync. Sync is below where no updates lock and we do FlushAction.COMMIT_FLUSH<a name="line.2669"></a>
+<span class="sourceLineNo">2670</span>        WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, false,<a name="line.2670"></a>
+<span class="sourceLineNo">2671</span>            mvcc);<a name="line.2671"></a>
+<span class="sourceLineNo">2672</span>      }<a name="line.2672"></a>
+<span class="sourceLineNo">2673</span><a name="line.2673"></a>
+<span class="sourceLineNo">2674</span>      // Prepare flush (take a snapshot)<a name="line.2674"></a>
+<span class="sourceLineNo">2675</span>      storeFlushCtxs.forEach((name, flush) -&gt; {<a name="line.2675"></a>
+<span class="sourceLineNo">2676</span>        MemStoreSize snapshotSize = flush.prepare();<a name="line.2676"></a>
+<span class="sourceLineNo">2677</span>        totalSizeOfFlushableStores.incMemStoreSize(snapshotSize);<a name="line.2677"></a>
+<span class="sourceLineNo">2678</span>        storeFlushableSize.put(name, snapshotSize);<a name="line.2678"></a>
+<span class="sourceLineNo">2679</span>      });<a name="line.2679"></a>
+<span class="sourceLineNo">2680</span>    } catch (IOException ex) {<a name="line.2680"></a>
+<span class="sourceLineNo">2681</span>      doAbortFlushToWAL(wal, flushOpSeqId, committedFiles);<a name="line.2681"></a>
+<span class="sourceLineNo">2682</span>      throw ex;<a name="line.2682"></a>
+<span class="sourceLineNo">2683</span>    } finally {<a name="line.2683"></a>
+<span class="sourceLineNo">2684</span>      this.updatesLock.writeLock().unlock();<a name="line.2684"></a>
+<span class="sourceLineNo">2685</span>    }<a name="line.2685"></a>
+<span class="sourceLineNo">2686</span>    String s = "Finished memstore snapshotting " + this + ", syncing WAL and waiting on mvcc, " +<a name="line.2686"></a>
+<span class="sourceLineNo">2687</span>        "flushsize=" + totalSizeOfFlushableStores;<a name="line.2687"></a>
+<span class="sourceLineNo">2688</span>    status.setStatus(s);<a name="line.2688"></a>
+<span class="sourceLineNo">2689</span>    doSyncOfUnflushedWALChanges(wal, getRegionInfo());<a name="line.2689"></a>
+<span class="sourceLineNo">2690</span>    return new PrepareFlushResult(storeFlushCtxs, committedFiles, storeFlushableSize, startTime,<a name="line.2690"></a>
+<span class="sourceLineNo">2691</span>        flushOpSeqId, flushedSeqId, totalSizeOfFlushableStores);<a name="line.2691"></a>
+<span class="sourceLineNo">2692</span>  }<a name="line.2692"></a>
+<span class="sourceLineNo">2693</span><a name="line.2693"></a>
+<span class="sourceLineNo">2694</span>  /**<a name="line.2694"></a>
+<span class="sourceLineNo">2695</span>   * Utility method broken out of internalPrepareFlushCache so that method is smaller.<a name="line.2695"></a>
+<span class="sourceLineNo">2696</span>   */<a name="line.2696"></a>
+<span class="sourceLineNo">2697</span>  private void logFatLineOnFlush(Collection&lt;HStore&gt; storesToFlush, long sequenceId) {<a name="line.2697"></a>
+<span class="sourceLineNo">2698</span>    if (!LOG.isInfoEnabled()) {<a name="line.2698"></a>
+<span class="sourceLineNo">2699</span>      return;<a name="line.2699"></a>
+<span class="sourceLineNo">2700</span>    }<a name="line.2700"></a>
+<span class="sourceLineNo">2701</span>    // Log a fat line detailing what is being flushed.<a name="line.2701"></a>
+<span class="sourceLineNo">2702</span>    StringBuilder perCfExtras = null;<a name="line.2702"></a>
+<span class="sourceLineNo">2703</span>    if (!isAllFamilies(storesToFlush)) {<a name="line.2703"></a>
+<span class="sourceLineNo">2704</span>      perCfExtras = new StringBuilder();<a name="line.2704"></a>
+<span class="sourceLineNo">2705</span>      for (HStore store: storesToFlush) {<a name="line.2705"></a>
+<span class="sourceLineNo">2706</span>        MemStoreSize mss = store.getFlushableSize();<a name="line.2706"></a>
+<span class="sourceLineNo">2707</span>        perCfExtras.append("; ").append(store.getColumnFamilyName());<a name="line.2707"></a>
+<span class="sourceLineNo">2708</span>        perCfExtras.append("={dataSize=")<a name="line.2708"></a>
+<span class="sourceLineNo">2709</span>            .append(StringUtils.byteDesc(mss.getDataSize()));<a name="line.2709"></a>
+<span class="sourceLineNo">2710</span>        perCfExtras.append(", heapSize=")<a name="line.2710"></a>
+<span class="sourceLineNo">2711</span>            .append(StringUtils.byteDesc(mss.getHeapSize()));<a name="line.2711"></a>
+<span class="sourceLineNo">2712</span>        perCfExtras.append(", offHeapSize=")<a name="line.2712"></a>
+<span class="sourceLineNo">2713</span>            .append(StringUtils.byteDesc(mss.getOffHeapSize()));<a name="line.2713"></a>
+<span class="sourceLineNo">2714</span>        perCfExtras.append("}");<a name="line.2714"></a>
+<span class="sourceLineNo">2715</span>      }<a name="line.2715"></a>
+<span class="sourceLineNo">2716</span>    }<a name="line.2716"></a>
+<span class="sourceLineNo">2717</span>    MemStoreSize mss = this.memStoreSizing.getMemStoreSize();<a name="line.2717"></a>
+<span class="sourceLineNo">2718</span>    LOG.info("Flushing " + storesToFlush.size() + "/" + stores.size() + " column families," +<a name="line.2718"></a>
+<span class="sourceLineNo">2719</span>        " dataSize=" + StringUtils.byteDesc(mss.getDataSize()) +<a name="line.2719"></a>
+<span class="sourceLineNo">2720</span>        " heapSize=" + StringUtils.byteDesc(mss.getHeapSize()) +<a name="line.2720"></a>
+<span class="sourceLineNo">2721</span>        ((perCfExtras != null &amp;&amp; perCfExtras.length() &gt; 0)? perCfExtras.toString(): "") +<a name="line.2721"></a>
+<span class="sourceLineNo">2722</span>        ((wal != null) ? "" : "; WAL is null, using passed sequenceid=" + sequenceId));<a name="line.2722"></a>
+<span class="sourceLineNo">2723</span>  }<a name="line.2723"></a>
+<span class="sourceLineNo">2724</span><a name="line.2724"></a>
+<span class="sourceLineNo">2725</span>  private void doAbortFlushToWAL(final WAL wal, final long flushOpSeqId,<a name="line.2725"></a>
+<span class="sourceLineNo">2726</span>      final Map&lt;byte[], List&lt;Path&gt;&gt; committedFiles) {<a name="line.2726"></a>
+<span class="sourceLineNo">2727</span>    if (wal == null) return;<a name="line.2727"></a>
+<span class="sourceLineNo">2728</span>    try {<a name="line.2728"></a>
+<span class="sourceLineNo">2729</span>      FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.ABORT_FLUSH,<a name="line.2729"></a>
+<span class="sourceLineNo">2730</span>          getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2730"></a>
+<span class="sourceLineNo">2731</span>      WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, false,<a name="line.2731"></a>
+<span class="sourceLineNo">2732</span>          mvcc);<a name="line.2732"></a>
+<span class="sourceLineNo">2733</span>    } catch (Throwable t) {<a name="line.2733"></a>
+<span class="sourceLineNo">2734</span>      LOG.warn("Received unexpected exception trying to write ABORT_FLUSH marker to WAL:" +<a name="line.2734"></a>
+<span class="sourceLineNo">2735</span>          StringUtils.stringifyException(t));<a name="line.2735"></a>
+<span class="sourceLineNo">2736</span>      // ignore this since we will be aborting the RS with DSE.<a name="line.2736"></a>
+<span class="sourceLineNo">2737</span>    }<a name="line.2737"></a>
+<span class="sourceLineNo">2738</span>    // we have called wal.startCacheFlush(), now we have to abort it<a name="line.2738"></a>
+<span class="sourceLineNo">2739</span>    wal.abortCacheFlush(this.getRegionInfo().getEncodedNameAsBytes());<a name="line.2739"></a>
+<span class="sourceLineNo">2740</span>  }<a name="line.2740"></a>
+<span class="sourceLineNo">2741</span><a name="line.2741"></a>
+<span class="sourceLineNo">2742</span>  /**<a name="line.2742"></a>
+<span class="sourceLineNo">2743</span>   * Sync unflushed WAL changes. See HBASE-8208 for details<a name="line.2743"></a>
+<span class="sourceLineNo">2744</span>   */<a name="line.2744"></a>
+<span class="sourceLineNo">2745</span>  private static void doSyncOfUnflushedWALChanges(final WAL wal, final RegionInfo hri)<a name="line.2745"></a>
+<span class="sourceLineNo">2746</span>  throws IOException {<a name="line.2746"></a>
+<span class="sourceLineNo">2747</span>    if (wal == null) {<a name="line.2747"></a>
+<span class="sourceLineNo">2748</span>      return;<a name="line.2748"></a>
+<span class="sourceLineNo">2749</span>    }<a name="line.2749"></a>
+<span class="sourceLineNo">2750</span>    try {<a name="line.2750"></a>
+<span class="sourceLineNo">2751</span>      wal.sync(); // ensure that flush marker is sync'ed<a name="line.2751"></a>
+<span class="sourceLineNo">2752</span>    } catch (IOException ioe) {<a name="line.2752"></a>
+<span class="sourceLineNo">2753</span>      wal.abortCacheFlush(hri.getEncodedNameAsBytes());<a name="line.2753"></a>
+<span class="sourceLineNo">2754</span>      throw ioe;<a name="line.2754"></a>
+<span class="sourceLineNo">2755</span>    }<a name="line.2755"></a>
+<span class="sourceLineNo">2756</span>  }<a name="line.2756"></a>
+<span class="sourceLineNo">2757</span><a name="line.2757"></a>
+<span class="sourceLineNo">2758</span>  /**<a name="line.2758"></a>
+<span class="sourceLineNo">2759</span>   * @return True if passed Set is all families in the region.<a name="line.2759"></a>
+<span class="sourceLineNo">2760</span>   */<a name="line.2760"></a>
+<span class="sourceLineNo">2761</span>  private boolean isAllFamilies(Collection&lt;HStore&gt; families) {<a name="line.2761"></a>
+<span class="sourceLineNo">2762</span>    return families == null || this.stores.size() == families.size();<a name="line.2762"></a>
+<span class="sourceLineNo">2763</span>  }<a name="line.2763"></a>
+<span class="sourceLineNo">2764</span><a name="line.2764"></a>
+<span class="sourceLineNo">2765</span>  /**<a name="line.2765"></a>
+<span class="sourceLineNo">2766</span>   * Writes a marker to WAL indicating a flush is requested but cannot be complete due to various<a name="line.2766"></a>
+<span class="sourceLineNo">2767</span>   * reasons. Ignores exceptions from WAL. Returns whether the write succeeded.<a name="line.2767"></a>
+<span class="sourceLineNo">2768</span>   * @param wal<a name="line.2768"></a>
+<span class="sourceLineNo">2769</span>   * @return whether WAL write was successful<a name="line.2769"></a>
+<span class="sourceLineNo">2770</span>   */<a name="line.2770"></a>
+<span class="sourceLineNo">2771</span>  private boolean writeFlushRequestMarkerToWAL(WAL wal, boolean writeFlushWalMarker) {<a name="line.2771"></a>
+<span class="sourceLineNo">2772</span>    if (writeFlushWalMarker &amp;&amp; wal != null &amp;&amp; !writestate.readOnly) {<a name="line.2772"></a>
+<span class="sourceLineNo">2773</span>      FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.CANNOT_FLUSH,<a name="line.2773"></a>
+<span class="sourceLineNo">2774</span>        getRegionInfo(), -1, new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR));<a name="line.2774"></a>
+<span class="sourceLineNo">2775</span>      try {<a name="line.2775"></a>
+<span class="sourceLineNo">2776</span>        WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, true,<a name="line.2776"></a>
+<span class="sourceLineNo">2777</span>            mvcc);<a name="line.2777"></a>
+<span class="sourceLineNo">2778</span>        return true;<a name="line.2778"></a>
+<span class="sourceLineNo">2779</span>      } catch (IOException e) {<a name="line.2779"></a>
+<span class="sourceLineNo">2780</span>        LOG.warn(getRegionInfo().getEncodedName() + " : "<a name="line.2780"></a>
+<span class="sourceLineNo">2781</span>            + "Received exception while trying to write the flush request to wal", e);<a name="line.2781"></a>
+<span class="sourceLineNo">2782</span>      }<a name="line.2782"></a>
+<span class="sourceLineNo">2783</span>    }<a name="line.2783"></a>
+<span class="sourceLineNo">2784</span>    return false;<a name="line.2784"></a>
+<span class="sourceLineNo">2785</span>  }<a name="line.2785"></a>
+<span class="sourceLineNo">2786</span><a name="line.2786"></a>
+<span class="sourceLineNo">2787</span>  @edu.umd.cs.findbugs.annotations.SuppressWarnings(value="NN_NAKED_NOTIFY",<a name="line.2787"></a>
+<span class="sourceLineNo">2788</span>      justification="Intentional; notify is about completed flush")<a name="line.2788"></a>
+<span class="sourceLineNo">2789</span>  protected FlushResultImpl internalFlushCacheAndCommit(WAL wal, MonitoredTask status,<a name="line.2789"></a>
+<span class="sourceLineNo">2790</span>      PrepareFlushResult prepareResult, Collection&lt;HStore&gt; storesToFlush) throws IOException {<a name="line.2790"></a>
+<span class="sourceLineNo">2791</span>    // prepare flush context is carried via PrepareFlushResult<a name="line.2791"></a>
+<span class="sourceLineNo">2792</span>    TreeMap&lt;byte[], StoreFlushContext&gt; storeFlushCtxs = prepareResult.storeFlushCtxs;<a name="line.2792"></a>
+<span class="sourceLineNo">2793</span>    TreeMap&lt;byte[], List&lt;Path&gt;&gt; committedFiles = prepareResult.committedFiles;<a name="line.2793"></a>
+<span class="sourceLineNo">2794</span>    long startTime = prepareResult.startTime;<a name="line.2794"></a>
+<span class="sourceLineNo">2795</span>    long flushOpSeqId = prepareResult.flushOpSeqId;<a name="line.2795"></a>
+<span class="sourceLineNo">2796</span>    long flushedSeqId = prepareResult.flushedSeqId;<a name="line.2796"></a>
+<span class="sourceLineNo">2797</span><a name="line.2797"></a>
+<span class="sourceLineNo">2798</span>    String s = "Flushing stores of " + this;<a name="line.2798"></a>
+<span class="sourceLineNo">2799</span>    status.setStatus(s);<a name="line.2799"></a>
+<span class="sourceLineNo">2800</span>    if (LOG.isTraceEnabled()) LOG.trace(s);<a name="line.2800"></a>
+<span class="sourceLineNo">2801</span><a name="line.2801"></a>
+<span class="sourceLineNo">2802</span>    // Any failure from here on out will be catastrophic requiring server<a name="line.2802"></a>
+<span class="sourceLineNo">2803</span>    // restart so wal content can be replayed and put back into the memstore.<a name="line.2803"></a>
+<span class="sourceLineNo">2804</span>    // Otherwise, the snapshot content while backed up in the wal, it will not<a name="line.2804"></a>
+<span class="sourceLineNo">2805</span>    // be part of the current running servers state.<a name="line.2805"></a>
+<span class="sourceLineNo">2806</span>    boolean compactionRequested = false;<a name="line.2806"></a>
+<span class="sourceLineNo">2807</span>    long flushedOutputFileSize = 0;<a name="line.2807"></a>
+<span class="sourceLineNo">2808</span>    try {<a name="line.2808"></a>
+<span class="sourceLineNo">2809</span>      // A.  Flush memstore to all the HStores.<a name="line.2809"></a>
+<span class="sourceLineNo">2810</span>      // Keep running vector of all store files that includes both old and the<a name="line.2810"></a>
+<span class="sourceLineNo">2811</span>      // just-made new flush store file. The new flushed file is still in the<a name="line.2811"></a>
+<span class="sourceLineNo">2812</span>      // tmp directory.<a name="line.2812"></a>
+<span class="sourceLineNo">2813</span><a name="line.2813"></a>
+<span class="sourceLineNo">2814</span>      for (StoreFlushContext flush : storeFlushCtxs.values()) {<a name="line.2814"></a>
+<span class="sourceLineNo">2815</span>        flush.flushCache(status);<a name="line.2815"></a>
+<span class="sourceLineNo">2816</span>      }<a name="line.2816"></a>
+<span class="sourceLineNo">2817</span><a name="line.2817"></a>
+<span class="sourceLineNo">2818</span>      // Switch snapshot (in memstore) -&gt; new hfile (thus causing<a name="line.2818"></a>
+<span class="sourceLineNo">2819</span>      // all the store scanners to reset/reseek).<a name="line.2819"></a>
+<span class="sourceLineNo">2820</span>      Iterator&lt;HStore&gt; it = storesToFlush.iterator();<a name="line.2820"></a>
+<span class="sourceLineNo">2821</span>      // stores.values() and storeFlushCtxs have same order<a name="line.2821"></a>
+<span class="sourceLineNo">2822</span>      for (StoreFlushContext flush : storeFlushCtxs.values()) {<a name="line.2822"></a>
+<span class="sourceLineNo">2823</span>        boolean needsCompaction = flush.commit(status);<a name="line.2823"></a>
+<span class="sourceLineNo">2824</span>        if (needsCompaction) {<a name="line.2824"></a>
+<span class="sourceLineNo">2825</span>          compactionRequested = true;<a name="line.2825"></a>
+<span class="sourceLineNo">2826</span>        }<a name="line.2826"></a>
+<span class="sourceLineNo">2827</span>        byte[] storeName = it.next().getColumnFamilyDescriptor().getName();<a name="line.2827"></a>
+<span class="sourceLineNo">2828</span>        List&lt;Path&gt; storeCommittedFiles = flush.getCommittedFiles();<a name="line.2828"></a>
+<span class="sourceLineNo">2829</span>        committedFiles.put(storeName, storeCommittedFiles);<a name="line.2829"></a>
+<span class="sourceLineNo">2830</span>        // Flush committed no files, indicating flush is empty or flush was canceled<a name="line.2830"></a>
+<span class="sourceLineNo">2831</span>        if (storeCommittedFiles == null || storeCommittedFiles.isEmpty()) {<a name="line.2831"></a>
+<span class="sourceLineNo">2832</span>          MemStoreSize storeFlushableSize = prepareResult.storeFlushableSize.get(storeName);<a name="line.2832"></a>
+<span class="sourceLineNo">2833</span>          prepareResult.totalFlushableSize.decMemStoreSize(storeFlushableSize);<a name="line.2833"></a>
+<span class="sourceLineNo">2834</span>        }<a name="line.2834"></a>
+<span class="sourceLineNo">2835</span>        flushedOutputFileSize += flush.getOutputFileSize();<a name="line.2835"></a>
+<span class="sourceLineNo">2836</span>      }<a name="line.2836"></a>
+<span class="sourceLineNo">2837</span>      storeFlushCtxs.clear();<a name="line.2837"></a>
+<span class="sourceLineNo">2838</span><a name="line.2838"></a>
+<span class="sourceLineNo">2839</span>      // Set down the memstore size by amount of flush.<a name="line.2839"></a>
+<span class="sourceLineNo">2840</span>      MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2840"></a>
+<span class="sourceLineNo">2841</span>      this.decrMemStoreSize(mss);<a name="line.2841"></a>
+<span class="sourceLineNo">2842</span><a name="line.2842"></a>
+<span class="sourceLineNo">2843</span>      // Increase the size of this Region for the purposes of quota. Noop if quotas are disabled.<a name="line.2843"></a>
+<span class="sourceLineNo">2844</span>      // During startup, quota manager may not be initialized yet.<a name="line.2844"></a>
+<span class="sourceLineNo">2845</span>      if (rsServices != null) {<a name="line.2845"></a>
+<span class="sourceLineNo">2846</span>        RegionServerSpaceQuotaManager quotaManager = rsServices.getRegionServerSpaceQuotaManager();<a name="line.2846"></a>
+<span class="sourceLineNo">2847</span>        if (quotaManager != null) {<a name="line.2847"></a>
+<span class="sourceLineNo">2848</span>          quotaManager.getRegionSizeStore().incrementRegionSize(<a name="line.2848"></a>
+<span class="sourceLineNo">2849</span>              this.getRegionInfo(), flushedOutputFileSize);<a name="line.2849"></a>
+<span class="sourceLineNo">2850</span>        }<a name="line.2850"></a>
+<span class="sourceLineNo">2851</span>      }<a name="line.2851"></a>
+<span class="sourceLineNo">2852</span><a name="line.2852"></a>
+<span class="sourceLineNo">2853</span>      if (wal != null) {<a name="line.2853"></a>
+<span class="sourceLineNo">2854</span>        // write flush marker to WAL. If fail, we should throw DroppedSnapshotException<a name="line.2854"></a>
+<span class="sourceLineNo">2855</span>        FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.COMMIT_FLUSH,<a name="line.2855"></a>
+<span class="sourceLineNo">2856</span>          getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2856"></a>
+<span class="sourceLineNo">2857</span>        WALUtil.writeFlushMarker(wal, this.getReplicationScope(), getRegionInfo(), desc, true,<a name="line.2857"></a>
+<span class="sourceLineNo">2858</span>            mvcc);<a name="line.2858"></a>
+<span class="sourceLineNo">2859</span>      }<a name="line.2859"></a>
+<span class="sourceLineNo">2860</span>    } catch (Throwable t) {<a name="line.2860"></a>
+<span class="sourceLineNo">2861</span>      // An exception here means that the snapshot was not persisted.<a name="line.2861"></a>
+<span class="sourceLineNo">2862</span>      // The wal needs to be replayed so its content is restored to memstore.<a name="line.2862"></a>
+<span class="sourceLineNo">2863</span>      // Currently, only a server restart will do this.<a name="line.2863"></a>
+<span class="sourceLineNo">2864</span>      // We used to only catch IOEs but its possible that we'd get other<a name="line.2864"></a>
+<span class="sourceLineNo">2865</span>      // exceptions -- e.g. HBASE-659 was about an NPE -- so now we catch<a name="line.2865"></a>
+<span class="sourceLineNo">2866</span>      // all and sundry.<a name="line.2866"></a>
+<span class="sourceLineNo">2867</span>      if (wal != null) {<a name="line.2867"></a>
+<span class="sourceLineNo">2868</span>        try {<a name="line.2868"></a>
+<span class="sourceLineNo">2869</span>          FlushDescriptor desc = ProtobufUtil.toFlushDescriptor(FlushAction.ABORT_FLUSH,<a name="line.2869"></a>
+<span class="sourceLineNo">2870</span>            getRegionInfo(), flushOpSeqId, committedFiles);<a name="line.2870"></a>
+<span class="sourceLineNo">2871</span>          WALUtil.writeFlushMarker(wal, this.replicationScope, getRegionInfo(), desc, false, mvcc);<a name="line.2871"></a>
+<span class="sourceLineNo">2872</span>        } catch (Throwable ex) {<a name="line.2872"></a>
+<span class="sourceLineNo">2873</span>          LOG.warn(getRegionInfo().getEncodedName() + " : "<a name="line.2873"></a>
+<span class="sourceLineNo">2874</span>              + "failed writing ABORT_FLUSH marker to WAL", ex);<a name="line.2874"></a>
+<span class="sourceLineNo">2875</span>          // ignore this since we will be aborting the RS with DSE.<a name="line.2875"></a>
+<span class="sourceLineNo">2876</span>        }<a name="line.2876"></a>
+<span class="sourceLineNo">2877</span>        wal.abortCacheFlush(this.getRegionInfo().getEncodedNameAsBytes());<a name="line.2877"></a>
+<span class="sourceLineNo">2878</span>      }<a name="line.2878"></a>
+<span class="sourceLineNo">2879</span>      DroppedSnapshotException dse = new DroppedSnapshotException("region: " +<a name="line.2879"></a>
+<span class="sourceLineNo">2880</span>          Bytes.toStringBinary(getRegionInfo().getRegionName()));<a name="line.2880"></a>
+<span class="sourceLineNo">2881</span>      dse.initCause(t);<a name="line.2881"></a>
+<span class="sourceLineNo">2882</span>      status.abort("Flush failed: " + StringUtils.stringifyException(t));<a name="line.2882"></a>
+<span class="sourceLineNo">2883</span><a name="line.2883"></a>
+<span class="sourceLineNo">2884</span>      // Callers for flushcache() should catch DroppedSnapshotException and abort the region server.<a name="line.2884"></a>
+<span class="sourceLineNo">2885</span>      // However, since we may have the region read lock, we cannot call close(true) here since<a name="line.2885"></a>
+<span class="sourceLineNo">2886</span>      // we cannot promote to a write lock. Instead we are setting closing so that all other region<a name="line.2886"></a>
+<span class="sourceLineNo">2887</span>      // operations except for close will be rejected.<a name="line.2887"></a>
+<span class="sourceLineNo">2888</span>      this.closing.set(true);<a name="line.2888"></a>
+<span class="sourceLineNo">2889</span><a name="line.2889"></a>
+<span class="sourceLineNo">2890</span>      if (rsServices != null) {<a name="line.2890"></a>
+<span class="sourceLineNo">2891</span>        // This is a safeguard against the case where the caller fails to explicitly handle aborting<a name="line.2891"></a>
+<span class="sourceLineNo">2892</span>        rsServices.abort("Replay of WAL required. Forcing server shutdown", dse);<a name="line.2892"></a>
+<span class="sourceLineNo">2893</span>      }<a name="line.2893"></a>
 <span class="sourceLineNo">2894</span><a name="line.2894"></a>
-<span class="sourceLineNo">2895</span>    // If we get to here, the HStores have been written.<a name="line.2895"></a>
-<span class="sourceLineNo">2896</span>    if (wal != null) {<a name="line.2896"></a>
-<span class="sourceLineNo">2897</span>      wal.completeCacheFlush(this.getRegionInfo().getEncodedNameAsBytes());<a name="line.2897"></a>
-<span class="sourceLineNo">2898</span>    }<a name="line.2898"></a>
-<span class="sourceLineNo">2899</span><a name="line.2899"></a>
-<span class="sourceLineNo">2900</span>    // Record latest flush time<a name="line.2900"></a>
-<span class="sourceLineNo">2901</span>    for (HStore store: storesToFlush) {<a name="line.2901"></a>
-<span class="sourceLineNo">2902</span>      this.lastStoreFlushTimeMap.put(store, startTime);<a name="line.2902"></a>
-<span class="sourceLineNo">2903</span>    }<a name="line.2903"></a>
-<span class="sourceLineNo">2904</span><a name="line.2904"></a>
-<span class="sourceLineNo">2905</span>    this.maxFlushedSeqId = flushedSeqId;<a name="line.2905"></a>
-<span class="sourceLineNo">2906</span>    this.lastFlushOpSeqId = flushOpSeqId;<a name="line.2906"></a>
+<span class="sourceLineNo">2895</span>      throw dse;<a name="line.2895"></a>
+<span class="sourceLineNo">2896</span>    }<a name="line.2896"></a>
+<span class="sourceLineNo">2897</span><a name="line.2897"></a>
+<span class="sourceLineNo">2898</span>    // If we get to here, the HStores have been written.<a name="line.2898"></a>
+<span class="sourceLineNo">2899</span>    if (wal != null) {<a name="line.2899"></a>
+<span class="sourceLineNo">2900</span>      wal.completeCacheFlush(this.getRegionInfo().getEncodedNameAsBytes());<a name="line.2900"></a>
+<span class="sourceLineNo">2901</span>    }<a name="line.2901"></a>
+<span class="sourceLineNo">2902</span><a name="line.2902"></a>
+<span class="sourceLineNo">2903</span>    // Record latest flush time<a name="line.2903"></a>
+<span class="sourceLineNo">2904</span>    for (HStore store: storesToFlush) {<a name="line.2904"></a>
+<span class="sourceLineNo">2905</span>      this.lastStoreFlushTimeMap.put(store, startTime);<a name="line.2905"></a>
+<span class="sourceLineNo">2906</span>    }<a name="line.2906"></a>
 <span class="sourceLineNo">2907</span><a name="line.2907"></a>
-<span class="sourceLineNo">2908</span>    // C. Finally notify anyone waiting on memstore to clear:<a name="line.2908"></a>
-<span class="sourceLineNo">2909</span>    // e.g. checkResources().<a name="line.2909"></a>
-<span class="sourceLineNo">2910</span>    synchronized (this) {<a name="line.2910"></a>
-<span class="sourceLineNo">2911</span>      notifyAll(); // FindBugs NN_NAKED_NOTIFY<a name="line.2911"></a>
-<span class="sourceLineNo">2912</span>    }<a name="line.2912"></a>
-<span class="sourceLineNo">2913</span><a name="line.2913"></a>
-<span class="sourceLineNo">2914</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2914"></a>
-<span class="sourceLineNo">2915</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2915"></a>
-<span class="sourceLineNo">2916</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2916"></a>
-<span class="sourceLineNo">2917</span>    String msg = "Finished flush of"<a name="line.2917"></a>
-<span class="sourceLineNo">2918</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2918"></a>
-<span class="sourceLineNo">2919</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2919"></a>
-<span class="sourceLineNo">2920</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2920"></a>
-<span class="sourceLineNo">2921</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2921"></a>
-<span class="sourceLineNo">2922</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2922"></a>
-<span class="sourceLineNo">2923</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2923"></a>
-<span class="sourceLineNo">2924</span>    LOG.info(msg);<a name="line.2924"></a>
-<span class="sourceLineNo">2925</span>    status.setStatus(msg);<a name="line.2925"></a>
-<span class="sourceLineNo">2926</span><a name="line.2926"></a>
-<span class="sourceLineNo">2927</span>    if (rsServices != null &amp;&amp; rsServices.getMetrics() != null) {<a name="line.2927"></a>
-<span class="sourceLineNo">2928</span>      rsServices.getMetrics().updateFlush(getTableDescriptor().getTableName().getNameAsString(),<a name="line.2928"></a>
-<span class="sourceLineNo">2929</span>          time,<a name="line.2929"></a>
-<span class="sourceLineNo">2930</span>          mss.getDataSize(), flushedOutputFileSize);<a name="line.2930"></a>
-<span class="sourceLineNo">2931</span>    }<a name="line.2931"></a>
-<span class="sourceLineNo">2932</span><a name="line.2932"></a>
-<span class="sourceLineNo">2933</span>    return new FlushResultImpl(compactionRequested ?<a name="line.2933"></a>
-<span class="sourceLineNo">2934</span>        FlushResult.Result.FLUSHED_COMPACTION_NEEDED :<a name="line.2934"></a>
-<span class="sourceLineNo">2935</span>          FlushResult.Result.FLUSHED_NO_COMPACTION_NEEDED, flushOpSeqId);<a name="line.2935"></a>
-<span class="sourceLineNo">2936</span>  }<a name="line.2936"></a>
-<span class="sourceLineNo">2937</span><a name="line.2937"></a>
-<span class="sourceLineNo">2938</span>  /**<a name="line.2938"></a>
-<span class="sourceLineNo">2939</span>   * Method to safely get the next sequence number.<a name="line.2939"></a>
-<span class="sourceLineNo">2940</span>   * @return Next sequence number unassociated with any actual edit.<a name="line.2940"></a>
-<span class="sourceLineNo">2941</span>   * @throws IOException<a name="line.2941"></a>
-<span class="sourceLineNo">2942</span>   */<a name="line.2942"></a>
-<span class="sourceLineNo">2943</span>  @VisibleForTesting<a name="line.2943"></a>
-<span class="sourceLineNo">2944</span>  protected long getNextSequenceId(final WAL wal) throws IOException {<a name="line.2944"></a>
-<span class="sourceLineNo">2945</span>    WriteEntry we = mvcc.begin();<a name="line.2945"></a>
-<span class="sourceLineNo">2946</span>    mvcc.completeAndWait(we);<a name="line.2946"></a>
-<span class="sourceLineNo">2947</span>    return we.getWriteNumber();<a name="line.2947"></a>
-<span class="sourceLineNo">2948</span>  }<a name="line.2948"></a>
-<span class="sourceLineNo">2949</span><a name="line.2949"></a>
-<span class="sourceLineNo">2950</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2950"></a>
-<span class="sourceLineNo">2951</span>  // get() methods for client use.<a name="line.2951"></a>
-<span class="sourceLineNo">2952</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2952"></a>
-<span class="sourceLineNo">2953</span><a name="line.2953"></a>
-<span class="sourceLineNo">2954</span>  @Override<a name="line.2954"></a>
-<span class="sourceLineNo">2955</span>  public RegionScannerImpl getScanner(Scan scan) throws IOException {<a name="line.2955"></a>
-<span class="sourceLineNo">2956</span>   return getScanner(scan, null);<a name="line.2956"></a>
-<span class="sourceLineNo">2957</span>  }<a name="line.2957"></a>
-<span class="sourceLineNo">2958</span><a name="line.2958"></a>
-<span class="sourceLineNo">2959</span>  @Override<a name="line.2959"></a>
-<span class="sourceLineNo">2960</span>  public RegionScannerImpl getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners)<a name="line.2960"></a>
-<span class="sourceLineNo">2961</span>      throws IOException {<a name="line.2961"></a>
-<span class="sourceLineNo">2962</span>    return getScanner(scan, additionalScanners, HConstants.NO_NONCE, HConstants.NO_NONCE);<a name="line.2962"></a>
-<span class="sourceLineNo">2963</span>  }<a name="line.2963"></a>
-<span class="sourceLineNo">2964</span><a name="line.2964"></a>
-<span class="sourceLineNo">2965</span>  private RegionScannerImpl getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.2965"></a>
-<span class="sourceLineNo">2966</span>      long nonceGroup, long nonce) throws IOException {<a name="line.2966"></a>
-<span class="sourceLineNo">2967</span>    startRegionOperation(Operation.SCAN);<a name="line.2967"></a>
-<span class="sourceLineNo">2968</span>    try {<a name="line.2968"></a>
-<span class="sourceLineNo">2969</span>      // Verify families are all valid<a name="line.2969"></a>
-<span class="sourceLineNo">2970</span>      if (!scan.hasFamilies()) {<a name="line.2970"></a>
-<span class="sourceLineNo">2971</span>        // Adding all families to scanner<a name="line.2971"></a>
-<span class="sourceLineNo">2972</span>        for (byte[] family : this.htableDescriptor.getColumnFamilyNames()) {<a name="line.2972"></a>
-<span class="sourceLineNo">2973</span>          scan.addFamily(family);<a name="line.2973"></a>
-<span class="sourceLineNo">2974</span>        }<a name="line.2974"></a>
-<span class="sourceLineNo">2975</span>      } else {<a name="line.2975"></a>
-<span class="sourceLineNo">2976</span>        for (byte[] family : scan.getFamilyMap().keySet()) {<a name="line.2976"></a>
-<span class="sourceLineNo">2977</span>          checkFamily(family);<a name="line.2977"></a>
-<span class="sourceLineNo">2978</span>        }<a name="line.2978"></a>
-<span class="sourceLineNo">2979</span>      }<a name="line.2979"></a>
-<span class="sourceLineNo">2980</span>      return instantiateRegionScanner(scan, additionalScanners, nonceGroup, nonce);<a name="line.2980"></a>
-<span class="sourceLineNo">2981</span>    } finally {<a name="line.2981"></a>
-<span class="sourceLineNo">2982</span>      closeRegionOperation(Operation.SCAN);<a name="line.2982"></a>
-<span class="sourceLineNo">2983</span>    }<a name="line.2983"></a>
-<span class="sourceLineNo">2984</span>  }<a name="line.2984"></a>
-<span class="sourceLineNo">2985</span><a name="line.2985"></a>
-<span class="sourceLineNo">2986</span>  protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.2986"></a>
-<span class="sourceLineNo">2987</span>      List&lt;KeyValueScanner&gt; additionalScanners) throws IOException {<a name="line.2987"></a>
-<span class="sourceLineNo">2988</span>    return instantiateRegionScanner(scan, additionalScanners, HConstants.NO_NONCE,<a name="line.2988"></a>
-<span class="sourceLineNo">2989</span>      HConstants.NO_NONCE);<a name="line.2989"></a>
-<span class="sourceLineNo">2990</span>  }<a name="line.2990"></a>
-<span class="sourceLineNo">2991</span><a name="line.2991"></a>
-<span class="sourceLineNo">2992</span>  protected RegionScannerImpl instantiateRegionScanner(Scan scan,<a name="line.2992"></a>
-<span class="sourceLineNo">2993</span>      List&lt;KeyValueScanner&gt; additionalScanners, long nonceGroup, long nonce) throws IOException {<a name="line.2993"></a>
-<span class="sourceLineNo">2994</span>    if (scan.isReversed()) {<a name="line.2994"></a>
-<span class="sourceLineNo">2995</span>      if (scan.getFilter() != null) {<a name="line.2995"></a>
-<span class="sourceLineNo">2996</span>        scan.getFilter().setReversed(true);<a name="line.2996"></a>
-<span class="sourceLineNo">2997</span>      }<a name="line.2997"></a>
-<span class="sourceLineNo">2998</span>      return new ReversedRegionScannerImpl(scan, additionalScanners, this);<a name="line.2998"></a>
-<span class="sourceLineNo">2999</span>    }<a name="line.2999"></a>
-<span class="sourceLineNo">3000</span>    return new RegionScannerImpl(scan, additionalScanners, this, nonceGroup, nonce);<a name="line.3000"></a>
-<span class="sourceLineNo">3001</span>  }<a name="line.3001"></a>
-<span class="sourceLineNo">3002</span><a name="line.3002"></a>
-<span class="sourceLineNo">3003</span>  /**<a name="line.3003"></a>
-<span class="sourceLineNo">3004</span>   * Prepare a delete for a row mutation processor<a name="line.3004"></a>
-<span class="sourceLineNo">3005</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.3005"></a>
-<span class="sourceLineNo">3006</span>   * @throws IOException<a name="line.3006"></a>
-<span class="sourceLineNo">3007</span>   */<a name="line.3007"></a>
-<span class="sourceLineNo">3008</span>  public void prepareDelete(Delete delete) throws IOException {<a name="line.3008"></a>
-<span class="sourceLineNo">3009</span>    // Check to see if this is a deleteRow insert<a name="line.3009"></a>
-<span class="sourceLineNo">3010</span>    if(delete.getFamilyCellMap().isEmpty()){<a name="line.3010"></a>
-<span class="sourceLineNo">3011</span>      for(byte [] family : this.htableDescriptor.getColumnFamilyNames()){<a name="line.3011"></a>
-<span class="sourceLineNo">3012</span>        // Don't eat the timestamp<a name="line.3012"></a>
-<span class="sourceLineNo">3013</span>        delete.addFamily(family, delete.getTimestamp());<a name="line.3013"></a>
-<span class="sourceLineNo">3014</span>      }<a name="line.3014"></a>
-<span class="sourceLineNo">3015</span>    } else {<a name="line.3015"></a>
-<span class="sourceLineNo">3016</span>      for(byte [] family : delete.getFamilyCellMap().keySet()) {<a name="line.3016"></a>
-<span class="sourceLineNo">3017</span>        if(family == null) {<a name="line.3017"></a>
-<span class="sourceLineNo">3018</span>          throw new NoSuchColumnFamilyException("Empty family is invalid");<a name="line.3018"></a>
-<span class="sourceLineNo">3019</span>        }<a name="line.3019"></a>
-<span class="sourceLineNo">3020</span>        checkFamily(family, delete.getDurability());<a name="line.3020"></a>
-<span class="sourceLineNo">3021</span>      }<a name="line.3021"></a>
-<span class="sourceLineNo">3022</span>    }<a name="line.3022"></a>
-<span class="sourceLineNo">3023</span>  }<a name="line.3023"></a>
-<span class="sourceLineNo">3024</span><a name="line.3024"></a>
-<span class="sourceLineNo">3025</span>  @Override<a name="line.3025"></a>
-<span class="sourceLineNo">3026</span>  public void delete(Delete delete) throws IOException {<a name="line.3026"></a>
-<span class="sourceLineNo">3027</span>    checkReadOnly();<a name="line.3027"></a>
-<span class="sourceLineNo">3028</span>    checkResources();<a name="line.3028"></a>
-<span class="sourceLineNo">3029</span>    startRegionOperation(Operation.DELETE);<a name="line.3029"></a>
-<span class="sourceLineNo">3030</span>    try {<a name="line.3030"></a>
-<span class="sourceLineNo">3031</span>      // All edits for the given row (across all column families) must happen atomically.<a name="line.3031"></a>
-<span class="sourceLineNo">3032</span>      doBatchMutate(delete);<a name="line.3032"></a>
-<span class="sourceLineNo">3033</span>    } finally {<a name="line.3033"></a>
-<span class="sourceLineNo">3034</span>      closeRegionOperation(Operation.DELETE);<a name="line.3034"></a>
-<span class="sourceLineNo">3035</span>    }<a name="line.3035"></a>
-<span class="sourceLineNo">3036</span>  }<a name="line.3036"></a>
-<span class="sourceLineNo">3037</span><a name="line.3037"></a>
-<span class="sourceLineNo">3038</span>  /**<a name="line.3038"></a>
-<span class="sourceLineNo">3039</span>   * Row needed by below method.<a name="line.3039"></a>
-<span class="sourceLineNo">3040</span>   */<a name="line.3040"></a>
-<span class="sourceLineNo">3041</span>  private static final byte [] FOR_UNIT_TESTS_ONLY = Bytes.toBytes("ForUnitTestsOnly");<a name="line.3041"></a>
-<span class="sourceLineNo">3042</span><a name="line.3042"></a>
-<span class="sourceLineNo">3043</span>  /**<a name="line.3043"></a>
-<span class="sourceLineNo">3044</span>   * This is used only by unit tests. Not required to be a public API.<a name="line.3044"></a>
-<span class="sourceLineNo">3045</span>   * @param familyMap map of family to edits for the given family.<a name="line.3045"></a>
-<span class="sourceLineNo">3046</span>   * @throws IOException<a name="line.3046"></a>
-<span class="sourceLineNo">3047</span>   */<a name="line.3047"></a>
-<span class="sourceLineNo">3048</span>  void delete(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3048"></a>
-<span class="sourceLineNo">3049</span>      Durability durability) throws IOException {<a name="line.3049"></a>
-<span class="sourceLineNo">3050</span>    Delete delete = new Delete(FOR_UNIT_TESTS_ONLY, HConstants.LATEST_TIMESTAMP, familyMap);<a name="line.3050"></a>
-<span class="sourceLineNo">3051</span>    delete.setDurability(durability);<a name="line.3051"></a>
-<span class="sourceLineNo">3052</span>    doBatchMutate(delete);<a name="line.3052"></a>
-<span class="sourceLineNo">3053</span>  }<a name="line.3053"></a>
-<span class="sourceLineNo">3054</span><a name="line.3054"></a>
-<span class="sourceLineNo">3055</span>  /**<a name="line.3055"></a>
-<span class="sourceLineNo">3056</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.3056"></a>
-<span class="sourceLineNo">3057</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.3057"></a>
-<span class="sourceLineNo">3058</span>   * @param mutation<a name="line.3058"></a>
-<span class="sourceLineNo">3059</span>   * @param familyMap<a name="line.3059"></a>
-<span class="sourceLineNo">3060</span>   * @param byteNow<a name="line.3060"></a>
-<span class="sourceLineNo">3061</span>   * @throws IOException<a name="line.3061"></a>
-<span class="sourceLineNo">3062</span>   */<a name="line.3062"></a>
-<span class="sourceLineNo">3063</span>  public void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3063"></a>
-<span class="sourceLineNo">3064</span>      byte[] byteNow) throws IOException {<a name="line.3064"></a>
-<span class="sourceLineNo">3065</span>    for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; e : familyMap.entrySet()) {<a name="line.3065"></a>
-<span class="sourceLineNo">3066</span><a name="line.3066"></a>
-<span class="sourceLineNo">3067</span>      byte[] family = e.getKey();<a name="line.3067"></a>
-<span class="sourceLineNo">3068</span>      List&lt;Cell&gt; cells = e.getValue();<a name="line.3068"></a>
-<span class="sourceLineNo">3069</span>      assert cells instanceof RandomAccess;<a name="line.3069"></a>
-<span class="sourceLineNo">3070</span><a name="line.3070"></a>
-<span class="sourceLineNo">3071</span>      Map&lt;byte[], Integer&gt; kvCount = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.3071"></a>
-<span class="sourceLineNo">3072</span>      int listSize = cells.size();<a name="line.3072"></a>
-<span class="sourceLineNo">3073</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.3073"></a>
-<span class="sourceLineNo">3074</span>        Cell cell = cells.get(i);<a name="line.3074"></a>
-<span class="sourceLineNo">3075</span>        //  Check if time is LATEST, change to time of most recent addition if so<a name="line.3075"></a>
-<span class="sourceLineNo">3076</span>        //  This is expensive.<a name="line.3076"></a>
-<span class="sourceLineNo">3077</span>        if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP<a name="line.3077"></a>
-<span class="sourceLineNo">3078</span>            &amp;&amp; PrivateCellUtil.isDeleteType(cell)) {<a name="line.3078"></a>
-<span class="sourceLineNo">3079</span>          byte[] qual = CellUtil.cloneQualifier(cell);<a name="line.3079"></a>
-<span class="sourceLineNo">3080</span><a name="line.3080"></a>
-<span class="sourceLineNo">3081</span>          Integer count = kvCount.get(qual);<a name="line.3081"></a>
-<span class="sourceLineNo">3082</span>          if (count == null) {<a name="line.3082"></a>
-<span class="sourceLineNo">3083</span>            kvCount.put(qual, 1);<a name="line.3083"></a>
-<span class="sourceLineNo">3084</span>          } else {<a name="line.3084"></a>
-<span class="sourceLineNo">3085</span>            kvCount.put(qual, count + 1);<a name="line.3085"></a>
-<span class="sourceLineNo">3086</span>          }<a name="line.3086"></a>
-<span class="sourceLineNo">3087</span>          count = kvCount.get(qual);<a name="line.3087"></a>
-<span class="sourceLineNo">3088</span><a name="line.3088"></a>
-<span class="sourceLineNo">3089</span>          Get get = new Get(CellUtil.cloneRow(cell));<a name="line.3089"></a>
-<span class="sourceLineNo">3090</span>          get.readVersions(count);<a name="line.3090"></a>
-<span class="sourceLineNo">3091</span>          get.addColumn(family, qual);<a name="line.3091"></a>
-<span class="sourceLineNo">3092</span>          if (coprocessorHost != null) {<a name="line.3092"></a>
-<span class="sourceLineNo">3093</span>            if (!coprocessorHost.prePrepareTimeStampForDeleteVersion(mutation, cell,<a name="line.3093"></a>
-<span class="sourceLineNo">3094</span>                byteNow, get)) {<a name="line.3094"></a>
-<span class="sourceLineNo">3095</span>              updateDeleteLatestVersionTimestamp(cell, get, count, byteNow);<a name="line.3095"></a>
-<span class="sourceLineNo">3096</span>            }<a name="line.3096"></a>
-<span class="sourceLineNo">3097</span>          } else {<a name="line.3097"></a>
-<span class="sourceLineNo">3098</span>            updateDeleteLatestVersionTimestamp(cell, get, count, byteNow);<a name="line.3098"></a>
-<span class="sourceLineNo">3099</span>          }<a name="line.3099"></a>
-<span class="sourceLineNo">3100</span>        } else {<a name="line.3100"></a>
-<span class="sourceLineNo">3101</span>          PrivateCellUtil.updateLatestStamp(cell, byteNow);<a name="line.3101"></a>
-<span class="sourceLineNo">3102</span>        }<a name="line.3102"></a>
-<span class="sourceLineNo">3103</span>      }<a name="line.3103"></a>
-<span class="sourceLineNo">3104</span>    }<a name="line.3104"></a>
-<span class="sourceLineNo">3105</span>  }<a name="line.3105"></a>
-<span class="sourceLineNo">3106</span><a name="line.3106"></a>
-<span class="sourceLineNo">3107</span>  void updateDeleteLatestVersionTimestamp(Cell cell, Get get, int count, byte[] byteNow)<a name="line.3107"></a>
-<span class="sourceLineNo">3108</span>      throws IOException {<a name="line.3108"></a>
-<span class="sourceLineNo">3109</span>    List&lt;Cell&gt; result = get(get, false);<a name="line.3109"></a>
-<span class="sourceLineNo">3110</span><a name="line.3110"></a>
-<span class="sourceLineNo">3111</span>    if (result.size() &lt; count) {<a name="line.3111"></a>
-<span class="sourceLineNo">3112</span>      // Nothing to delete<a name="line.3112"></a>
-<span class="sourceLineNo">3113</span>      PrivateCellUtil.updateLatestStamp(cell, byteNow);<a name="line.3113"></a>
-<span class="sourceLineNo">3114</span>      return;<a name="line.3114"></a>
-<span class="sourceLineNo">3115</span>    }<a name="line.3115"></a>
-<span class="sourceLineNo">3116</span>    if (result.size() &gt; count) {<a name="line.3116"></a>
-<span class="sourceLineNo">3117</span>      throw new RuntimeException("Unexpected size: " + result.size());<a name="line.3117"></a>
+<span class="sourceLineNo">2908</span>    this.maxFlushedSeqId = flushedSeqId;<a name="line.2908"></a>
+<span class="sourceLineNo">2909</span>    this.lastFlushOpSeqId = flushOpSeqId;<a name="line.2909"></a>
+<span class="sourceLineNo">2910</span><a name="line.2910"></a>
+<span class="sourceLineNo">2911</span>    // C. Finally notify anyone waiting on memstore to clear:<a name="line.2911"></a>
+<span class="sourceLineNo">2912</span>    // e.g. checkResources().<a name="line.2912"></a>
+<span class="sourceLineNo">2913</span>    synchronized (this) {<a name="line.2913"></a>
+<span class="sourceLineNo">2914</span>      notifyAll(); // FindBugs NN_NAKED_NOTIFY<a name="line.2914"></a>
+<span class="sourceLineNo">2915</span>    }<a name="line.2915"></a>
+<span class="sourceLineNo">2916</span><a name="line.2916"></a>
+<span class="sourceLineNo">2917</span>    long time = EnvironmentEdgeManager.currentTime() - startTime;<a name="line.2917"></a>
+<span class="sourceLineNo">2918</span>    MemStoreSize mss = prepareResult.totalFlushableSize.getMemStoreSize();<a name="line.2918"></a>
+<span class="sourceLineNo">2919</span>    long memstoresize = this.memStoreSizing.getMemStoreSize().getDataSize();<a name="line.2919"></a>
+<span class="sourceLineNo">2920</span>    String msg = "Finished flush of"<a name="line.2920"></a>
+<span class="sourceLineNo">2921</span>        + " dataSize ~" + StringUtils.byteDesc(mss.getDataSize()) + "/" + mss.getDataSize()<a name="line.2921"></a>
+<span class="sourceLineNo">2922</span>        + ", heapSize ~" + StringUtils.byteDesc(mss.getHeapSize()) + "/" + mss.getHeapSize()<a name="line.2922"></a>
+<span class="sourceLineNo">2923</span>        + ", currentSize=" + StringUtils.byteDesc(memstoresize) + "/" + memstoresize<a name="line.2923"></a>
+<span class="sourceLineNo">2924</span>        + " for " + this.getRegionInfo().getEncodedName() + " in " + time + "ms, sequenceid="<a name="line.2924"></a>
+<span class="sourceLineNo">2925</span>        + flushOpSeqId +  ", compaction requested=" + compactionRequested<a name="line.2925"></a>
+<span class="sourceLineNo">2926</span>        + ((wal == null) ? "; wal=null" : "");<a name="line.2926"></a>
+<span class="sourceLineNo">2927</span>    LOG.info(msg);<a name="line.2927"></a>
+<span class="sourceLineNo">2928</span>    status.setStatus(msg);<a name="line.2928"></a>
+<span class="sourceLineNo">2929</span><a name="line.2929"></a>
+<span class="sourceLineNo">2930</span>    if (rsServices != null &amp;&amp; rsServices.getMetrics() != null) {<a name="line.2930"></a>
+<span class="sourceLineNo">2931</span>      rsServices.getMetrics().updateFlush(getTableDescriptor().getTableName().getNameAsString(),<a name="line.2931"></a>
+<span class="sourceLineNo">2932</span>          time,<a name="line.2932"></a>
+<span class="sourceLineNo">2933</span>          mss.getDataSize(), flushedOutputFileSize);<a name="line.2933"></a>
+<span class="sourceLineNo">2934</span>    }<a name="line.2934"></a>
+<span class="sourceLineNo">2935</span><a name="line.2935"></a>
+<span class="sourceLineNo">2936</span>    return new FlushResultImpl(compactionRequested ?<a name="line.2936"></a>
+<span class="sourceLineNo">2937</span>        FlushResult.Result.FLUSHED_COMPACTION_NEEDED :<a name="line.2937"></a>
+<span class="sourceLineNo">2938</span>          FlushResult.Result.FLUSHED_NO_COMPACTION_NEEDED, flushOpSeqId);<a name="line.2938"></a>
+<span class="sourceLineNo">2939</span>  }<a name="line.2939"></a>
+<span class="sourceLineNo">2940</span><a name="line.2940"></a>
+<span class="sourceLineNo">2941</span>  /**<a name="line.2941"></a>
+<span class="sourceLineNo">2942</span>   * Method to safely get the next sequence number.<a name="line.2942"></a>
+<span class="sourceLineNo">2943</span>   * @return Next sequence number unassociated with any actual edit.<a name="line.2943"></a>
+<span class="sourceLineNo">2944</span>   * @throws IOException<a name="line.2944"></a>
+<span class="sourceLineNo">2945</span>   */<a name="line.2945"></a>
+<span class="sourceLineNo">2946</span>  @VisibleForTesting<a name="line.2946"></a>
+<span class="sourceLineNo">2947</span>  protected long getNextSequenceId(final WAL wal) throws IOException {<a name="line.2947"></a>
+<span class="sourceLineNo">2948</span>    WriteEntry we = mvcc.begin();<a name="line.2948"></a>
+<span class="sourceLineNo">2949</span>    mvcc.completeAndWait(we);<a name="line.2949"></a>
+<span class="sourceLineNo">2950</span>    return we.getWriteNumber();<a name="line.2950"></a>
+<span class="sourceLineNo">2951</span>  }<a name="line.2951"></a>
+<span class="sourceLineNo">2952</span><a name="line.2952"></a>
+<span class="sourceLineNo">2953</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2953"></a>
+<span class="sourceLineNo">2954</span>  // get() methods for client use.<a name="line.2954"></a>
+<span class="sourceLineNo">2955</span>  //////////////////////////////////////////////////////////////////////////////<a name="line.2955"></a>
+<span class="sourceLineNo">2956</span><a name="line.2956"></a>
+<span class="sourceLineNo">2957</span>  @Override<a name="line.2957"></a>
+<span class="sourceLineNo">2958</span>  public RegionScannerImpl getScanner(Scan scan) throws IOException {<a name="line.2958"></a>
+<span class="sourceLineNo">2959</span>   return getScanner(scan, null);<a name="line.2959"></a>
+<span class="sourceLineNo">2960</span>  }<a name="line.2960"></a>
+<span class="sourceLineNo">2961</span><a name="line.2961"></a>
+<span class="sourceLineNo">2962</span>  @Override<a name="line.2962"></a>
+<span class="sourceLineNo">2963</span>  public RegionScannerImpl getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners)<a name="line.2963"></a>
+<span class="sourceLineNo">2964</span>      throws IOException {<a name="line.2964"></a>
+<span class="sourceLineNo">2965</span>    return getScanner(scan, additionalScanners, HConstants.NO_NONCE, HConstants.NO_NONCE);<a name="line.2965"></a>
+<span class="sourceLineNo">2966</span>  }<a name="line.2966"></a>
+<span class="sourceLineNo">2967</span><a name="line.2967"></a>
+<span class="sourceLineNo">2968</span>  private RegionScannerImpl getScanner(Scan scan, List&lt;KeyValueScanner&gt; additionalScanners,<a name="line.2968"></a>
+<span class="sourceLineNo">2969</span>      long nonceGroup, long nonce) throws IOException {<a name="line.2969"></a>
+<span class="sourceLineNo">2970</span>    startRegionOperation(Operation.SCAN);<a name="line.2970"></a>
+<span class="sourceLineNo">2971</span>    try {<a name="line.2971"></a>
+<span class="sourceLineNo">2972</span>      // Verify families are all valid<a name="line.2972"></a>
+<span class="sourceLineNo">2973</span>      if (!scan.hasFamilies()) {<a name="line.2973"></a>
+<span class="sourceLineNo">2974</span>        // Adding all families to scanner<a name="line.2974"></a>
+<span class="sourceLineNo">2975</span>        for (byte[] family : this.htableDescriptor.getColumnFamilyNames()) {<a name="line.2975"></a>
+<span class="sourceLineNo">2976</span>          scan.addFamily(family);<a name="line.2976"></a>
+<span class="sourceLineNo">2977</span>        }<a name="line.2977"></a>
+<span class="sourceLineNo">2978</span>      } else {<a name="line.2978"></a>
+<span class="sourceLineNo">2979</span>        for (byte[] family : scan.getFamilyMap().keySet()) {<a name="line.2979"></a>
+<span class="sourceLineNo">2980</span>          checkFamily(family);<a name="line.2980"></a>
+<span class="sourceLineNo">2981</span>        }<a name="line.2981"></a>
+<span class="sourceLineNo">2982</span>      }<a name="line.2982"></a>
+<span class="sourceLineNo">2983</span>      return instantiateRegionScanner(scan, additionalScanners, nonceGroup, nonce);<a name="line.2983"></a>
+<span class="sourceLineNo">2984</span>    } finally {<a name="line.2984"></a>
+<span class="sourceLineNo">2985</span>      closeRegionOperation(Operation.SCAN);<a name="line.2985"></a>
+<span class="sourceLineNo">2986</span>    }<a name="line.2986"></a>
+<span class="sourceLineNo">2987</span>  }<a name="line.2987"></a>
+<span class="sourceLineNo">2988</span><a name="line.2988"></a>
+<span class="sourceLineNo">2989</span>  protected RegionScanner instantiateRegionScanner(Scan scan,<a name="line.2989"></a>
+<span class="sourceLineNo">2990</span>      List&lt;KeyValueScanner&gt; additionalScanners) throws IOException {<a name="line.2990"></a>
+<span class="sourceLineNo">2991</span>    return instantiateRegionScanner(scan, additionalScanners, HConstants.NO_NONCE,<a name="line.2991"></a>
+<span class="sourceLineNo">2992</span>      HConstants.NO_NONCE);<a name="line.2992"></a>
+<span class="sourceLineNo">2993</span>  }<a name="line.2993"></a>
+<span class="sourceLineNo">2994</span><a name="line.2994"></a>
+<span class="sourceLineNo">2995</span>  protected RegionScannerImpl instantiateRegionScanner(Scan scan,<a name="line.2995"></a>
+<span class="sourceLineNo">2996</span>      List&lt;KeyValueScanner&gt; additionalScanners, long nonceGroup, long nonce) throws IOException {<a name="line.2996"></a>
+<span class="sourceLineNo">2997</span>    if (scan.isReversed()) {<a name="line.2997"></a>
+<span class="sourceLineNo">2998</span>      if (scan.getFilter() != null) {<a name="line.2998"></a>
+<span class="sourceLineNo">2999</span>        scan.getFilter().setReversed(true);<a name="line.2999"></a>
+<span class="sourceLineNo">3000</span>      }<a name="line.3000"></a>
+<span class="sourceLineNo">3001</span>      return new ReversedRegionScannerImpl(scan, additionalScanners, this);<a name="line.3001"></a>
+<span class="sourceLineNo">3002</span>    }<a name="line.3002"></a>
+<span class="sourceLineNo">3003</span>    return new RegionScannerImpl(scan, additionalScanners, this, nonceGroup, nonce);<a name="line.3003"></a>
+<span class="sourceLineNo">3004</span>  }<a name="line.3004"></a>
+<span class="sourceLineNo">3005</span><a name="line.3005"></a>
+<span class="sourceLineNo">3006</span>  /**<a name="line.3006"></a>
+<span class="sourceLineNo">3007</span>   * Prepare a delete for a row mutation processor<a name="line.3007"></a>
+<span class="sourceLineNo">3008</span>   * @param delete The passed delete is modified by this method. WARNING!<a name="line.3008"></a>
+<span class="sourceLineNo">3009</span>   * @throws IOException<a name="line.3009"></a>
+<span class="sourceLineNo">3010</span>   */<a name="line.3010"></a>
+<span class="sourceLineNo">3011</span>  public void prepareDelete(Delete delete) throws IOException {<a name="line.3011"></a>
+<span class="sourceLineNo">3012</span>    // Check to see if this is a deleteRow insert<a name="line.3012"></a>
+<span class="sourceLineNo">3013</span>    if(delete.getFamilyCellMap().isEmpty()){<a name="line.3013"></a>
+<span class="sourceLineNo">3014</span>      for(byte [] family : this.htableDescriptor.getColumnFamilyNames()){<a name="line.3014"></a>
+<span class="sourceLineNo">3015</span>        // Don't eat the timestamp<a name="line.3015"></a>
+<span class="sourceLineNo">3016</span>        delete.addFamily(family, delete.getTimestamp());<a name="line.3016"></a>
+<span class="sourceLineNo">3017</span>      }<a name="line.3017"></a>
+<span class="sourceLineNo">3018</span>    } else {<a name="line.3018"></a>
+<span class="sourceLineNo">3019</span>      for(byte [] family : delete.getFamilyCellMap().keySet()) {<a name="line.3019"></a>
+<span class="sourceLineNo">3020</span>        if(family == null) {<a name="line.3020"></a>
+<span class="sourceLineNo">3021</span>          throw new NoSuchColumnFamilyException("Empty family is invalid");<a name="line.3021"></a>
+<span class="sourceLineNo">3022</span>        }<a name="line.3022"></a>
+<span class="sourceLineNo">3023</span>        checkFamily(family, delete.getDurability());<a name="line.3023"></a>
+<span class="sourceLineNo">3024</span>      }<a name="line.3024"></a>
+<span class="sourceLineNo">3025</span>    }<a name="line.3025"></a>
+<span class="sourceLineNo">3026</span>  }<a name="line.3026"></a>
+<span class="sourceLineNo">3027</span><a name="line.3027"></a>
+<span class="sourceLineNo">3028</span>  @Override<a name="line.3028"></a>
+<span class="sourceLineNo">3029</span>  public void delete(Delete delete) throws IOException {<a name="line.3029"></a>
+<span class="sourceLineNo">3030</span>    checkReadOnly();<a name="line.3030"></a>
+<span class="sourceLineNo">3031</span>    checkResources();<a name="line.3031"></a>
+<span class="sourceLineNo">3032</span>    startRegionOperation(Operation.DELETE);<a name="line.3032"></a>
+<span class="sourceLineNo">3033</span>    try {<a name="line.3033"></a>
+<span class="sourceLineNo">3034</span>      // All edits for the given row (across all column families) must happen atomically.<a name="line.3034"></a>
+<span class="sourceLineNo">3035</span>      doBatchMutate(delete);<a name="line.3035"></a>
+<span class="sourceLineNo">3036</span>    } finally {<a name="line.3036"></a>
+<span class="sourceLineNo">3037</span>      closeRegionOperation(Operation.DELETE);<a name="line.3037"></a>
+<span class="sourceLineNo">3038</span>    }<a name="line.3038"></a>
+<span class="sourceLineNo">3039</span>  }<a name="line.3039"></a>
+<span class="sourceLineNo">3040</span><a name="line.3040"></a>
+<span class="sourceLineNo">3041</span>  /**<a name="line.3041"></a>
+<span class="sourceLineNo">3042</span>   * Row needed by below method.<a name="line.3042"></a>
+<span class="sourceLineNo">3043</span>   */<a name="line.3043"></a>
+<span class="sourceLineNo">3044</span>  private static final byte [] FOR_UNIT_TESTS_ONLY = Bytes.toBytes("ForUnitTestsOnly");<a name="line.3044"></a>
+<span class="sourceLineNo">3045</span><a name="line.3045"></a>
+<span class="sourceLineNo">3046</span>  /**<a name="line.3046"></a>
+<span class="sourceLineNo">3047</span>   * This is used only by unit tests. Not required to be a public API.<a name="line.3047"></a>
+<span class="sourceLineNo">3048</span>   * @param familyMap map of family to edits for the given family.<a name="line.3048"></a>
+<span class="sourceLineNo">3049</span>   * @throws IOException<a name="line.3049"></a>
+<span class="sourceLineNo">3050</span>   */<a name="line.3050"></a>
+<span class="sourceLineNo">3051</span>  void delete(NavigableMap&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3051"></a>
+<span class="sourceLineNo">3052</span>      Durability durability) throws IOException {<a name="line.3052"></a>
+<span class="sourceLineNo">3053</span>    Delete delete = new Delete(FOR_UNIT_TESTS_ONLY, HConstants.LATEST_TIMESTAMP, familyMap);<a name="line.3053"></a>
+<span class="sourceLineNo">3054</span>    delete.setDurability(durability);<a name="line.3054"></a>
+<span class="sourceLineNo">3055</span>    doBatchMutate(delete);<a name="line.3055"></a>
+<span class="sourceLineNo">3056</span>  }<a name="line.3056"></a>
+<span class="sourceLineNo">3057</span><a name="line.3057"></a>
+<span class="sourceLineNo">3058</span>  /**<a name="line.3058"></a>
+<span class="sourceLineNo">3059</span>   * Set up correct timestamps in the KVs in Delete object.<a name="line.3059"></a>
+<span class="sourceLineNo">3060</span>   * &lt;p&gt;Caller should have the row and region locks.<a name="line.3060"></a>
+<span class="sourceLineNo">3061</span>   * @param mutation<a name="line.3061"></a>
+<span class="sourceLineNo">3062</span>   * @param familyMap<a name="line.3062"></a>
+<span class="sourceLineNo">3063</span>   * @param byteNow<a name="line.3063"></a>
+<span class="sourceLineNo">3064</span>   * @throws IOException<a name="line.3064"></a>
+<span class="sourceLineNo">3065</span>   */<a name="line.3065"></a>
+<span class="sourceLineNo">3066</span>  public void prepareDeleteTimestamps(Mutation mutation, Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3066"></a>
+<span class="sourceLineNo">3067</span>      byte[] byteNow) throws IOException {<a name="line.3067"></a>
+<span class="sourceLineNo">3068</span>    for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; e : familyMap.entrySet()) {<a name="line.3068"></a>
+<span class="sourceLineNo">3069</span><a name="line.3069"></a>
+<span class="sourceLineNo">3070</span>      byte[] family = e.getKey();<a name="line.3070"></a>
+<span class="sourceLineNo">3071</span>      List&lt;Cell&gt; cells = e.getValue();<a name="line.3071"></a>
+<span class="sourceLineNo">3072</span>      assert cells instanceof RandomAccess;<a name="line.3072"></a>
+<span class="sourceLineNo">3073</span><a name="line.3073"></a>
+<span class="sourceLineNo">3074</span>      Map&lt;byte[], Integer&gt; kvCount = new TreeMap&lt;&gt;(Bytes.BYTES_COMPARATOR);<a name="line.3074"></a>
+<span class="sourceLineNo">3075</span>      int listSize = cells.size();<a name="line.3075"></a>
+<span class="sourceLineNo">3076</span>      for (int i=0; i &lt; listSize; i++) {<a name="line.3076"></a>
+<span class="sourceLineNo">3077</span>        Cell cell = cells.get(i);<a name="line.3077"></a>
+<span class="sourceLineNo">3078</span>        //  Check if time is LATEST, change to time of most recent addition if so<a name="line.3078"></a>
+<span class="sourceLineNo">3079</span>        //  This is expensive.<a name="line.3079"></a>
+<span class="sourceLineNo">3080</span>        if (cell.getTimestamp() == HConstants.LATEST_TIMESTAMP<a name="line.3080"></a>
+<span class="sourceLineNo">3081</span>            &amp;&amp; PrivateCellUtil.isDeleteType(cell)) {<a name="line.3081"></a>
+<span class="sourceLineNo">3082</span>          byte[] qual = CellUtil.cloneQualifier(cell);<a name="line.3082"></a>
+<span class="sourceLineNo">3083</span><a name="line.3083"></a>
+<span class="sourceLineNo">3084</span>          Integer count = kvCount.get(qual);<a name="line.3084"></a>
+<span class="sourceLineNo">3085</span>          if (count == null) {<a name="line.3085"></a>
+<span class="sourceLineNo">3086</span>            kvCount.put(qual, 1);<a name="line.3086"></a>
+<span class="sourceLineNo">3087</span>          } else {<a name="line.3087"></a>
+<span class="sourceLineNo">3088</span>            kvCount.put(qual, count + 1);<a name="line.3088"></a>
+<span class="sourceLineNo">3089</span>          }<a name="line.3089"></a>
+<span class="sourceLineNo">3090</span>          count = kvCount.get(qual);<a name="line.3090"></a>
+<span class="sourceLineNo">3091</span><a name="line.3091"></a>
+<span class="sourceLineNo">3092</span>          Get get = new Get(CellUtil.cloneRow(cell));<a name="line.3092"></a>
+<span class="sourceLineNo">3093</span>          get.readVersions(count);<a name="line.3093"></a>
+<span class="sourceLineNo">3094</span>          get.addColumn(family, qual);<a name="line.3094"></a>
+<span class="sourceLineNo">3095</span>          if (coprocessorHost != null) {<a name="line.3095"></a>
+<span class="sourceLineNo">3096</span>            if (!coprocessorHost.prePrepareTimeStampForDeleteVersion(mutation, cell,<a name="line.3096"></a>
+<span class="sourceLineNo">3097</span>                byteNow, get)) {<a name="line.3097"></a>
+<span class="sourceLineNo">3098</span>              updateDeleteLatestVersionTimestamp(cell, get, count, byteNow);<a name="line.3098"></a>
+<span class="sourceLineNo">3099</span>            }<a name="line.3099"></a>
+<span class="sourceLineNo">3100</span>          } else {<a name="line.3100"></a>
+<span class="sourceLineNo">3101</span>            updateDeleteLatestVersionTimestamp(cell, get, count, byteNow);<a name="line.3101"></a>
+<span class="sourceLineNo">3102</span>          }<a name="line.3102"></a>
+<span class="sourceLineNo">3103</span>        } else {<a name="line.3103"></a>
+<span class="sourceLineNo">3104</span>          PrivateCellUtil.updateLatestStamp(cell, byteNow);<a name="line.3104"></a>
+<span class="sourceLineNo">3105</span>        }<a name="line.3105"></a>
+<span class="sourceLineNo">3106</span>      }<a name="line.3106"></a>
+<span class="sourceLineNo">3107</span>    }<a name="line.3107"></a>
+<span class="sourceLineNo">3108</span>  }<a name="line.3108"></a>
+<span class="sourceLineNo">3109</span><a name="line.3109"></a>
+<span class="sourceLineNo">3110</span>  void updateDeleteLatestVersionTimestamp(Cell cell, Get get, int count, byte[] byteNow)<a name="line.3110"></a>
+<span class="sourceLineNo">3111</span>      throws IOException {<a name="line.3111"></a>
+<span class="sourceLineNo">3112</span>    List&lt;Cell&gt; result = get(get, false);<a name="line.3112"></a>
+<span class="sourceLineNo">3113</span><a name="line.3113"></a>
+<span class="sourceLineNo">3114</span>    if (result.size() &lt; count) {<a name="line.3114"></a>
+<span class="sourceLineNo">3115</span>      // Nothing to delete<a name="line.3115"></a>
+<span class="sourceLineNo">3116</span>      PrivateCellUtil.updateLatestStamp(cell, byteNow);<a name="line.3116"></a>
+<span class="sourceLineNo">3117</span>      return;<a name="line.3117"></a>
 <span class="sourceLineNo">3118</span>    }<a name="line.3118"></a>
-<span class="sourceLineNo">3119</span>    Cell getCell = result.get(count - 1);<a name="line.3119"></a>
-<span class="sourceLineNo">3120</span>    PrivateCellUtil.setTimestamp(cell, getCell.getTimestamp());<a name="line.3120"></a>
-<span class="sourceLineNo">3121</span>  }<a name="line.3121"></a>
-<span class="sourceLineNo">3122</span><a name="line.3122"></a>
-<span class="sourceLineNo">3123</span>  @Override<a name="line.3123"></a>
-<span class="sourceLineNo">3124</span>  public void put(Put put) throws IOException {<a name="line.3124"></a>
-<span class="sourceLineNo">3125</span>    checkReadOnly();<a name="line.3125"></a>
-<span class="sourceLineNo">3126</span><a name="line.3126"></a>
-<span class="sourceLineNo">3127</span>    // Do a rough check that we have resources to accept a write.  The check is<a name="line.3127"></a>
-<span class="sourceLineNo">3128</span>    // 'rough' in that between the resource check and the call to obtain a<a name="line.3128"></a>
-<span class="sourceLineNo">3129</span>    // read lock, resources may run out.  For now, the thought is that this<a name="line.3129"></a>
-<span class="sourceLineNo">3130</span>    // will be extremely rare; we'll deal with it when it happens.<a name="line.3130"></a>
-<span class="sourceLineNo">3131</span>    checkResources();<a name="line.3131"></a>
-<span class="sourceLineNo">3132</span>    startRegionOperation(Operation.PUT);<a name="line.3132"></a>
-<span class="sourceLineNo">3133</span>    try {<a name="line.3133"></a>
-<span class="sourceLineNo">3134</span>      // All edits for the given row (across all column families) must happen atomically.<a name="line.3134"></a>
-<span class="sourceLineNo">3135</span>      doBatchMutate(put);<a name="line.3135"></a>
-<span class="sourceLineNo">3136</span>    } finally {<a name="line.3136"></a>
-<span class="sourceLineNo">3137</span>      closeRegionOperation(Operation.PUT);<a name="line.3137"></a>
-<span class="sourceLineNo">3138</span>    }<a name="line.3138"></a>
-<span class="sourceLineNo">3139</span>  }<a name="line.3139"></a>
-<span class="sourceLineNo">3140</span><a name="line.3140"></a>
-<span class="sourceLineNo">3141</span>  /**<a name="line.3141"></a>
-<span class="sourceLineNo">3142</span>   * Class that tracks the progress of a batch operations, accumulating status codes and tracking<a name="line.3142"></a>
-<span class="sourceLineNo">3143</span>   * the index at which processing is proceeding. These batch operations may get split into<a name="line.3143"></a>
-<span class="sourceLineNo">3144</span>   * mini-batches for processing.<a name="line.3144"></a>
-<span class="sourceLineNo">3145</span>   */<a name="line.3145"></a>
-<span class="sourceLineNo">3146</span>  private abstract static class BatchOperation&lt;T&gt; {<a name="line.3146"></a>
-<span class="sourceLineNo">3147</span>    protected final T[] operations;<a name="line.3147"></a>
-<span class="sourceLineNo">3148</span>    protected final OperationStatus[] retCodeDetails;<a name="line.3148"></a>
-<span class="sourceLineNo">3149</span>    protected final WALEdit[] walEditsFromCoprocessors;<a name="line.3149"></a>
-<span class="sourceLineNo">3150</span>    // reference family cell maps directly so coprocessors can mutate them if desired<a name="line.3150"></a>
-<span class="sourceLineNo">3151</span>    protected final Map&lt;byte[], List&lt;Cell&gt;&gt;[] familyCellMaps;<a name="line.3151"></a>
-<span class="sourceLineNo">3152</span><a name="line.3152"></a>
-<span class="sourceLineNo">3153</span>    protected final HRegion region;<a name="line.3153"></a>
-<span class="sourceLineNo">3154</span>    protected int nextIndexToProcess = 0;<a name="line.3154"></a>
-<span class="sourceLineNo">3155</span>    protected final ObservedExceptionsInBatch observedExceptions;<a name="line.3155"></a>
-<span class="sourceLineNo">3156</span>    //Durability of the batch (highest durability of all operations)<a name="line.3156"></a>
-<span class="sourceLineNo">3157</span>    protected Durability durability;<a name="line.3157"></a>
-<span class="sourceLineNo">3158</span>    protected boolean atomic = false;<a name="line.3158"></a>
-<span class="sourceLineNo">3159</span><a name="line.3159"></a>
-<span class="sourceLineNo">3160</span>    public BatchOperation(final HRegion region, T[] operations) {<a name="line.3160"></a>
-<span class="sourceLineNo">3161</span>      this.operations = operations;<a name="line.3161"></a>
-<span class="sourceLineNo">3162</span>      this.retCodeDetails = new OperationStatus[operations.length];<a name="line.3162"></a>
-<span class="sourceLineNo">3163</span>      Arrays.fill(this.retCodeDetails, OperationStatus.NOT_RUN);<a name="line.3163"></a>
-<span class="sourceLineNo">3164</span>      this.walEditsFromCoprocessors = new WALEdit[operations.length];<a name="line.3164"></a>
-<span class="sourceLineNo">3165</span>      familyCellMaps = new Map[operations.length];<a name="line.3165"></a>
-<span class="sourceLineNo">3166</span><a name="line.3166"></a>
-<span class="sourceLineNo">3167</span>      this.region = region;<a name="line.3167"></a>
-<span class="sourceLineNo">3168</span>      observedExceptions = new ObservedExceptionsInBatch();<a name="line.3168"></a>
-<span class="sourceLineNo">3169</span>      durability = Durability.USE_DEFAULT;<a name="line.3169"></a>
-<span class="sourceLineNo">3170</span>    }<a name="line.3170"></a>
-<span class="sourceLineNo">3171</span><a name="line.3171"></a>
-<span class="sourceLineNo">3172</span>    /**<a name="line.3172"></a>
-<span class="sourceLineNo">3173</span>     * Visitor interface for batch operations<a name="line.3173"></a>
-<span class="sourceLineNo">3174</span>     */<a name="line.3174"></a>
-<span class="sourceLineNo">3175</span>    @FunctionalInterface<a name="line.3175"></a>
-<span class="sourceLineNo">3176</span>    public interface Visitor {<a name="line.3176"></a>
-<span class="sourceLineNo">3177</span>      /**<a name="line.3177"></a>
-<span class="sourceLineNo">3178</span>       * @param index operation index<a name="line.3178"></a>
-<span class="sourceLineNo">3179</span>       * @return If true continue visiting remaining entries, break otherwise<a name="line.3179"></a>
-<span class="sourceLineNo">3180</span>       */<a name="line.3180"></a>
-<span class="sourceLineNo">3181</span>      boolean visit(int index) throws IOException;<a name="line.3181"></a>
-<span class="sourceLineNo">3182</span>    }<a name="line.3182"></a>
-<span class="sourceLineNo">3183</span><a name="line.3183"></a>
-<span class="sourceLineNo">3184</span>    /**<a name="line.3184"></a>
-<span class="sourceLineNo">3185</span>     * Helper method for visiting pending/ all batch operations<a name="line.3185"></a>
-<span class="sourceLineNo">3186</span>     */<a name="line.3186"></a>
-<span class="sourceLineNo">3187</span>    public void visitBatchOperations(boolean pendingOnly, int lastIndexExclusive, Visitor visitor)<a name="line.3187"></a>
-<span class="sourceLineNo">3188</span>        throws IOException {<a name="line.3188"></a>
-<span class="sourceLineNo">3189</span>      assert lastIndexExclusive &lt;= this.size();<a name="line.3189"></a>
-<span class="sourceLineNo">3190</span>      for (int i = nextIndexToProcess; i &lt; lastIndexExclusive; i++) {<a name="line.3190"></a>
-<span class="sourceLineNo">3191</span>        if (!pendingOnly || isOperationPending(i)) {<a name="line.3191"></a>
-<span class="sourceLineNo">3192</span>          if (!visitor.visit(i)) {<a name="line.3192"></a>
-<span class="sourceLineNo">3193</span>            break;<a name="line.3193"></a>
-<span class="sourceLineNo">3194</span>          }<a name="line.3194"></a>
-<span class="sourceLineNo">3195</span>        }<a name="line.3195"></a>
-<span class="sourceLineNo">3196</span>      }<a name="line.3196"></a>
-<span class="sourceLineNo">3197</span>    }<a name="line.3197"></a>
-<span class="sourceLineNo">3198</span><a name="line.3198"></a>
-<span class="sourceLineNo">3199</span>    public abstract Mutation getMutation(int index);<a name="line.3199"></a>
-<span class="sourceLineNo">3200</span><a name="line.3200"></a>
-<span class="sourceLineNo">3201</span>    public abstract long getNonceGroup(int index);<a name="line.3201"></a>
-<span class="sourceLineNo">3202</span><a name="line.3202"></a>
-<span class="sourceLineNo">3203</span>    public abstract long getNonce(int index);<a name="line.3203"></a>
-<span class="sourceLineNo">3204</span><a name="line.3204"></a>
-<span class="sourceLineNo">3205</span>    /**<a name="line.3205"></a>
-<span class="sourceLineNo">3206</span>     * This method is potentially expensive and useful mostly for non-replay CP path.<a name="line.3206"></a>
-<span class="sourceLineNo">3207</span>     */<a name="line.3207"></a>
-<span class="sourceLineNo">3208</span>    public abstract Mutation[] getMutationsForCoprocs();<a name="line.3208"></a>
-<span class="sourceLineNo">3209</span><a name="line.3209"></a>
-<span class="sourceLineNo">3210</span>    public abstract boolean isInReplay();<a name="line.3210"></a>
-<span class="sourceLineNo">3211</span><a name="line.3211"></a>
-<span class="sourceLineNo">3212</span>    public abstract long getOrigLogSeqNum();<a name="line.3212"></a>
-<span class="sourceLineNo">3213</span><a name="line.3213"></a>
-<span class="sourceLineNo">3214</span>    public abstract void startRegionOperation() throws IOException;<a name="line.3214"></a>
-<span class="sourceLineNo">3215</span><a name="line.3215"></a>
-<span class="sourceLineNo">3216</span>    public abstract void closeRegionOperation() throws IOException;<a name="line.3216"></a>
-<span class="sourceLineNo">3217</span><a name="line.3217"></a>
-<span class="sourceLineNo">3218</span>    /**<a name="line.3218"></a>
-<span class="sourceLineNo">3219</span>     * Validates each mutation and prepares a batch for write. If necessary (non-replay case), runs<a name="line.3219"></a>
-<span class="sourceLineNo">3220</span>     * CP prePut()/ preDelete() hooks for all mutations in a batch. This is intended to operate on<a name="line.3220"></a>
-<span class="sourceLineNo">3221</span>     * entire batch and will be called from outside of class to check and prepare batch. This can<a name="line.3221"></a>
-<span class="sourceLineNo">3222</span>     * be implemented by calling helper method {@link #checkAndPrepareMutation(int, long)} in a<a name="line.3222"></a>
-<span class="sourceLineNo">3223</span>     * 'for' loop over mutations.<a name="line.3223"></a>
-<span class="sourceLineNo">3224</span>     */<a name="line.3224"></a>
-<span class="sourceLineNo">3225</span>    public abstract void checkAndPrepare() throws IOException;<a name="line.3225"></a>
-<span class="sourceLineNo">3226</span><a name="line.3226"></a>
-<span class="sourceLineNo">3227</span>    /**<a name="line.3227"></a>
-<span class="sourceLineNo">3228</span>     * Implement any Put request specific check and prepare logic here. Please refer to<a name="line.3228"></a>
-<span class="sourceLineNo">3229</span>     * {@link #checkAndPrepareMutation(Mutation, long)} for how its used.<a name="line.3229"></a>
-<span class="sourceLineNo">3230</span>     */<a name="line.3230"></a>
-<span class="sourceLineNo">3231</span>    protected abstract void checkAndPreparePut(final Put p) throws IOException;<a name="line.3231"></a>
-<span class="sourceLineNo">3232</span><a name="line.3232"></a>
-<span class="sourceLineNo">3233</span>    /**<a name="line.3233"></a>
-<span class="sourceLineNo">3234</span>     * If necessary, calls preBatchMutate() CP hook for a mini-batch and updates metrics, cell<a name="line.3234"></a>
-<span class="sourceLineNo">3235</span>     * count, tags and timestamp for all cells of all operations in a mini-batch.<a name="line.3235"></a>
-<span class="sourceLineNo">3236</span>     */<a name="line.3236"></a>
-<span class="sourceLineNo">3237</span>    public abstract void prepareMiniBatchOperations(MiniBatchOperationInProgress&lt;Mutation&gt;<a name="line.3237"></a>
-<span class="sourceLineNo">3238</span>        miniBatchOp, long timestamp, final List&lt;RowLock&gt; acquiredRowLocks) throws IOException;<a name="line.3238"></a>
-<span class="sourceLineNo">3239</span><a name="line.3239"></a>
-<span class="sourceLineNo">3240</span>    /**<a name="line.3240"></a>
-<span class="sourceLineNo">3241</span>     * Write mini-batch operations to MemStore<a name="line.3241"></a>
-<span class="sourceLineNo">3242</span>     */<a name="line.3242"></a>
-<span class="sourceLineNo">3243</span>    public abstract WriteEntry writeMiniBatchOperationsToMemStore(<a name="line.3243"></a>
-<span class="sourceLineNo">3244</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3244"></a>
-<span class="sourceLineNo">3245</span>        throws IOException;<a name="line.3245"></a>
-<span class="sourceLineNo">3246</span><a name="line.3246"></a>
-<span class="sourceLineNo">3247</span>    protected void writeMiniBatchOperationsToMemStore(<a name="line.3247"></a>
-<span class="sourceLineNo">3248</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final long writeNumber)<a name="line.3248"></a>
-<span class="sourceLineNo">3249</span>        throws IOException {<a name="line.3249"></a>
-<span class="sourceLineNo">3250</span>      MemStoreSizing memStoreAccounting = new NonThreadSafeMemStoreSizing();<a name="line.3250"></a>
-<span class="sourceLineNo">3251</span>      visitBatchOperations(true, miniBatchOp.getLastIndexExclusive(), (int index) -&gt; {<a name="line.3251"></a>
-<span class="sourceLineNo">3252</span>        // We need to update the sequence id for following reasons.<a name="line.3252"></a>
-<span class="sourceLineNo">3253</span>        // 1) If the op is in replay mode, FSWALEntry#stampRegionSequenceId won't stamp sequence id.<a name="line.3253"></a>
-<span class="sourceLineNo">3254</span>        // 2) If no WAL, FSWALEntry won't be used<a name="line.3254"></a>
-<span class="sourceLineNo">3255</span>        // we use durability of the original mutation for the mutation passed by CP.<a name="line.3255"></a>
-<span class="sourceLineNo">3256</span>        if (isInReplay() || getMutation(index).getDurability() == Durability.SKIP_WAL) {<a name="line.3256"></a>
-<span class="sourceLineNo">3257</span>          region.updateSequenceId(familyCellMaps[index].values(), writeNumber);<a name="line.3257"></a>
-<span class="sourceLineNo">3258</span>        }<a name="line.3258"></a>
-<span class="sourceLineNo">3259</span>        applyFamilyMapToMemStore(familyCellMaps[index], memStoreAccounting);<a name="line.3259"></a>
-<span class="sourceLineNo">3260</span>        return true;<a name="line.3260"></a>
-<span class="sourceLineNo">3261</span>      });<a name="line.3261"></a>
-<span class="sourceLineNo">3262</span>      // update memStore size<a name="line.3262"></a>
-<span class="sourceLineNo">3263</span>      region.incMemStoreSize(memStoreAccounting.getDataSize(), memStoreAccounting.getHeapSize(),<a name="line.3263"></a>
-<span class="sourceLineNo">3264</span>        memStoreAccounting.getOffHeapSize(), memStoreAccounting.getCellsCount());<a name="line.3264"></a>
-<span class="sourceLineNo">3265</span>    }<a name="line.3265"></a>
-<span class="sourceLineNo">3266</span><a name="line.3266"></a>
-<span class="sourceLineNo">3267</span>    public boolean isDone() {<a name="line.3267"></a>
-<span class="sourceLineNo">3268</span>      return nextIndexToProcess == operations.length;<a name="line.3268"></a>
-<span class="sourceLineNo">3269</span>    }<a name="line.3269"></a>
-<span class="sourceLineNo">3270</span><a name="line.3270"></a>
-<span class="sourceLineNo">3271</span>    public int size() {<a name="line.3271"></a>
-<span class="sourceLineNo">3272</span>      return operations.length;<a name="line.3272"></a>
-<span class="sourceLineNo">3273</span>    }<a name="line.3273"></a>
-<span class="sourceLineNo">3274</span><a name="line.3274"></a>
-<span class="sourceLineNo">3275</span>    public boolean isOperationPending(int index) {<a name="line.3275"></a>
-<span class="sourceLineNo">3276</span>      return retCodeDetails[index].getOperationStatusCode() == OperationStatusCode.NOT_RUN;<a name="line.3276"></a>
-<span class="sourceLineNo">3277</span>    }<a name="line.3277"></a>
-<span class="sourceLineNo">3278</span><a name="line.3278"></a>
-<span class="sourceLineNo">3279</span>    public List&lt;UUID&gt; getClusterIds() {<a name="line.3279"></a>
-<span class="sourceLineNo">3280</span>      assert size() != 0;<a name="line.3280"></a>
-<span class="sourceLineNo">3281</span>      return getMutation(0).getClusterIds();<a name="line.3281"></a>
-<span class="sourceLineNo">3282</span>    }<a name="line.3282"></a>
-<span class="sourceLineNo">3283</span><a name="line.3283"></a>
-<span class="sourceLineNo">3284</span>    boolean isAtomic() {<a name="line.3284"></a>
-<span class="sourceLineNo">3285</span>      return atomic;<a name="line.3285"></a>
-<span class="sourceLineNo">3286</span>    }<a name="line.3286"></a>
-<span class="sourceLineNo">3287</span><a name="line.3287"></a>
-<span class="sourceLineNo">3288</span>    /**<a name="line.3288"></a>
-<span class="sourceLineNo">3289</span>     * Helper method that checks and prepares only one mutation. This can be used to implement<a name="line.3289"></a>
-<span class="sourceLineNo">3290</span>     * {@link #checkAndPrepare()} for entire Batch.<a name="line.3290"></a>
-<span class="sourceLineNo">3291</span>     * NOTE: As CP prePut()/ preDelete() hooks may modify mutations, this method should be called<a name="line.3291"></a>
-<span class="sourceLineNo">3292</span>     * after prePut()/ preDelete() CP hooks are run for the mutation<a name="line.3292"></a>
-<span class="sourceLineNo">3293</span>     */<a name="line.3293"></a>
-<span class="sourceLineNo">3294</span>    protected void checkAndPrepareMutation(Mutation mutation, final long timestamp)<a name="line.3294"></a>
-<span class="sourceLineNo">3295</span>        throws IOException {<a name="line.3295"></a>
-<span class="sourceLineNo">3296</span>      region.checkRow(mutation.getRow(), "batchMutate");<a name="line.3296"></a>
-<span class="sourceLineNo">3297</span>      if (mutation instanceof Put) {<a name="line.3297"></a>
-<span class="sourceLineNo">3298</span>        // Check the families in the put. If bad, skip this one.<a name="line.3298"></a>
-<span class="sourceLineNo">3299</span>        checkAndPreparePut((Put) mutation);<a name="line.3299"></a>
-<span class="sourceLineNo">3300</span>        region.checkTimestamps(mutation.getFamilyCellMap(), timestamp);<a name="line.3300"></a>
-<span class="sourceLineNo">3301</span>      } else {<a name="line.3301"></a>
-<span class="sourceLineNo">3302</span>        region.prepareDelete((Delete) mutation);<a name="line.3302"></a>
-<span class="sourceLineNo">3303</span>      }<a name="line.3303"></a>
-<span class="sourceLineNo">3304</span>    }<a name="line.3304"></a>
-<span class="sourceLineNo">3305</span><a name="line.3305"></a>
-<span class="sourceLineNo">3306</span>    protected void checkAndPrepareMutation(int index, long timestamp) throws IOException {<a name="line.3306"></a>
-<span class="sourceLineNo">3307</span>      Mutation mutation = getMutation(index);<a name="line.3307"></a>
-<span class="sourceLineNo">3308</span>      try {<a name="line.3308"></a>
-<span class="sourceLineNo">3309</span>        this.checkAndPrepareMutation(mutation, timestamp);<a name="line.3309"></a>
-<span class="sourceLineNo">3310</span><a name="line.3310"></a>
-<span class="sourceLineNo">3311</span>        // store the family map reference to allow for mutations<a name="line.3311"></a>
-<span class="sourceLineNo">3312</span>        familyCellMaps[index] = mutation.getFamilyCellMap();<a name="line.3312"></a>
-<span class="sourceLineNo">3313</span>        // store durability for the batch (highest durability of all operations in the batch)<a name="line.3313"></a>
-<span class="sourceLineNo">3314</span>        Durability tmpDur = region.getEffectiveDurability(mutation.getDurability());<a name="line.3314"></a>
-<span class="sourceLineNo">3315</span>        if (tmpDur.ordinal() &gt; durability.ordinal()) {<a name="line.3315"></a>
-<span class="sourceLineNo">3316</span>          durability = tmpDur;<a name="line.3316"></a>
-<span class="sourceLineNo">3317</span>        }<a name="line.3317"></a>
-<span class="sourceLineNo">3318</span>      } catch (NoSuchColumnFamilyException nscfe) {<a name="line.3318"></a>
-<span class="sourceLineNo">3319</span>        final String msg = "No such column family in batch mutation. ";<a name="line.3319"></a>
-<span class="sourceLineNo">3320</span>        if (observedExceptions.hasSeenNoSuchFamily()) {<a name="line.3320"></a>
-<span class="sourceLineNo">3321</span>          LOG.warn(msg + nscfe.getMessage());<a name="line.3321"></a>
-<span class="sourceLineNo">3322</span>        } else {<a name="line.3322"></a>
-<span class="sourceLineNo">3323</span>          LOG.warn(msg, nscfe);<a name="line.3323"></a>
-<span class="sourceLineNo">3324</span>          observedExceptions.sawNoSuchFamily();<a name="line.3324"></a>
-<span class="sourceLineNo">3325</span>        }<a name="line.3325"></a>
-<span class="sourceLineNo">3326</span>        retCodeDetails[index] = new OperationStatus(<a name="line.3326"></a>
-<span class="sourceLineNo">3327</span>            OperationStatusCode.BAD_FAMILY, nscfe.getMessage());<a name="line.3327"></a>
-<span class="sourceLineNo">3328</span>        if (isAtomic()) { // fail, atomic means all or none<a name="line.3328"></a>
-<span class="sourceLineNo">3329</span>          throw nscfe;<a name="line.3329"></a>
-<span class="sourceLineNo">3330</span>        }<a name="line.3330"></a>
-<span class="sourceLineNo">3331</span>      } catch (FailedSanityCheckException fsce) {<a name="line.3331"></a>
-<span class="sourceLineNo">3332</span>        final String msg = "Batch Mutation did not pass sanity check. ";<a name="line.3332"></a>
-<span class="sourceLineNo">3333</span>        if (observedExceptions.hasSeenFailedSanityCheck()) {<a name="line.3333"></a>
-<span class="sourceLineNo">3334</span>          LOG.warn(msg + fsce.getMessage());<a name="line.3334"></a>
-<span class="sourceLineNo">3335</span>        } else {<a name="line.3335"></a>
-<span class="sourceLineNo">3336</span>          LOG.warn(msg, fsce);<a name="line.3336"></a>
-<span class="sourceLineNo">3337</span>          observedExceptions.sawFailedSanityCheck();<a name="line.3337"></a>
-<span class="sourceLineNo">3338</span>        }<a name="line.3338"></a>
-<span class="sourceLineNo">3339</span>        retCodeDetails[index] = new OperationStatus(<a name="line.3339"></a>
-<span class="sourceLineNo">3340</span>            OperationStatusCode.SANITY_CHECK_FAILURE, fsce.getMessage());<a name="line.3340"></a>
-<span class="sourceLineNo">3341</span>        if (isAtomic()) {<a name="line.3341"></a>
-<span class="sourceLineNo">3342</span>          throw fsce;<a name="line.3342"></a>
-<span class="sourceLineNo">3343</span>        }<a name="line.3343"></a>
-<span class="sourceLineNo">3344</span>      } catch (WrongRegionException we) {<a name="line.3344"></a>
-<span class="sourceLineNo">3345</span>        final String msg = "Batch mutation had a row that does not belong to this region. ";<a name="line.3345"></a>
-<span class="sourceLineNo">3346</span>        if (observedExceptions.hasSeenWrongRegion()) {<a name="line.3346"></a>
-<span class="sourceLineNo">3347</span>          LOG.warn(msg + we.getMessage());<a name="line.3347"></a>
-<span class="sourceLineNo">3348</span>        } else {<a name="line.3348"></a>
-<span class="sourceLineNo">3349</span>          LOG.warn(msg, we);<a name="line.3349"></a>
-<span class="sourceLineNo">3350</span>          observedExceptions.sawWrongRegion();<a name="line.3350"></a>
-<span class="sourceLineNo">3351</span>        }<a name="line.3351"></a>
-<span class="sourceLineNo">3352</span>        retCodeDetails[index] = new OperationStatus(<a name="line.3352"></a>
-<span class="sourceLineNo">3353</span>            OperationStatusCode.SANITY_CHECK_FAILURE, we.getMessage());<a name="line.3353"></a>
-<span class="sourceLineNo">3354</span>        if (isAtomic()) {<a name="line.3354"></a>
-<span class="sourceLineNo">3355</span>          throw we;<a name="line.3355"></a>
-<span class="sourceLineNo">3356</span>        }<a name="line.3356"></a>
-<span class="sourceLineNo">3357</span>      }<a name="line.3357"></a>
-<span class="sourceLineNo">3358</span>    }<a name="line.3358"></a>
-<span class="sourceLineNo">3359</span><a name="line.3359"></a>
-<span class="sourceLineNo">3360</span>    /**<a name="line.3360"></a>
-<span class="sourceLineNo">3361</span>     * Creates Mini-batch of all operations [nextIndexToProcess, lastIndexExclusive) for which<a name="line.3361"></a>
-<span class="sourceLineNo">3362</span>     * a row lock can be acquired. All mutations with locked rows are considered to be<a name="line.3362"></a>
-<span class="sourceLineNo">3363</span>     * In-progress operations and hence the name {@link MiniBatchOperationInProgress}. Mini batch<a name="line.3363"></a>
-<span class="sourceLineNo">3364</span>     * is window over {@link BatchOperation} and contains contiguous pending operations.<a name="line.3364"></a>
-<span class="sourceLineNo">3365</span>     *<a name="line.3365"></a>
-<span class="sourceLineNo">3366</span>     * @param acquiredRowLocks keeps track of rowLocks acquired.<a name="line.3366"></a>
-<span class="sourceLineNo">3367</span>     */<a name="line.3367"></a>
-<span class="sourceLineNo">3368</span>    public MiniBatchOperationInProgress&lt;Mutation&gt; lockRowsAndBuildMiniBatch(<a name="line.3368"></a>
-<span class="sourceLineNo">3369</span>        List&lt;RowLock&gt; acquiredRowLocks) throws IOException {<a name="line.3369"></a>
-<span class="sourceLineNo">3370</span>      int readyToWriteCount = 0;<a name="line.3370"></a>
-<span class="sourceLineNo">3371</span>      int lastIndexExclusive = 0;<a name="line.3371"></a>
-<span class="sourceLineNo">3372</span>      RowLock prevRowLock = null;<a name="line.3372"></a>
-<span class="sourceLineNo">3373</span>      for (; lastIndexExclusive &lt; size(); lastIndexExclusive++) {<a name="line.3373"></a>
-<span class="sourceLineNo">3374</span>        // It reaches the miniBatchSize, stop here and process the miniBatch<a name="line.3374"></a>
-<span class="sourceLineNo">3375</span>        // This only applies to non-atomic batch operations.<a name="line.3375"></a>
-<span class="sourceLineNo">3376</span>        if (!isAtomic() &amp;&amp; (readyToWriteCount == region.miniBatchSize)) {<a name="line.3376"></a>
-<span class="sourceLineNo">3377</span>          break;<a name="line.3377"></a>
-<span class="sourceLineNo">3378</span>        }<a name="line.3378"></a>
-<span class="sourceLineNo">3379</span><a name="line.3379"></a>
-<span class="sourceLineNo">3380</span>        if (!isOperationPending(lastIndexExclusive)) {<a name="line.3380"></a>
-<span class="sourceLineNo">3381</span>          continue;<a name="line.3381"></a>
-<span class="sourceLineNo">3382</span>        }<a name="line.3382"></a>
-<span class="sourceLineNo">3383</span><a name="line.3383"></a>
-<span class="sourceLineNo">3384</span>        // HBASE-19389 Limit concurrency of put with dense (hundreds) columns to avoid exhausting<a name="line.3384"></a>
-<span class="sourceLineNo">3385</span>        // RS handlers, covering both MutationBatchOperation and ReplayBatchOperation<a name="line.3385"></a>
-<span class="sourceLineNo">3386</span>        // The BAD_FAMILY/SANITY_CHECK_FAILURE cases are handled in checkAndPrepare phase and won't<a name="line.3386"></a>
-<span class="sourceLineNo">3387</span>        // pass the isOperationPending check<a name="line.3387"></a>
-<span class="sourceLineNo">3388</span>        Map&lt;byte[], List&lt;Cell&gt;&gt; curFamilyCellMap =<a name="line.3388"></a>
-<span class="sourceLineNo">3389</span>            getMutation(lastIndexExclusive).getFamilyCellMap();<a name="line.3389"></a>
-<span class="sourceLineNo">3390</span>        try {<a name="line.3390"></a>
-<span class="sourceLineNo">3391</span>          // start the protector before acquiring row lock considering performance, and will finish<a name="line.3391"></a>
-<span class="sourceLineNo">3392</span>          // it when encountering exception<a name="line.3392"></a>
-<span class="sourceLineNo">3393</span>          region.storeHotnessProtector.start(curFamilyCellMap);<a name="line.3393"></a>
-<span class="sourceLineNo">3394</span>        } catch (RegionTooBusyException rtbe) {<a name="line.3394"></a>
-<span class="sourceLineNo">3395</span>          region.storeHotnessProtector.finish(curFamilyCellMap);<a name="line.3395"></a>
-<span class="sourceLineNo">3396</span>          if (isAtomic()) {<a name="line.3396"></a>
-<span class="sourceLineNo">3397</span>            throw rtbe;<a name="line.3397"></a>
-<span class="sourceLineNo">3398</span>          }<a name="line.3398"></a>
-<span class="sourceLineNo">3399</span>          retCodeDetails[lastIndexExclusive] =<a name="line.3399"></a>
-<span class="sourceLineNo">3400</span>              new OperationStatus(OperationStatusCode.STORE_TOO_BUSY, rtbe.getMessage());<a name="line.3400"></a>
-<span class="sourceLineNo">3401</span>          continue;<a name="line.3401"></a>
-<span class="sourceLineNo">3402</span>        }<a name="line.3402"></a>
-<span class="sourceLineNo">3403</span><a name="line.3403"></a>
-<span class="sourceLineNo">3404</span>        Mutation mutation = getMutation(lastIndexExclusive);<a name="line.3404"></a>
-<span class="sourceLineNo">3405</span>        // If we haven't got any rows in our batch, we should block to get the next one.<a name="line.3405"></a>
-<span class="sourceLineNo">3406</span>        RowLock rowLock = null;<a name="line.3406"></a>
-<span class="sourceLineNo">3407</span>        boolean throwException = false;<a name="line.3407"></a>
-<span class="sourceLineNo">3408</span>        try {<a name="line.3408"></a>
-<span class="sourceLineNo">3409</span>          // if atomic then get exclusive lock, else shared lock<a name="line.3409"></a>
-<span class="sourceLineNo">3410</span>          rowLock = region.getRowLockInternal(mutation.getRow(), !isAtomic(), prevRowLock);<a name="line.3410"></a>
-<span class="sourceLineNo">3411</span>        } catch (TimeoutIOException | InterruptedIOException e) {<a name="line.3411"></a>
-<span class="sourceLineNo">3412</span>          // NOTE: We will retry when other exceptions, but we should stop if we receive<a name="line.3412"></a>
-<span class="sourceLineNo">3413</span>          // TimeoutIOException or InterruptedIOException as operation has timed out or<a name="line.3413"></a>
-<span class="sourceLineNo">3414</span>          // interrupted respectively.<a name="line.3414"></a>
-<span class="sourceLineNo">3415</span>          throwException = true;<a name="line.3415"></a>
-<span class="sourceLineNo">3416</span>          throw e;<a name="line.3416"></a>
-<span class="sourceLineNo">3417</span>        } catch (IOException ioe) {<a name="line.3417"></a>
-<span class="sourceLineNo">3418</span>          LOG.warn("Failed getting lock, row=" + Bytes.toStringBinary(mutation.getRow()), ioe);<a name="line.3418"></a>
-<span class="sourceLineNo">3419</span>          if (isAtomic()) { // fail, atomic means all or none<a name="line.3419"></a>
-<span class="sourceLineNo">3420</span>            throwException = true;<a name="line.3420"></a>
-<span class="sourceLineNo">3421</span>            throw ioe;<a name="line.3421"></a>
-<span class="sourceLineNo">3422</span>          }<a name="line.3422"></a>
-<span class="sourceLineNo">3423</span>        } catch (Throwable throwable) {<a name="line.3423"></a>
-<span class="sourceLineNo">3424</span>          throwException = true;<a name="line.3424"></a>
-<span class="sourceLineNo">3425</span>          throw throwable;<a name="line.3425"></a>
-<span class="sourceLineNo">3426</span>        } finally {<a name="line.3426"></a>
-<span class="sourceLineNo">3427</span>          if (throwException) {<a name="line.3427"></a>
-<span class="sourceLineNo">3428</span>            region.storeHotnessProtector.finish(curFamilyCellMap);<a name="line.3428"></a>
-<span class="sourceLineNo">3429</span>          }<a name="line.3429"></a>
-<span class="sourceLineNo">3430</span>        }<a name="line.3430"></a>
-<span class="sourceLineNo">3431</span>        if (rowLock == null) {<a name="line.3431"></a>
-<span class="sourceLineNo">3432</span>          // We failed to grab another lock<a name="line.3432"></a>
-<span class="sourceLineNo">3433</span>          if (isAtomic()) {<a name="line.3433"></a>
-<span class="sourceLineNo">3434</span>            region.storeHotnessProtector.finish(curFamilyCellMap);<a name="line.3434"></a>
-<span class="sourceLineNo">3435</span>            throw new IOException("Can't apply all operations atomically!");<a name="line.3435"></a>
-<span class="sourceLineNo">3436</span>          }<a name="line.3436"></a>
-<span class="sourceLineNo">3437</span>          break; // Stop acquiring more rows for this batch<a name="line.3437"></a>
-<span class="sourceLineNo">3438</span>        } else {<a name="line.3438"></a>
-<span class="sourceLineNo">3439</span>          if (rowLock != prevRowLock) {<a name="line.3439"></a>
-<span class="sourceLineNo">3440</span>            // It is a different row now, add this to the acquiredRowLocks and<a name="line.3440"></a>
-<span class="sourceLineNo">3441</span>            // set prevRowLock to the new returned rowLock<a name="line.3441"></a>
-<span class="sourceLineNo">3442</span>            acquiredRowLocks.add(rowLock);<a name="line.3442"></a>
-<span class="sourceLineNo">3443</span>            prevRowLock = rowLock;<a name="line.3443"></a>
-<span class="sourceLineNo">3444</span>          }<a name="line.3444"></a>
-<span class="sourceLineNo">3445</span>        }<a name="line.3445"></a>
-<span class="sourceLineNo">3446</span><a name="line.3446"></a>
-<span class="sourceLineNo">3447</span>        readyToWriteCount++;<a name="line.3447"></a>
-<span class="sourceLineNo">3448</span>      }<a name="line.3448"></a>
-<span class="sourceLineNo">3449</span>      return createMiniBatch(lastIndexExclusive, readyToWriteCount);<a name="line.3449"></a>
-<span class="sourceLineNo">3450</span>    }<a name="line.3450"></a>
-<span class="sourceLineNo">3451</span><a name="line.3451"></a>
-<span class="sourceLineNo">3452</span>    protected MiniBatchOperationInProgress&lt;Mutation&gt; createMiniBatch(final int lastIndexExclusive,<a name="line.3452"></a>
-<span class="sourceLineNo">3453</span>        final int readyToWriteCount) {<a name="line.3453"></a>
-<span class="sourceLineNo">3454</span>      return new MiniBatchOperationInProgress&lt;&gt;(getMutationsForCoprocs(), retCodeDetails,<a name="line.3454"></a>
-<span class="sourceLineNo">3455</span>          walEditsFromCoprocessors, nextIndexToProcess, lastIndexExclusive, readyToWriteCount);<a name="line.3455"></a>
-<span class="sourceLineNo">3456</span>    }<a name="line.3456"></a>
-<span class="sourceLineNo">3457</span><a name="line.3457"></a>
-<span class="sourceLineNo">3458</span>    /**<a name="line.3458"></a>
-<span class="sourceLineNo">3459</span>     * Builds separate WALEdit per nonce by applying input mutations. If WALEdits from CP are<a name="line.3459"></a>
-<span class="sourceLineNo">3460</span>     * present, they are merged to result WALEdit.<a name="line.3460"></a>
-<span class="sourceLineNo">3461</span>     */<a name="line.3461"></a>
-<span class="sourceLineNo">3462</span>    public List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; buildWALEdits(<a name="line.3462"></a>
-<span class="sourceLineNo">3463</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp) throws IOException {<a name="line.3463"></a>
-<span class="sourceLineNo">3464</span>      List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; walEdits = new ArrayList&lt;&gt;();<a name="line.3464"></a>
-<span class="sourceLineNo">3465</span><a name="line.3465"></a>
-<span class="sourceLineNo">3466</span>      visitBatchOperations(true, nextIndexToProcess + miniBatchOp.size(), new Visitor() {<a name="line.3466"></a>
-<span class="sourceLineNo">3467</span>        private Pair&lt;NonceKey, WALEdit&gt; curWALEditForNonce;<a name="line.3467"></a>
+<span class="sourceLineNo">3119</span>    if (result.size() &gt; count) {<a name="line.3119"></a>
+<span class="sourceLineNo">3120</span>      throw new RuntimeException("Unexpected size: " + result.size());<a name="line.3120"></a>
+<span class="sourceLineNo">3121</span>    }<a name="line.3121"></a>
+<span class="sourceLineNo">3122</span>    Cell getCell = result.get(count - 1);<a name="line.3122"></a>
+<span class="sourceLineNo">3123</span>    PrivateCellUtil.setTimestamp(cell, getCell.getTimestamp());<a name="line.3123"></a>
+<span class="sourceLineNo">3124</span>  }<a name="line.3124"></a>
+<span class="sourceLineNo">3125</span><a name="line.3125"></a>
+<span class="sourceLineNo">3126</span>  @Override<a name="line.3126"></a>
+<span class="sourceLineNo">3127</span>  public void put(Put put) throws IOException {<a name="line.3127"></a>
+<span class="sourceLineNo">3128</span>    checkReadOnly();<a name="line.3128"></a>
+<span class="sourceLineNo">3129</span><a name="line.3129"></a>
+<span class="sourceLineNo">3130</span>    // Do a rough check that we have resources to accept a write.  The check is<a name="line.3130"></a>
+<span class="sourceLineNo">3131</span>    // 'rough' in that between the resource check and the call to obtain a<a name="line.3131"></a>
+<span class="sourceLineNo">3132</span>    // read lock, resources may run out.  For now, the thought is that this<a name="line.3132"></a>
+<span class="sourceLineNo">3133</span>    // will be extremely rare; we'll deal with it when it happens.<a name="line.3133"></a>
+<span class="sourceLineNo">3134</span>    checkResources();<a name="line.3134"></a>
+<span class="sourceLineNo">3135</span>    startRegionOperation(Operation.PUT);<a name="line.3135"></a>
+<span class="sourceLineNo">3136</span>    try {<a name="line.3136"></a>
+<span class="sourceLineNo">3137</span>      // All edits for the given row (across all column families) must happen atomically.<a name="line.3137"></a>
+<span class="sourceLineNo">3138</span>      doBatchMutate(put);<a name="line.3138"></a>
+<span class="sourceLineNo">3139</span>    } finally {<a name="line.3139"></a>
+<span class="sourceLineNo">3140</span>      closeRegionOperation(Operation.PUT);<a name="line.3140"></a>
+<span class="sourceLineNo">3141</span>    }<a name="line.3141"></a>
+<span class="sourceLineNo">3142</span>  }<a name="line.3142"></a>
+<span class="sourceLineNo">3143</span><a name="line.3143"></a>
+<span class="sourceLineNo">3144</span>  /**<a name="line.3144"></a>
+<span class="sourceLineNo">3145</span>   * Class that tracks the progress of a batch operations, accumulating status codes and tracking<a name="line.3145"></a>
+<span class="sourceLineNo">3146</span>   * the index at which processing is proceeding. These batch operations may get split into<a name="line.3146"></a>
+<span class="sourceLineNo">3147</span>   * mini-batches for processing.<a name="line.3147"></a>
+<span class="sourceLineNo">3148</span>   */<a name="line.3148"></a>
+<span class="sourceLineNo">3149</span>  private abstract static class BatchOperation&lt;T&gt; {<a name="line.3149"></a>
+<span class="sourceLineNo">3150</span>    protected final T[] operations;<a name="line.3150"></a>
+<span class="sourceLineNo">3151</span>    protected final OperationStatus[] retCodeDetails;<a name="line.3151"></a>
+<span class="sourceLineNo">3152</span>    protected final WALEdit[] walEditsFromCoprocessors;<a name="line.3152"></a>
+<span class="sourceLineNo">3153</span>    // reference family cell maps directly so coprocessors can mutate them if desired<a name="line.3153"></a>
+<span class="sourceLineNo">3154</span>    protected final Map&lt;byte[], List&lt;Cell&gt;&gt;[] familyCellMaps;<a name="line.3154"></a>
+<span class="sourceLineNo">3155</span><a name="line.3155"></a>
+<span class="sourceLineNo">3156</span>    protected final HRegion region;<a name="line.3156"></a>
+<span class="sourceLineNo">3157</span>    protected int nextIndexToProcess = 0;<a name="line.3157"></a>
+<span class="sourceLineNo">3158</span>    protected final ObservedExceptionsInBatch observedExceptions;<a name="line.3158"></a>
+<span class="sourceLineNo">3159</span>    //Durability of the batch (highest durability of all operations)<a name="line.3159"></a>
+<span class="sourceLineNo">3160</span>    protected Durability durability;<a name="line.3160"></a>
+<span class="sourceLineNo">3161</span>    protected boolean atomic = false;<a name="line.3161"></a>
+<span class="sourceLineNo">3162</span><a name="line.3162"></a>
+<span class="sourceLineNo">3163</span>    public BatchOperation(final HRegion region, T[] operations) {<a name="line.3163"></a>
+<span class="sourceLineNo">3164</span>      this.operations = operations;<a name="line.3164"></a>
+<span class="sourceLineNo">3165</span>      this.retCodeDetails = new OperationStatus[operations.length];<a name="line.3165"></a>
+<span class="sourceLineNo">3166</span>      Arrays.fill(this.retCodeDetails, OperationStatus.NOT_RUN);<a name="line.3166"></a>
+<span class="sourceLineNo">3167</span>      this.walEditsFromCoprocessors = new WALEdit[operations.length];<a name="line.3167"></a>
+<span class="sourceLineNo">3168</span>      familyCellMaps = new Map[operations.length];<a name="line.3168"></a>
+<span class="sourceLineNo">3169</span><a name="line.3169"></a>
+<span class="sourceLineNo">3170</span>      this.region = region;<a name="line.3170"></a>
+<span class="sourceLineNo">3171</span>      observedExceptions = new ObservedExceptionsInBatch();<a name="line.3171"></a>
+<span class="sourceLineNo">3172</span>      durability = Durability.USE_DEFAULT;<a name="line.3172"></a>
+<span class="sourceLineNo">3173</span>    }<a name="line.3173"></a>
+<span class="sourceLineNo">3174</span><a name="line.3174"></a>
+<span class="sourceLineNo">3175</span>    /**<a name="line.3175"></a>
+<span class="sourceLineNo">3176</span>     * Visitor interface for batch operations<a name="line.3176"></a>
+<span class="sourceLineNo">3177</span>     */<a name="line.3177"></a>
+<span class="sourceLineNo">3178</span>    @FunctionalInterface<a name="line.3178"></a>
+<span class="sourceLineNo">3179</span>    public interface Visitor {<a name="line.3179"></a>
+<span class="sourceLineNo">3180</span>      /**<a name="line.3180"></a>
+<span class="sourceLineNo">3181</span>       * @param index operation index<a name="line.3181"></a>
+<span class="sourceLineNo">3182</span>       * @return If true continue visiting remaining entries, break otherwise<a name="line.3182"></a>
+<span class="sourceLineNo">3183</span>       */<a name="line.3183"></a>
+<span class="sourceLineNo">3184</span>      boolean visit(int index) throws IOException;<a name="line.3184"></a>
+<span class="sourceLineNo">3185</span>    }<a name="line.3185"></a>
+<span class="sourceLineNo">3186</span><a name="line.3186"></a>
+<span class="sourceLineNo">3187</span>    /**<a name="line.3187"></a>
+<span class="sourceLineNo">3188</span>     * Helper method for visiting pending/ all batch operations<a name="line.3188"></a>
+<span class="sourceLineNo">3189</span>     */<a name="line.3189"></a>
+<span class="sourceLineNo">3190</span>    public void visitBatchOperations(boolean pendingOnly, int lastIndexExclusive, Visitor visitor)<a name="line.3190"></a>
+<span class="sourceLineNo">3191</span>        throws IOException {<a name="line.3191"></a>
+<span class="sourceLineNo">3192</span>      assert lastIndexExclusive &lt;= this.size();<a name="line.3192"></a>
+<span class="sourceLineNo">3193</span>      for (int i = nextIndexToProcess; i &lt; lastIndexExclusive; i++) {<a name="line.3193"></a>
+<span class="sourceLineNo">3194</span>        if (!pendingOnly || isOperationPending(i)) {<a name="line.3194"></a>
+<span class="sourceLineNo">3195</span>          if (!visitor.visit(i)) {<a name="line.3195"></a>
+<span class="sourceLineNo">3196</span>            break;<a name="line.3196"></a>
+<span class="sourceLineNo">3197</span>          }<a name="line.3197"></a>
+<span class="sourceLineNo">3198</span>        }<a name="line.3198"></a>
+<span class="sourceLineNo">3199</span>      }<a name="line.3199"></a>
+<span class="sourceLineNo">3200</span>    }<a name="line.3200"></a>
+<span class="sourceLineNo">3201</span><a name="line.3201"></a>
+<span class="sourceLineNo">3202</span>    public abstract Mutation getMutation(int index);<a name="line.3202"></a>
+<span class="sourceLineNo">3203</span><a name="line.3203"></a>
+<span class="sourceLineNo">3204</span>    public abstract long getNonceGroup(int index);<a name="line.3204"></a>
+<span class="sourceLineNo">3205</span><a name="line.3205"></a>
+<span class="sourceLineNo">3206</span>    public abstract long getNonce(int index);<a name="line.3206"></a>
+<span class="sourceLineNo">3207</span><a name="line.3207"></a>
+<span class="sourceLineNo">3208</span>    /**<a name="line.3208"></a>
+<span class="sourceLineNo">3209</span>     * This method is potentially expensive and useful mostly for non-replay CP path.<a name="line.3209"></a>
+<span class="sourceLineNo">3210</span>     */<a name="line.3210"></a>
+<span class="sourceLineNo">3211</span>    public abstract Mutation[] getMutationsForCoprocs();<a name="line.3211"></a>
+<span class="sourceLineNo">3212</span><a name="line.3212"></a>
+<span class="sourceLineNo">3213</span>    public abstract boolean isInReplay();<a name="line.3213"></a>
+<span class="sourceLineNo">3214</span><a name="line.3214"></a>
+<span class="sourceLineNo">3215</span>    public abstract long getOrigLogSeqNum();<a name="line.3215"></a>
+<span class="sourceLineNo">3216</span><a name="line.3216"></a>
+<span class="sourceLineNo">3217</span>    public abstract void startRegionOperation() throws IOException;<a name="line.3217"></a>
+<span class="sourceLineNo">3218</span><a name="line.3218"></a>
+<span class="sourceLineNo">3219</span>    public abstract void closeRegionOperation() throws IOException;<a name="line.3219"></a>
+<span class="sourceLineNo">3220</span><a name="line.3220"></a>
+<span class="sourceLineNo">3221</span>    /**<a name="line.3221"></a>
+<span class="sourceLineNo">3222</span>     * Validates each mutation and prepares a batch for write. If necessary (non-replay case), runs<a name="line.3222"></a>
+<span class="sourceLineNo">3223</span>     * CP prePut()/ preDelete() hooks for all mutations in a batch. This is intended to operate on<a name="line.3223"></a>
+<span class="sourceLineNo">3224</span>     * entire batch and will be called from outside of class to check and prepare batch. This can<a name="line.3224"></a>
+<span class="sourceLineNo">3225</span>     * be implemented by calling helper method {@link #checkAndPrepareMutation(int, long)} in a<a name="line.3225"></a>
+<span class="sourceLineNo">3226</span>     * 'for' loop over mutations.<a name="line.3226"></a>
+<span class="sourceLineNo">3227</span>     */<a name="line.3227"></a>
+<span class="sourceLineNo">3228</span>    public abstract void checkAndPrepare() throws IOException;<a name="line.3228"></a>
+<span class="sourceLineNo">3229</span><a name="line.3229"></a>
+<span class="sourceLineNo">3230</span>    /**<a name="line.3230"></a>
+<span class="sourceLineNo">3231</span>     * Implement any Put request specific check and prepare logic here. Please refer to<a name="line.3231"></a>
+<span class="sourceLineNo">3232</span>     * {@link #checkAndPrepareMutation(Mutation, long)} for how its used.<a name="line.3232"></a>
+<span class="sourceLineNo">3233</span>     */<a name="line.3233"></a>
+<span class="sourceLineNo">3234</span>    protected abstract void checkAndPreparePut(final Put p) throws IOException;<a name="line.3234"></a>
+<span class="sourceLineNo">3235</span><a name="line.3235"></a>
+<span class="sourceLineNo">3236</span>    /**<a name="line.3236"></a>
+<span class="sourceLineNo">3237</span>     * If necessary, calls preBatchMutate() CP hook for a mini-batch and updates metrics, cell<a name="line.3237"></a>
+<span class="sourceLineNo">3238</span>     * count, tags and timestamp for all cells of all operations in a mini-batch.<a name="line.3238"></a>
+<span class="sourceLineNo">3239</span>     */<a name="line.3239"></a>
+<span class="sourceLineNo">3240</span>    public abstract void prepareMiniBatchOperations(MiniBatchOperationInProgress&lt;Mutation&gt;<a name="line.3240"></a>
+<span class="sourceLineNo">3241</span>        miniBatchOp, long timestamp, final List&lt;RowLock&gt; acquiredRowLocks) throws IOException;<a name="line.3241"></a>
+<span class="sourceLineNo">3242</span><a name="line.3242"></a>
+<span class="sourceLineNo">3243</span>    /**<a name="line.3243"></a>
+<span class="sourceLineNo">3244</span>     * Write mini-batch operations to MemStore<a name="line.3244"></a>
+<span class="sourceLineNo">3245</span>     */<a name="line.3245"></a>
+<span class="sourceLineNo">3246</span>    public abstract WriteEntry writeMiniBatchOperationsToMemStore(<a name="line.3246"></a>
+<span class="sourceLineNo">3247</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3247"></a>
+<span class="sourceLineNo">3248</span>        throws IOException;<a name="line.3248"></a>
+<span class="sourceLineNo">3249</span><a name="line.3249"></a>
+<span class="sourceLineNo">3250</span>    protected void writeMiniBatchOperationsToMemStore(<a name="line.3250"></a>
+<span class="sourceLineNo">3251</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final long writeNumber)<a name="line.3251"></a>
+<span class="sourceLineNo">3252</span>        throws IOException {<a name="line.3252"></a>
+<span class="sourceLineNo">3253</span>      MemStoreSizing memStoreAccounting = new NonThreadSafeMemStoreSizing();<a name="line.3253"></a>
+<span class="sourceLineNo">3254</span>      visitBatchOperations(true, miniBatchOp.getLastIndexExclusive(), (int index) -&gt; {<a name="line.3254"></a>
+<span class="sourceLineNo">3255</span>        // We need to update the sequence id for following reasons.<a name="line.3255"></a>
+<span class="sourceLineNo">3256</span>        // 1) If the op is in replay mode, FSWALEntry#stampRegionSequenceId won't stamp sequence id.<a name="line.3256"></a>
+<span class="sourceLineNo">3257</span>        // 2) If no WAL, FSWALEntry won't be used<a name="line.3257"></a>
+<span class="sourceLineNo">3258</span>        // we use durability of the original mutation for the mutation passed by CP.<a name="line.3258"></a>
+<span class="sourceLineNo">3259</span>        if (isInReplay() || getMutation(index).getDurability() == Durability.SKIP_WAL) {<a name="line.3259"></a>
+<span class="sourceLineNo">3260</span>          region.updateSequenceId(familyCellMaps[index].values(), writeNumber);<a name="line.3260"></a>
+<span class="sourceLineNo">3261</span>        }<a name="line.3261"></a>
+<span class="sourceLineNo">3262</span>        applyFamilyMapToMemStore(familyCellMaps[index], memStoreAccounting);<a name="line.3262"></a>
+<span class="sourceLineNo">3263</span>        return true;<a name="line.3263"></a>
+<span class="sourceLineNo">3264</span>      });<a name="line.3264"></a>
+<span class="sourceLineNo">3265</span>      // update memStore size<a name="line.3265"></a>
+<span class="sourceLineNo">3266</span>      region.incMemStoreSize(memStoreAccounting.getDataSize(), memStoreAccounting.getHeapSize(),<a name="line.3266"></a>
+<span class="sourceLineNo">3267</span>        memStoreAccounting.getOffHeapSize(), memStoreAccounting.getCellsCount());<a name="line.3267"></a>
+<span class="sourceLineNo">3268</span>    }<a name="line.3268"></a>
+<span class="sourceLineNo">3269</span><a name="line.3269"></a>
+<span class="sourceLineNo">3270</span>    public boolean isDone() {<a name="line.3270"></a>
+<span class="sourceLineNo">3271</span>      return nextIndexToProcess == operations.length;<a name="line.3271"></a>
+<span class="sourceLineNo">3272</span>    }<a name="line.3272"></a>
+<span class="sourceLineNo">3273</span><a name="line.3273"></a>
+<span class="sourceLineNo">3274</span>    public int size() {<a name="line.3274"></a>
+<span class="sourceLineNo">3275</span>      return operations.length;<a name="line.3275"></a>
+<span class="sourceLineNo">3276</span>    }<a name="line.3276"></a>
+<span class="sourceLineNo">3277</span><a name="line.3277"></a>
+<span class="sourceLineNo">3278</span>    public boolean isOperationPending(int index) {<a name="line.3278"></a>
+<span class="sourceLineNo">3279</span>      return retCodeDetails[index].getOperationStatusCode() == OperationStatusCode.NOT_RUN;<a name="line.3279"></a>
+<span class="sourceLineNo">3280</span>    }<a name="line.3280"></a>
+<span class="sourceLineNo">3281</span><a name="line.3281"></a>
+<span class="sourceLineNo">3282</span>    public List&lt;UUID&gt; getClusterIds() {<a name="line.3282"></a>
+<span class="sourceLineNo">3283</span>      assert size() != 0;<a name="line.3283"></a>
+<span class="sourceLineNo">3284</span>      return getMutation(0).getClusterIds();<a name="line.3284"></a>
+<span class="sourceLineNo">3285</span>    }<a name="line.3285"></a>
+<span class="sourceLineNo">3286</span><a name="line.3286"></a>
+<span class="sourceLineNo">3287</span>    boolean isAtomic() {<a name="line.3287"></a>
+<span class="sourceLineNo">3288</span>      return atomic;<a name="line.3288"></a>
+<span class="sourceLineNo">3289</span>    }<a name="line.3289"></a>
+<span class="sourceLineNo">3290</span><a name="line.3290"></a>
+<span class="sourceLineNo">3291</span>    /**<a name="line.3291"></a>
+<span class="sourceLineNo">3292</span>     * Helper method that checks and prepares only one mutation. This can be used to implement<a name="line.3292"></a>
+<span class="sourceLineNo">3293</span>     * {@link #checkAndPrepare()} for entire Batch.<a name="line.3293"></a>
+<span class="sourceLineNo">3294</span>     * NOTE: As CP prePut()/ preDelete() hooks may modify mutations, this method should be called<a name="line.3294"></a>
+<span class="sourceLineNo">3295</span>     * after prePut()/ preDelete() CP hooks are run for the mutation<a name="line.3295"></a>
+<span class="sourceLineNo">3296</span>     */<a name="line.3296"></a>
+<span class="sourceLineNo">3297</span>    protected void checkAndPrepareMutation(Mutation mutation, final long timestamp)<a name="line.3297"></a>
+<span class="sourceLineNo">3298</span>        throws IOException {<a name="line.3298"></a>
+<span class="sourceLineNo">3299</span>      region.checkRow(mutation.getRow(), "batchMutate");<a name="line.3299"></a>
+<span class="sourceLineNo">3300</span>      if (mutation instanceof Put) {<a name="line.3300"></a>
+<span class="sourceLineNo">3301</span>        // Check the families in the put. If bad, skip this one.<a name="line.3301"></a>
+<span class="sourceLineNo">3302</span>        checkAndPreparePut((Put) mutation);<a name="line.3302"></a>
+<span class="sourceLineNo">3303</span>        region.checkTimestamps(mutation.getFamilyCellMap(), timestamp);<a name="line.3303"></a>
+<span class="sourceLineNo">3304</span>      } else {<a name="line.3304"></a>
+<span class="sourceLineNo">3305</span>        region.prepareDelete((Delete) mutation);<a name="line.3305"></a>
+<span class="sourceLineNo">3306</span>      }<a name="line.3306"></a>
+<span class="sourceLineNo">3307</span>    }<a name="line.3307"></a>
+<span class="sourceLineNo">3308</span><a name="line.3308"></a>
+<span class="sourceLineNo">3309</span>    protected void checkAndPrepareMutation(int index, long timestamp) throws IOException {<a name="line.3309"></a>
+<span class="sourceLineNo">3310</span>      Mutation mutation = getMutation(index);<a name="line.3310"></a>
+<span class="sourceLineNo">3311</span>      try {<a name="line.3311"></a>
+<span class="sourceLineNo">3312</span>        this.checkAndPrepareMutation(mutation, timestamp);<a name="line.3312"></a>
+<span class="sourceLineNo">3313</span><a name="line.3313"></a>
+<span class="sourceLineNo">3314</span>        // store the family map reference to allow for mutations<a name="line.3314"></a>
+<span class="sourceLineNo">3315</span>        familyCellMaps[index] = mutation.getFamilyCellMap();<a name="line.3315"></a>
+<span class="sourceLineNo">3316</span>        // store durability for the batch (highest durability of all operations in the batch)<a name="line.3316"></a>
+<span class="sourceLineNo">3317</span>        Durability tmpDur = region.getEffectiveDurability(mutation.getDurability());<a name="line.3317"></a>
+<span class="sourceLineNo">3318</span>        if (tmpDur.ordinal() &gt; durability.ordinal()) {<a name="line.3318"></a>
+<span class="sourceLineNo">3319</span>          durability = tmpDur;<a name="line.3319"></a>
+<span class="sourceLineNo">3320</span>        }<a name="line.3320"></a>
+<span class="sourceLineNo">3321</span>      } catch (NoSuchColumnFamilyException nscfe) {<a name="line.3321"></a>
+<span class="sourceLineNo">3322</span>        final String msg = "No such column family in batch mutation. ";<a name="line.3322"></a>
+<span class="sourceLineNo">3323</span>        if (observedExceptions.hasSeenNoSuchFamily()) {<a name="line.3323"></a>
+<span class="sourceLineNo">3324</span>          LOG.warn(msg + nscfe.getMessage());<a name="line.3324"></a>
+<span class="sourceLineNo">3325</span>        } else {<a name="line.3325"></a>
+<span class="sourceLineNo">3326</span>          LOG.warn(msg, nscfe);<a name="line.3326"></a>
+<span class="sourceLineNo">3327</span>          observedExceptions.sawNoSuchFamily();<a name="line.3327"></a>
+<span class="sourceLineNo">3328</span>        }<a name="line.3328"></a>
+<span class="sourceLineNo">3329</span>        retCodeDetails[index] = new OperationStatus(<a name="line.3329"></a>
+<span class="sourceLineNo">3330</span>            OperationStatusCode.BAD_FAMILY, nscfe.getMessage());<a name="line.3330"></a>
+<span class="sourceLineNo">3331</span>        if (isAtomic()) { // fail, atomic means all or none<a name="line.3331"></a>
+<span class="sourceLineNo">3332</span>          throw nscfe;<a name="line.3332"></a>
+<span class="sourceLineNo">3333</span>        }<a name="line.3333"></a>
+<span class="sourceLineNo">3334</span>      } catch (FailedSanityCheckException fsce) {<a name="line.3334"></a>
+<span class="sourceLineNo">3335</span>        final String msg = "Batch Mutation did not pass sanity check. ";<a name="line.3335"></a>
+<span class="sourceLineNo">3336</span>        if (observedExceptions.hasSeenFailedSanityCheck()) {<a name="line.3336"></a>
+<span class="sourceLineNo">3337</span>          LOG.warn(msg + fsce.getMessage());<a name="line.3337"></a>
+<span class="sourceLineNo">3338</span>        } else {<a name="line.3338"></a>
+<span class="sourceLineNo">3339</span>          LOG.warn(msg, fsce);<a name="line.3339"></a>
+<span class="sourceLineNo">3340</span>          observedExceptions.sawFailedSanityCheck();<a name="line.3340"></a>
+<span class="sourceLineNo">3341</span>        }<a name="line.3341"></a>
+<span class="sourceLineNo">3342</span>        retCodeDetails[index] = new OperationStatus(<a name="line.3342"></a>
+<span class="sourceLineNo">3343</span>            OperationStatusCode.SANITY_CHECK_FAILURE, fsce.getMessage());<a name="line.3343"></a>
+<span class="sourceLineNo">3344</span>        if (isAtomic()) {<a name="line.3344"></a>
+<span class="sourceLineNo">3345</span>          throw fsce;<a name="line.3345"></a>
+<span class="sourceLineNo">3346</span>        }<a name="line.3346"></a>
+<span class="sourceLineNo">3347</span>      } catch (WrongRegionException we) {<a name="line.3347"></a>
+<span class="sourceLineNo">3348</span>        final String msg = "Batch mutation had a row that does not belong to this region. ";<a name="line.3348"></a>
+<span class="sourceLineNo">3349</span>        if (observedExceptions.hasSeenWrongRegion()) {<a name="line.3349"></a>
+<span class="sourceLineNo">3350</span>          LOG.warn(msg + we.getMessage());<a name="line.3350"></a>
+<span class="sourceLineNo">3351</span>        } else {<a name="line.3351"></a>
+<span class="sourceLineNo">3352</span>          LOG.warn(msg, we);<a name="line.3352"></a>
+<span class="sourceLineNo">3353</span>          observedExceptions.sawWrongRegion();<a name="line.3353"></a>
+<span class="sourceLineNo">3354</span>        }<a name="line.3354"></a>
+<span class="sourceLineNo">3355</span>        retCodeDetails[index] = new OperationStatus(<a name="line.3355"></a>
+<span class="sourceLineNo">3356</span>            OperationStatusCode.SANITY_CHECK_FAILURE, we.getMessage());<a name="line.3356"></a>
+<span class="sourceLineNo">3357</span>        if (isAtomic()) {<a name="line.3357"></a>
+<span class="sourceLineNo">3358</span>          throw we;<a name="line.3358"></a>
+<span class="sourceLineNo">3359</span>        }<a name="line.3359"></a>
+<span class="sourceLineNo">3360</span>      }<a name="line.3360"></a>
+<span class="sourceLineNo">3361</span>    }<a name="line.3361"></a>
+<span class="sourceLineNo">3362</span><a name="line.3362"></a>
+<span class="sourceLineNo">3363</span>    /**<a name="line.3363"></a>
+<span class="sourceLineNo">3364</span>     * Creates Mini-batch of all operations [nextIndexToProcess, lastIndexExclusive) for which<a name="line.3364"></a>
+<span class="sourceLineNo">3365</span>     * a row lock can be acquired. All mutations with locked rows are considered to be<a name="line.3365"></a>
+<span class="sourceLineNo">3366</span>     * In-progress operations and hence the name {@link MiniBatchOperationInProgress}. Mini batch<a name="line.3366"></a>
+<span class="sourceLineNo">3367</span>     * is window over {@link BatchOperation} and contains contiguous pending operations.<a name="line.3367"></a>
+<span class="sourceLineNo">3368</span>     *<a name="line.3368"></a>
+<span class="sourceLineNo">3369</span>     * @param acquiredRowLocks keeps track of rowLocks acquired.<a name="line.3369"></a>
+<span class="sourceLineNo">3370</span>     */<a name="line.3370"></a>
+<span class="sourceLineNo">3371</span>    public MiniBatchOperationInProgress&lt;Mutation&gt; lockRowsAndBuildMiniBatch(<a name="line.3371"></a>
+<span class="sourceLineNo">3372</span>        List&lt;RowLock&gt; acquiredRowLocks) throws IOException {<a name="line.3372"></a>
+<span class="sourceLineNo">3373</span>      int readyToWriteCount = 0;<a name="line.3373"></a>
+<span class="sourceLineNo">3374</span>      int lastIndexExclusive = 0;<a name="line.3374"></a>
+<span class="sourceLineNo">3375</span>      RowLock prevRowLock = null;<a name="line.3375"></a>
+<span class="sourceLineNo">3376</span>      for (; lastIndexExclusive &lt; size(); lastIndexExclusive++) {<a name="line.3376"></a>
+<span class="sourceLineNo">3377</span>        // It reaches the miniBatchSize, stop here and process the miniBatch<a name="line.3377"></a>
+<span class="sourceLineNo">3378</span>        // This only applies to non-atomic batch operations.<a name="line.3378"></a>
+<span class="sourceLineNo">3379</span>        if (!isAtomic() &amp;&amp; (readyToWriteCount == region.miniBatchSize)) {<a name="line.3379"></a>
+<span class="sourceLineNo">3380</span>          break;<a name="line.3380"></a>
+<span class="sourceLineNo">3381</span>        }<a name="line.3381"></a>
+<span class="sourceLineNo">3382</span><a name="line.3382"></a>
+<span class="sourceLineNo">3383</span>        if (!isOperationPending(lastIndexExclusive)) {<a name="line.3383"></a>
+<span class="sourceLineNo">3384</span>          continue;<a name="line.3384"></a>
+<span class="sourceLineNo">3385</span>        }<a name="line.3385"></a>
+<span class="sourceLineNo">3386</span><a name="line.3386"></a>
+<span class="sourceLineNo">3387</span>        // HBASE-19389 Limit concurrency of put with dense (hundreds) columns to avoid exhausting<a name="line.3387"></a>
+<span class="sourceLineNo">3388</span>        // RS handlers, covering both MutationBatchOperation and ReplayBatchOperation<a name="line.3388"></a>
+<span class="sourceLineNo">3389</span>        // The BAD_FAMILY/SANITY_CHECK_FAILURE cases are handled in checkAndPrepare phase and won't<a name="line.3389"></a>
+<span class="sourceLineNo">3390</span>        // pass the isOperationPending check<a name="line.3390"></a>
+<span class="sourceLineNo">3391</span>        Map&lt;byte[], List&lt;Cell&gt;&gt; curFamilyCellMap =<a name="line.3391"></a>
+<span class="sourceLineNo">3392</span>            getMutation(lastIndexExclusive).getFamilyCellMap();<a name="line.3392"></a>
+<span class="sourceLineNo">3393</span>        try {<a name="line.3393"></a>
+<span class="sourceLineNo">3394</span>          // start the protector before acquiring row lock considering performance, and will finish<a name="line.3394"></a>
+<span class="sourceLineNo">3395</span>          // it when encountering exception<a name="line.3395"></a>
+<span class="sourceLineNo">3396</span>          region.storeHotnessProtector.start(curFamilyCellMap);<a name="line.3396"></a>
+<span class="sourceLineNo">3397</span>        } catch (RegionTooBusyException rtbe) {<a name="line.3397"></a>
+<span class="sourceLineNo">3398</span>          region.storeHotnessProtector.finish(curFamilyCellMap);<a name="line.3398"></a>
+<span class="sourceLineNo">3399</span>          if (isAtomic()) {<a name="line.3399"></a>
+<span class="sourceLineNo">3400</span>            throw rtbe;<a name="line.3400"></a>
+<span class="sourceLineNo">3401</span>          }<a name="line.3401"></a>
+<span class="sourceLineNo">3402</span>          retCodeDetails[lastIndexExclusive] =<a name="line.3402"></a>
+<span class="sourceLineNo">3403</span>              new OperationStatus(OperationStatusCode.STORE_TOO_BUSY, rtbe.getMessage());<a name="line.3403"></a>
+<span class="sourceLineNo">3404</span>          continue;<a name="line.3404"></a>
+<span class="sourceLineNo">3405</span>        }<a name="line.3405"></a>
+<span class="sourceLineNo">3406</span><a name="line.3406"></a>
+<span class="sourceLineNo">3407</span>        Mutation mutation = getMutation(lastIndexExclusive);<a name="line.3407"></a>
+<span class="sourceLineNo">3408</span>        // If we haven't got any rows in our batch, we should block to get the next one.<a name="line.3408"></a>
+<span class="sourceLineNo">3409</span>        RowLock rowLock = null;<a name="line.3409"></a>
+<span class="sourceLineNo">3410</span>        boolean throwException = false;<a name="line.3410"></a>
+<span class="sourceLineNo">3411</span>        try {<a name="line.3411"></a>
+<span class="sourceLineNo">3412</span>          // if atomic then get exclusive lock, else shared lock<a name="line.3412"></a>
+<span class="sourceLineNo">3413</span>          rowLock = region.getRowLockInternal(mutation.getRow(), !isAtomic(), prevRowLock);<a name="line.3413"></a>
+<span class="sourceLineNo">3414</span>        } catch (TimeoutIOException | InterruptedIOException e) {<a name="line.3414"></a>
+<span class="sourceLineNo">3415</span>          // NOTE: We will retry when other exceptions, but we should stop if we receive<a name="line.3415"></a>
+<span class="sourceLineNo">3416</span>          // TimeoutIOException or InterruptedIOException as operation has timed out or<a name="line.3416"></a>
+<span class="sourceLineNo">3417</span>          // interrupted respectively.<a name="line.3417"></a>
+<span class="sourceLineNo">3418</span>          throwException = true;<a name="line.3418"></a>
+<span class="sourceLineNo">3419</span>          throw e;<a name="line.3419"></a>
+<span class="sourceLineNo">3420</span>        } catch (IOException ioe) {<a name="line.3420"></a>
+<span class="sourceLineNo">3421</span>          LOG.warn("Failed getting lock, row=" + Bytes.toStringBinary(mutation.getRow()), ioe);<a name="line.3421"></a>
+<span class="sourceLineNo">3422</span>          if (isAtomic()) { // fail, atomic means all or none<a name="line.3422"></a>
+<span class="sourceLineNo">3423</span>            throwException = true;<a name="line.3423"></a>
+<span class="sourceLineNo">3424</span>            throw ioe;<a name="line.3424"></a>
+<span class="sourceLineNo">3425</span>          }<a name="line.3425"></a>
+<span class="sourceLineNo">3426</span>        } catch (Throwable throwable) {<a name="line.3426"></a>
+<span class="sourceLineNo">3427</span>          throwException = true;<a name="line.3427"></a>
+<span class="sourceLineNo">3428</span>          throw throwable;<a name="line.3428"></a>
+<span class="sourceLineNo">3429</span>        } finally {<a name="line.3429"></a>
+<span class="sourceLineNo">3430</span>          if (throwException) {<a name="line.3430"></a>
+<span class="sourceLineNo">3431</span>            region.storeHotnessProtector.finish(curFamilyCellMap);<a name="line.3431"></a>
+<span class="sourceLineNo">3432</span>          }<a name="line.3432"></a>
+<span class="sourceLineNo">3433</span>        }<a name="line.3433"></a>
+<span class="sourceLineNo">3434</span>        if (rowLock == null) {<a name="line.3434"></a>
+<span class="sourceLineNo">3435</span>          // We failed to grab another lock<a name="line.3435"></a>
+<span class="sourceLineNo">3436</span>          if (isAtomic()) {<a name="line.3436"></a>
+<span class="sourceLineNo">3437</span>            region.storeHotnessProtector.finish(curFamilyCellMap);<a name="line.3437"></a>
+<span class="sourceLineNo">3438</span>            throw new IOException("Can't apply all operations atomically!");<a name="line.3438"></a>
+<span class="sourceLineNo">3439</span>          }<a name="line.3439"></a>
+<span class="sourceLineNo">3440</span>          break; // Stop acquiring more rows for this batch<a name="line.3440"></a>
+<span class="sourceLineNo">3441</span>        } else {<a name="line.3441"></a>
+<span class="sourceLineNo">3442</span>          if (rowLock != prevRowLock) {<a name="line.3442"></a>
+<span class="sourceLineNo">3443</span>            // It is a different row now, add this to the acquiredRowLocks and<a name="line.3443"></a>
+<span class="sourceLineNo">3444</span>            // set prevRowLock to the new returned rowLock<a name="line.3444"></a>
+<span class="sourceLineNo">3445</span>            acquiredRowLocks.add(rowLock);<a name="line.3445"></a>
+<span class="sourceLineNo">3446</span>            prevRowLock = rowLock;<a name="line.3446"></a>
+<span class="sourceLineNo">3447</span>          }<a name="line.3447"></a>
+<span class="sourceLineNo">3448</span>        }<a name="line.3448"></a>
+<span class="sourceLineNo">3449</span><a name="line.3449"></a>
+<span class="sourceLineNo">3450</span>        readyToWriteCount++;<a name="line.3450"></a>
+<span class="sourceLineNo">3451</span>      }<a name="line.3451"></a>
+<span class="sourceLineNo">3452</span>      return createMiniBatch(lastIndexExclusive, readyToWriteCount);<a name="line.3452"></a>
+<span class="sourceLineNo">3453</span>    }<a name="line.3453"></a>
+<span class="sourceLineNo">3454</span><a name="line.3454"></a>
+<span class="sourceLineNo">3455</span>    protected MiniBatchOperationInProgress&lt;Mutation&gt; createMiniBatch(final int lastIndexExclusive,<a name="line.3455"></a>
+<span class="sourceLineNo">3456</span>        final int readyToWriteCount) {<a name="line.3456"></a>
+<span class="sourceLineNo">3457</span>      return new MiniBatchOperationInProgress&lt;&gt;(getMutationsForCoprocs(), retCodeDetails,<a name="line.3457"></a>
+<span class="sourceLineNo">3458</span>          walEditsFromCoprocessors, nextIndexToProcess, lastIndexExclusive, readyToWriteCount);<a name="line.3458"></a>
+<span class="sourceLineNo">3459</span>    }<a name="line.3459"></a>
+<span class="sourceLineNo">3460</span><a name="line.3460"></a>
+<span class="sourceLineNo">3461</span>    /**<a name="line.3461"></a>
+<span class="sourceLineNo">3462</span>     * Builds separate WALEdit per nonce by applying input mutations. If WALEdits from CP are<a name="line.3462"></a>
+<span class="sourceLineNo">3463</span>     * present, they are merged to result WALEdit.<a name="line.3463"></a>
+<span class="sourceLineNo">3464</span>     */<a name="line.3464"></a>
+<span class="sourceLineNo">3465</span>    public List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; buildWALEdits(<a name="line.3465"></a>
+<span class="sourceLineNo">3466</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp) throws IOException {<a name="line.3466"></a>
+<span class="sourceLineNo">3467</span>      List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; walEdits = new ArrayList&lt;&gt;();<a name="line.3467"></a>
 <span class="sourceLineNo">3468</span><a name="line.3468"></a>
-<span class="sourceLineNo">3469</span>        @Override<a name="line.3469"></a>
-<span class="sourceLineNo">3470</span>        public boolean visit(int index) throws IOException {<a name="line.3470"></a>
-<span class="sourceLineNo">3471</span>          Mutation m = getMutation(index);<a name="line.3471"></a>
-<span class="sourceLineNo">3472</span>          // we use durability of the original mutation for the mutation passed by CP.<a name="line.3472"></a>
-<span class="sourceLineNo">3473</span>          if (region.getEffectiveDurability(m.getDurability()) == Durability.SKIP_WAL) {<a name="line.3473"></a>
-<span class="sourceLineNo">3474</span>            region.recordMutationWithoutWal(m.getFamilyCellMap());<a name="line.3474"></a>
-<span class="sourceLineNo">3475</span>            return true;<a name="line.3475"></a>
-<span class="sourceLineNo">3476</span>          }<a name="line.3476"></a>
-<span class="sourceLineNo">3477</span><a name="line.3477"></a>
-<span class="sourceLineNo">3478</span>          // the batch may contain multiple nonce keys (replay case). If so, write WALEdit for each.<a name="line.3478"></a>
-<span class="sourceLineNo">3479</span>          // Given how nonce keys are originally written, these should be contiguous.<a name="line.3479"></a>
-<span class="sourceLineNo">3480</span>          // They don't have to be, it will still work, just write more WALEdits than needed.<a name="line.3480"></a>
-<span class="sourceLineNo">3481</span>          long nonceGroup = getNonceGroup(index);<a name="line.3481"></a>
-<span class="sourceLineNo">3482</span>          long nonce = getNonce(index);<a name="line.3482"></a>
-<span class="sourceLineNo">3483</span>          if (curWALEditForNonce == null ||<a name="line.3483"></a>
-<span class="sourceLineNo">3484</span>              curWALEditForNonce.getFirst().getNonceGroup() != nonceGroup ||<a name="line.3484"></a>
-<span class="sourceLineNo">3485</span>              curWALEditForNonce.getFirst().getNonce() != nonce) {<a name="line.3485"></a>
-<span class="sourceLineNo">3486</span>            curWALEditForNonce = new Pair&lt;&gt;(new NonceKey(nonceGroup, nonce),<a name="line.3486"></a>
-<span class="sourceLineNo">3487</span>                new WALEdit(miniBatchOp.getCellCount(), isInReplay()));<a name="line.3487"></a>
-<span class="sourceLineNo">3488</span>            walEdits.add(curWALEditForNonce);<a name="line.3488"></a>
-<span class="sourceLineNo">3489</span>          }<a name="line.3489"></a>
-<span class="sourceLineNo">3490</span>          WALEdit walEdit = curWALEditForNonce.getSecond();<a name="line.3490"></a>
-<span class="sourceLineNo">3491</span><a name="line.3491"></a>
-<span class="sourceLineNo">3492</span>          // Add WAL edits from CPs.<a name="line.3492"></a>
-<span class="sourceLineNo">3493</span>          WALEdit fromCP = walEditsFromCoprocessors[index];<a name="line.3493"></a>
-<span class="sourceLineNo">3494</span>          if (fromCP != null) {<a name="line.3494"></a>
-<span class="sourceLineNo">3495</span>            for (Cell cell : fromCP.getCells()) {<a name="line.3495"></a>
-<span class="sourceLineNo">3496</span>              walEdit.add(cell);<a name="line.3496"></a>
-<span class="sourceLineNo">3497</span>            }<a name="line.3497"></a>
-<span class="sourceLineNo">3498</span>          }<a name="line.3498"></a>
-<span class="sourceLineNo">3499</span>          walEdit.add(familyCellMaps[index]);<a name="line.3499"></a>
-<span class="sourceLineNo">3500</span><a name="line.3500"></a>
-<span class="sourceLineNo">3501</span>          return true;<a name="line.3501"></a>
-<span class="sourceLineNo">3502</span>        }<a name="line.3502"></a>
-<span class="sourceLineNo">3503</span>      });<a name="line.3503"></a>
-<span class="sourceLineNo">3504</span>      return walEdits;<a name="line.3504"></a>
-<span class="sourceLineNo">3505</span>    }<a name="line.3505"></a>
-<span class="sourceLineNo">3506</span><a name="line.3506"></a>
-<span class="sourceLineNo">3507</span>    /**<a name="line.3507"></a>
-<span class="sourceLineNo">3508</span>     * This method completes mini-batch operations by calling postBatchMutate() CP hook (if<a name="line.3508"></a>
-<span class="sourceLineNo">3509</span>     * required) and completing mvcc.<a name="line.3509"></a>
-<span class="sourceLineNo">3510</span>     */<a name="line.3510"></a>
-<span class="sourceLineNo">3511</span>    public void completeMiniBatchOperations(<a name="line.3511"></a>
-<span class="sourceLineNo">3512</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3512"></a>
-<span class="sourceLineNo">3513</span>        throws IOException {<a name="line.3513"></a>
-<span class="sourceLineNo">3514</span>      if (writeEntry != null) {<a name="line.3514"></a>
-<span class="sourceLineNo">3515</span>        region.mvcc.completeAndWait(writeEntry);<a name="line.3515"></a>
-<span class="sourceLineNo">3516</span>      }<a name="line.3516"></a>
-<span class="sourceLineNo">3517</span>    }<a name="line.3517"></a>
-<span class="sourceLineNo">3518</span><a name="line.3518"></a>
-<span class="sourceLineNo">3519</span>    public void doPostOpCleanupForMiniBatch(<a name="line.3519"></a>
-<span class="sourceLineNo">3520</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WALEdit walEdit,<a name="line.3520"></a>
-<span class="sourceLineNo">3521</span>        boolean success) throws IOException {<a name="line.3521"></a>
-<span class="sourceLineNo">3522</span>      doFinishHotnessProtector(miniBatchOp);<a name="line.3522"></a>
-<span class="sourceLineNo">3523</span>    }<a name="line.3523"></a>
-<span class="sourceLineNo">3524</span><a name="line.3524"></a>
-<span class="sourceLineNo">3525</span>    private void doFinishHotnessProtector(<a name="line.3525"></a>
-<span class="sourceLineNo">3526</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp) {<a name="line.3526"></a>
-<span class="sourceLineNo">3527</span>      // check and return if the protector is not enabled<a name="line.3527"></a>
-<span class="sourceLineNo">3528</span>      if (!region.storeHotnessProtector.isEnable()) {<a name="line.3528"></a>
-<span class="sourceLineNo">3529</span>        return;<a name="line.3529"></a>
-<span class="sourceLineNo">3530</span>      }<a name="line.3530"></a>
-<span class="sourceLineNo">3531</span>      // miniBatchOp is null, if and only if lockRowsAndBuildMiniBatch throwing exception.<a name="line.3531"></a>
-<span class="sourceLineNo">3532</span>      // This case was handled.<a name="line.3532"></a>
-<span class="sourceLineNo">3533</span>      if (miniBatchOp == null) {<a name="line.3533"></a>
-<span class="sourceLineNo">3534</span>        return;<a name="line.3534"></a>
-<span class="sourceLineNo">3535</span>      }<a name="line.3535"></a>
-<span class="sourceLineNo">3536</span><a name="line.3536"></a>
-<span class="sourceLineNo">3537</span>      final int finalLastIndexExclusive = miniBatchOp.getLastIndexExclusive();<a name="line.3537"></a>
-<span class="sourceLineNo">3538</span><a name="line.3538"></a>
-<span class="sourceLineNo">3539</span>      for (int i = nextIndexToProcess; i &lt; finalLastIndexExclusive; i++) {<a name="line.3539"></a>
-<span class="sourceLineNo">3540</span>        switch (retCodeDetails[i].getOperationStatusCode()) {<a name="line.3540"></a>
-<span class="sourceLineNo">3541</span>          case SUCCESS:<a name="line.3541"></a>
-<span class="sourceLineNo">3542</span>          case FAILURE:<a name="line.3542"></a>
-<span class="sourceLineNo">3543</span>            region.storeHotnessProtector.finish(getMutation(i).getFamilyCellMap());<a name="line.3543"></a>
-<span class="sourceLineNo">3544</span>            break;<a name="line.3544"></a>
-<span class="sourceLineNo">3545</span>          default:<a name="line.3545"></a>
-<span class="sourceLineNo">3546</span>            // do nothing<a name="line.3546"></a>
-<span class="sourceLineNo">3547</span>            // We won't start the protector for NOT_RUN/BAD_FAMILY/SANITY_CHECK_FAILURE and the<a name="line.3547"></a>
-<span class="sourceLineNo">3548</span>            // STORE_TOO_BUSY case is handled in StoreHotnessProtector#start<a name="line.3548"></a>
-<span class="sourceLineNo">3549</span>            break;<a name="line.3549"></a>
-<span class="sourceLineNo">3550</span>        }<a name="line.3550"></a>
-<span class="sourceLineNo">3551</span>      }<a name="line.3551"></a>
-<span class="sourceLineNo">3552</span>    }<a name="line.3552"></a>
-<span class="sourceLineNo">3553</span><a name="line.3553"></a>
-<span class="sourceLineNo">3554</span>    /**<a name="line.3554"></a>
-<span class="sourceLineNo">3555</span>     * Atomically apply the given map of family-&gt;edits to the memstore.<a name="line.3555"></a>
-<span class="sourceLineNo">3556</span>     * This handles the consistency control on its own, but the caller<a name="line.3556"></a>
-<span class="sourceLineNo">3557</span>     * should already have locked updatesLock.readLock(). This also does<a name="line.3557"></a>
-<span class="sourceLineNo">3558</span>     * &lt;b&gt;not&lt;/b&gt; check the families for validity.<a name="line.3558"></a>
-<span class="sourceLineNo">3559</span>     *<a name="line.3559"></a>
-<span class="sourceLineNo">3560</span>     * @param familyMap Map of Cells by family<a name="line.3560"></a>
-<span class="sourceLineNo">3561</span>     */<a name="line.3561"></a>
-<span class="sourceLineNo">3562</span>    protected void applyFamilyMapToMemStore(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3562"></a>
-<span class="sourceLineNo">3563</span>        MemStoreSizing memstoreAccounting) throws IOException {<a name="line.3563"></a>
-<span class="sourceLineNo">3564</span>      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; e : familyMap.entrySet()) {<a name="line.3564"></a>
-<span class="sourceLineNo">3565</span>        byte[] family = e.getKey();<a name="line.3565"></a>
-<span class="sourceLineNo">3566</span>        List&lt;Cell&gt; cells = e.getValue();<a name="line.3566"></a>
-<span class="sourceLineNo">3567</span>        assert cells instanceof RandomAccess;<a name="line.3567"></a>
-<span class="sourceLineNo">3568</span>        region.applyToMemStore(region.getStore(family), cells, false, memstoreAccounting);<a name="line.3568"></a>
-<span class="sourceLineNo">3569</span>      }<a name="line.3569"></a>
-<span class="sourceLineNo">3570</span>    }<a name="line.3570"></a>
-<span class="sourceLineNo">3571</span>  }<a name="line.3571"></a>
-<span class="sourceLineNo">3572</span><a name="line.3572"></a>
-<span class="sourceLineNo">3573</span><a name="line.3573"></a>
-<span class="sourceLineNo">3574</span>  /**<a name="line.3574"></a>
-<span class="sourceLineNo">3575</span>   * Batch of mutation operations. Base class is shared with {@link ReplayBatchOperation} as most<a name="line.3575"></a>
-<span class="sourceLineNo">3576</span>   * of the logic is same.<a name="line.3576"></a>
-<span class="sourceLineNo">3577</span>   */<a name="line.3577"></a>
-<span class="sourceLineNo">3578</span>  static class MutationBatchOperation extends BatchOperation&lt;Mutation&gt; {<a name="line.3578"></a>
-<span class="sourceLineNo">3579</span>    private long nonceGroup;<a name="line.3579"></a>
-<span class="sourceLineNo">3580</span>    private long nonce;<a name="line.3580"></a>
-<span class="sourceLineNo">3581</span>    public MutationBatchOperation(final HRegion region, Mutation[] operations, boolean atomic,<a name="line.3581"></a>
-<span class="sourceLineNo">3582</span>        long nonceGroup, long nonce) {<a name="line.3582"></a>
-<span class="sourceLineNo">3583</span>      super(region, operations);<a name="line.3583"></a>
-<span class="sourceLineNo">3584</span>      this.atomic = atomic;<a name="line.3584"></a>
-<span class="sourceLineNo">3585</span>      this.nonceGroup = nonceGroup;<a name="line.3585"></a>
-<span class="sourceLineNo">3586</span>      this.nonce = nonce;<a name="line.3586"></a>
-<span class="sourceLineNo">3587</span>    }<a name="line.3587"></a>
-<span class="sourceLineNo">3588</span><a name="line.3588"></a>
-<span class="sourceLineNo">3589</span>    @Override<a name="line.3589"></a>
-<span class="sourceLineNo">3590</span>    public Mutation getMutation(int index) {<a name="line.3590"></a>
-<span class="sourceLineNo">3591</span>      return this.operations[index];<a name="line.3591"></a>
-<span class="sourceLineNo">3592</span>    }<a name="line.3592"></a>
-<span class="sourceLineNo">3593</span><a name="line.3593"></a>
-<span class="sourceLineNo">3594</span>    @Override<a name="line.3594"></a>
-<span class="sourceLineNo">3595</span>    public long getNonceGroup(int index) {<a name="line.3595"></a>
-<span class="sourceLineNo">3596</span>      return nonceGroup;<a name="line.3596"></a>
-<span class="sourceLineNo">3597</span>    }<a name="line.3597"></a>
-<span class="sourceLineNo">3598</span><a name="line.3598"></a>
-<span class="sourceLineNo">3599</span>    @Override<a name="line.3599"></a>
-<span class="sourceLineNo">3600</span>    public long getNonce(int index) {<a name="line.3600"></a>
-<span class="sourceLineNo">3601</span>      return nonce;<a name="line.3601"></a>
-<span class="sourceLineNo">3602</span>    }<a name="line.3602"></a>
-<span class="sourceLineNo">3603</span><a name="line.3603"></a>
-<span class="sourceLineNo">3604</span>    @Override<a name="line.3604"></a>
-<span class="sourceLineNo">3605</span>    public Mutation[] getMutationsForCoprocs() {<a name="line.3605"></a>
-<span class="sourceLineNo">3606</span>      return this.operations;<a name="line.3606"></a>
-<span class="sourceLineNo">3607</span>    }<a name="line.3607"></a>
-<span class="sourceLineNo">3608</span><a name="line.3608"></a>
-<span class="sourceLineNo">3609</span>    @Override<a name="line.3609"></a>
-<span class="sourceLineNo">3610</span>    public boolean isInReplay() {<a name="line.3610"></a>
-<span class="sourceLineNo">3611</span>      return false;<a name="line.3611"></a>
-<span class="sourceLineNo">3612</span>    }<a name="line.3612"></a>
-<span class="sourceLineNo">3613</span><a name="line.3613"></a>
-<span class="sourceLineNo">3614</span>    @Override<a name="line.3614"></a>
-<span class="sourceLineNo">3615</span>    public long getOrigLogSeqNum() {<a name="line.3615"></a>
-<span class="sourceLineNo">3616</span>      return SequenceId.NO_SEQUENCE_ID;<a name="line.3616"></a>
-<span class="sourceLineNo">3617</span>    }<a name="line.3617"></a>
-<span class="sourceLineNo">3618</span><a name="line.3618"></a>
-<span class="sourceLineNo">3619</span>    @Override<a name="line.3619"></a>
-<span class="sourceLineNo">3620</span>    public void startRegionOperation() throws IOException {<a name="line.3620"></a>
-<span class="sourceLineNo">3621</span>      region.startRegionOperation(Operation.BATCH_MUTATE);<a name="line.3621"></a>
-<span class="sourceLineNo">3622</span>    }<a name="line.3622"></a>
-<span class="sourceLineNo">3623</span><a name="line.3623"></a>
-<span class="sourceLineNo">3624</span>    @Override<a name="line.3624"></a>
-<span class="sourceLineNo">3625</span>    public void closeRegionOperation() throws IOException {<a name="line.3625"></a>
-<span class="sourceLineNo">3626</span>      region.closeRegionOperation(Operation.BATCH_MUTATE);<a name="line.3626"></a>
-<span class="sourceLineNo">3627</span>    }<a name="line.3627"></a>
-<span class="sourceLineNo">3628</span><a name="line.3628"></a>
-<span class="sourceLineNo">3629</span>    @Override<a name="line.3629"></a>
-<span class="sourceLineNo">3630</span>    public void checkAndPreparePut(Put p) throws IOException {<a name="line.3630"></a>
-<span class="sourceLineNo">3631</span>      region.checkFamilies(p.getFamilyCellMap().keySet(), p.getDurability());<a name="line.3631"></a>
-<span class="sourceLineNo">3632</span>    }<a name="line.3632"></a>
-<span class="sourceLineNo">3633</span><a name="line.3633"></a>
-<span class="sourceLineNo">3634</span>    @Override<a name="line.3634"></a>
-<span class="sourceLineNo">3635</span>    public void checkAndPrepare() throws IOException {<a name="line.3635"></a>
-<span class="sourceLineNo">3636</span>      final int[] metrics = {0, 0}; // index 0: puts, index 1: deletes<a name="line.3636"></a>
-<span class="sourceLineNo">3637</span>      visitBatchOperations(true, this.size(), new Visitor() {<a name="line.3637"></a>
-<span class="sourceLineNo">3638</span>        private long now = EnvironmentEdgeManager.currentTime();<a name="line.3638"></a>
-<span class="sourceLineNo">3639</span>        private WALEdit walEdit;<a name="line.3639"></a>
-<span class="sourceLineNo">3640</span>        @Override<a name="line.3640"></a>
-<span class="sourceLineNo">3641</span>        public boolean visit(int index) throws IOException {<a name="line.3641"></a>
-<span class="sourceLineNo">3642</span>          // Run coprocessor pre hook outside of locks to avoid deadlock<a name="line.3642"></a>
-<span class="sourceLineNo">3643</span>          if (region.coprocessorHost != null) {<a name="line.3643"></a>
-<span class="sourceLineNo">3644</span>            if (walEdit == null) {<a name="line.3644"></a>
-<span class="sourceLineNo">3645</span>              walEdit = new WALEdit();<a name="line.3645"></a>
-<span class="sourceLineNo">3646</span>            }<a name="line.3646"></a>
-<span class="sourceLineNo">3647</span>            callPreMutateCPHook(index, walEdit, metrics);<a name="line.3647"></a>
-<span class="sourceLineNo">3648</span>            if (!walEdit.isEmpty()) {<a name="line.3648"></a>
-<span class="sourceLineNo">3649</span>              walEditsFromCoprocessors[index] = walEdit;<a name="line.3649"></a>
-<span class="sourceLineNo">3650</span>              walEdit = null;<a name="line.3650"></a>
-<span class="sourceLineNo">3651</span>            }<a name="line.3651"></a>
-<span class="sourceLineNo">3652</span>          }<a name="line.3652"></a>
-<span class="sourceLineNo">3653</span>          if (isOperationPending(index)) {<a name="line.3653"></a>
-<span class="sourceLineNo">3654</span>            // TODO: Currently validation is done with current time before acquiring locks and<a name="line.3654"></a>
-<span class="sourceLineNo">3655</span>            // updates are done with different timestamps after acquiring locks. This behavior is<a name="line.3655"></a>
-<span class="sourceLineNo">3656</span>            // inherited from the code prior to this change. Can this be changed?<a name="line.3656"></a>
-<span class="sourceLineNo">3657</span>            checkAndPrepareMutation(index, now);<a name="line.3657"></a>
-<span class="sourceLineNo">3658</span>          }<a name="line.3658"></a>
-<span class="sourceLineNo">3659</span>          return true;<a name="line.3659"></a>
-<span class="sourceLineNo">3660</span>        }<a name="line.3660"></a>
-<span class="sourceLineNo">3661</span>      });<a name="line.3661"></a>
-<span class="sourceLineNo">3662</span><a name="line.3662"></a>
-<span class="sourceLineNo">3663</span>      // FIXME: we may update metrics twice! here for all operations bypassed by CP and later in<a name="line.3663"></a>
-<span class="sourceLineNo">3664</span>      // normal processing.<a name="line.3664"></a>
-<span class="sourceLineNo">3665</span>      // Update metrics in same way as it is done when we go the normal processing route (we now<a name="line.3665"></a>
-<span class="sourceLineNo">3666</span>      // update general metrics though a Coprocessor did the work).<a name="line.3666"></a>
-<span class="sourceLineNo">3667</span>      if (region.metricsRegion != null) {<a name="line.3667"></a>
-<span class="sourceLineNo">3668</span>        if (metrics[0] &gt; 0) {<a name="line.3668"></a>
-<span class="sourceLineNo">3669</span>          // There were some Puts in the batch.<a name="line.3669"></a>
-<span class="sourceLineNo">3670</span>          region.metricsRegion.updatePut();<a name="line.3670"></a>
-<span class="sourceLineNo">3671</span>        }<a name="line.3671"></a>
-<span class="sourceLineNo">3672</span>        if (metrics[1] &gt; 0) {<a name="line.3672"></a>
-<span class="sourceLineNo">3673</span>          // There were some Deletes in the batch.<a name="line.3673"></a>
-<span class="sourceLineNo">3674</span>          region.metricsRegion.updateDelete();<a name="line.3674"></a>
-<span class="sourceLineNo">3675</span>        }<a name="line.3675"></a>
-<span class="sourceLineNo">3676</span>      }<a name="line.3676"></a>
-<span class="sourceLineNo">3677</span>    }<a name="line.3677"></a>
-<span class="sourceLineNo">3678</span><a name="line.3678"></a>
-<span class="sourceLineNo">3679</span>    @Override<a name="line.3679"></a>
-<span class="sourceLineNo">3680</span>    public void prepareMiniBatchOperations(MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3680"></a>
-<span class="sourceLineNo">3681</span>        long timestamp, final List&lt;RowLock&gt; acquiredRowLocks) throws IOException {<a name="line.3681"></a>
-<span class="sourceLineNo">3682</span>      byte[] byteTS = Bytes.toBytes(timestamp);<a name="line.3682"></a>
-<span class="sourceLineNo">3683</span>      visitBatchOperations(true, miniBatchOp.getLastIndexExclusive(), (int index) -&gt; {<a name="line.3683"></a>
-<span class="sourceLineNo">3684</span>        Mutation mutation = getMutation(index);<a name="line.3684"></a>
-<span class="sourceLineNo">3685</span>        if (mutation instanceof Put) {<a name="line.3685"></a>
-<span class="sourceLineNo">3686</span>          HRegion.updateCellTimestamps(familyCellMaps[index].values(), byteTS);<a name="line.3686"></a>
-<span class="sourceLineNo">3687</span>          miniBatchOp.incrementNumOfPuts();<a name="line.3687"></a>
-<span class="sourceLineNo">3688</span>        } else {<a name="line.3688"></a>
-<span class="sourceLineNo">3689</span>          region.prepareDeleteTimestamps(mutation, familyCellMaps[index], byteTS);<a name="line.3689"></a>
-<span class="sourceLineNo">3690</span>          miniBatchOp.incrementNumOfDeletes();<a name="line.3690"></a>
-<span class="sourceLineNo">3691</span>        }<a name="line.3691"></a>
-<span class="sourceLineNo">3692</span>        region.rewriteCellTags(familyCellMaps[index], mutation);<a name="line.3692"></a>
-<span class="sourceLineNo">3693</span><a name="line.3693"></a>
-<span class="sourceLineNo">3694</span>        // update cell count<a name="line.3694"></a>
-<span class="sourceLineNo">3695</span>        if (region.getEffectiveDurability(mutation.getDurability()) != Durability.SKIP_WAL) {<a name="line.3695"></a>
-<span class="sourceLineNo">3696</span>          for (List&lt;Cell&gt; cells : mutation.getFamilyCellMap().values()) {<a name="line.3696"></a>
-<span class="sourceLineNo">3697</span>            miniBatchOp.addCellCount(cells.size());<a name="line.3697"></a>
-<span class="sourceLineNo">3698</span>          }<a name="line.3698"></a>
-<span class="sourceLineNo">3699</span>        }<a name="line.3699"></a>
-<span class="sourceLineNo">3700</span><a name="line.3700"></a>
-<span class="sourceLineNo">3701</span>        WALEdit fromCP = walEditsFromCoprocessors[index];<a name="line.3701"></a>
-<span class="sourceLineNo">3702</span>        if (fromCP != null) {<a name="line.3702"></a>
-<span class="sourceLineNo">3703</span>          miniBatchOp.addCellCount(fromCP.size());<a name="line.3703"></a>
-<span class="sourceLineNo">3704</span>        }<a name="line.3704"></a>
-<span class="sourceLineNo">3705</span>        return true;<a name="line.3705"></a>
-<span class="sourceLineNo">3706</span>      });<a name="line.3706"></a>
-<span class="sourceLineNo">3707</span><a name="line.3707"></a>
-<span class="sourceLineNo">3708</span>      if (region.coprocessorHost != null) {<a name="line.3708"></a>
-<span class="sourceLineNo">3709</span>        // calling the pre CP hook for batch mutation<a name="line.3709"></a>
-<span class="sourceLineNo">3710</span>        region.coprocessorHost.preBatchMutate(miniBatchOp);<a name="line.3710"></a>
-<span class="sourceLineNo">3711</span>        checkAndMergeCPMutations(miniBatchOp, acquiredRowLocks, timestamp);<a name="line.3711"></a>
-<span class="sourceLineNo">3712</span>      }<a name="line.3712"></a>
-<span class="sourceLineNo">3713</span>    }<a name="line.3713"></a>
-<span class="sourceLineNo">3714</span><a name="line.3714"></a>
-<span class="sourceLineNo">3715</span>    @Override<a name="line.3715"></a>
-<span class="sourceLineNo">3716</span>    public List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; buildWALEdits(final MiniBatchOperationInProgress&lt;Mutation&gt;<a name="line.3716"></a>
-<span class="sourceLineNo">3717</span>        miniBatchOp) throws IOException {<a name="line.3717"></a>
-<span class="sourceLineNo">3718</span>      List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; walEdits = super.buildWALEdits(miniBatchOp);<a name="line.3718"></a>
-<span class="sourceLineNo">3719</span>      // for MutationBatchOperation, more than one nonce is not allowed<a name="line.3719"></a>
-<span class="sourceLineNo">3720</span>      if (walEdits.size() &gt; 1) {<a name="line.3720"></a>
-<span class="sourceLineNo">3721</span>        throw new IOException("Found multiple nonce keys per batch!");<a name="line.3721"></a>
-<span class="sourceLineNo">3722</span>      }<a name="line.3722"></a>
-<span class="sourceLineNo">3723</span>      return walEdits;<a name="line.3723"></a>
-<span class="sourceLineNo">3724</span>    }<a name="line.3724"></a>
-<span class="sourceLineNo">3725</span><a name="line.3725"></a>
-<span class="sourceLineNo">3726</span>    @Override<a name="line.3726"></a>
-<span class="sourceLineNo">3727</span>    public WriteEntry writeMiniBatchOperationsToMemStore(<a name="line.3727"></a>
-<span class="sourceLineNo">3728</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, @Nullable WriteEntry writeEntry)<a name="line.3728"></a>
-<span class="sourceLineNo">3729</span>        throws IOException {<a name="line.3729"></a>
-<span class="sourceLineNo">3730</span>      if (writeEntry == null) {<a name="line.3730"></a>
-<span class="sourceLineNo">3731</span>        writeEntry = region.mvcc.begin();<a name="line.3731"></a>
-<span class="sourceLineNo">3732</span>      }<a name="line.3732"></a>
-<span class="sourceLineNo">3733</span>      super.writeMiniBatchOperationsToMemStore(miniBatchOp, writeEntry.getWriteNumber());<a name="line.3733"></a>
-<span class="sourceLineNo">3734</span>      return writeEntry;<a name="line.3734"></a>
-<span class="sourceLineNo">3735</span>    }<a name="line.3735"></a>
-<span class="sourceLineNo">3736</span><a name="line.3736"></a>
-<span class="sourceLineNo">3737</span>    @Override<a name="line.3737"></a>
-<span class="sourceLineNo">3738</span>    public void completeMiniBatchOperations(<a name="line.3738"></a>
-<span class="sourceLineNo">3739</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3739"></a>
-<span class="sourceLineNo">3740</span>        throws IOException {<a name="line.3740"></a>
-<span class="sourceLineNo">3741</span>      // TODO: can it be done after completing mvcc?<a name="line.3741"></a>
-<span class="sourceLineNo">3742</span>      // calling the post CP hook for batch mutation<a name="line.3742"></a>
-<span class="sourceLineNo">3743</span>      if (region.coprocessorHost != null) {<a name="line.3743"></a>
-<span class="sourceLineNo">3744</span>        region.coprocessorHost.postBatchMutate(miniBatchOp);<a name="line.3744"></a>
-<span class="sourceLineNo">3745</span>      }<a name="line.3745"></a>
-<span class="sourceLineNo">3746</span>      super.completeMiniBatchOperations(miniBatchOp, writeEntry);<a name="line.3746"></a>
-<span class="sourceLineNo">3747</span>    }<a name="line.3747"></a>
-<span class="sourceLineNo">3748</span><a name="line.3748"></a>
-<span class="sourceLineNo">3749</span>    @Override<a name="line.3749"></a>
-<span class="sourceLineNo">3750</span>    public void doPostOpCleanupForMiniBatch(MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3750"></a>
-<span class="sourceLineNo">3751</span>        final WALEdit walEdit, boolean success) throws IOException {<a name="line.3751"></a>
-<span class="sourceLineNo">3752</span><a name="line.3752"></a>
-<span class="sourceLineNo">3753</span>      super.doPostOpCleanupForMiniBatch(miniBatchOp, walEdit, success);<a name="line.3753"></a>
-<span class="sourceLineNo">3754</span>      if (miniBatchOp != null) {<a name="line.3754"></a>
-<span class="sourceLineNo">3755</span>        // synced so that the coprocessor contract is adhered to.<a name="line.3755"></a>
-<span class="sourceLineNo">3756</span>        if (region.coprocessorHost != null) {<a name="line.3756"></a>
-<span class="sourceLineNo">3757</span>          visitBatchOperations(false, miniBatchOp.getLastIndexExclusive(), (int i) -&gt; {<a name="line.3757"></a>
-<span class="sourceLineNo">3758</span>            // only for successful puts<a name="line.3758"></a>
-<span class="sourceLineNo">3759</span>            if (retCodeDetails[i].getOperationStatusCode() == OperationStatusCode.SUCCESS) {<a name="line.3759"></a>
-<span class="sourceLineNo">3760</span>              Mutation m = getMutation(i);<a name="line.3760"></a>
-<span class="sourceLineNo">3761</span>              if (m instanceof Put) {<a name="line.3761"></a>
-<span class="sourceLineNo">3762</span>                region.coprocessorHost.postPut((Put) m, walEdit, m.getDurability());<a name="line.3762"></a>
-<span class="sourceLineNo">3763</span>              } else {<a name="line.3763"></a>
-<span class="sourceLineNo">3764</span>                region.coprocessorHost.postDelete((Delete) m, walEdit, m.getDurability());<a name="line.3764"></a>
-<span class="sourceLineNo">3765</span>              }<a name="line.3765"></a>
-<span class="sourceLineNo">3766</span>            }<a name="line.3766"></a>
-<span class="sourceLineNo">3767</span>            return true;<a name="line.3767"></a>
-<span class="sourceLineNo">3768</span>          });<a name="line.3768"></a>
-<span class="sourceLineNo">3769</span>        }<a name="line.3769"></a>
-<span class="sourceLineNo">3770</span><a name="line.3770"></a>
-<span class="sourceLineNo">3771</span>        // See if the column families were consistent through the whole thing.<a name="line.3771"></a>
-<span class="sourceLineNo">3772</span>        // if they were then keep them. If they were not then pass a null.<a name="line.3772"></a>
-<span class="sourceLineNo">3773</span>        // null will be treated as unknown.<a name="line.3773"></a>
-<span class="sourceLineNo">3774</span>        // Total time taken might be involving Puts and Deletes.<a name="line.3774"></a>
-<span class="sourceLineNo">3775</span>        // Split the time for puts and deletes based on the total number of Puts and Deletes.<a name="line.3775"></a>
-<span class="sourceLineNo">3776</span>        if (region.metricsRegion != null) {<a name="line.3776"></a>
-<span class="sourceLineNo">3777</span>          if (miniBatchOp.getNumOfPuts() &gt; 0) {<a name="line.3777"></a>
-<span class="sourceLineNo">3778</span>            // There were some Puts in the batch.<a name="line.3778"></a>
-<span class="sourceLineNo">3779</span>            region.metricsRegion.updatePut();<a name="line.3779"></a>
-<span class="sourceLineNo">3780</span>          }<a name="line.3780"></a>
-<span class="sourceLineNo">3781</span>          if (miniBatchOp.getNumOfDeletes() &gt; 0) {<a name="line.3781"></a>
-<span class="sourceLineNo">3782</span>            // There were some Deletes in the batch.<a name="line.3782"></a>
-<span class="sourceLineNo">3783</span>            region.metricsRegion.updateDelete();<a name="line.3783"></a>
-<span class="sourceLineNo">3784</span>          }<a name="line.3784"></a>
-<span class="sourceLineNo">3785</span>        }<a name="line.3785"></a>
-<span class="sourceLineNo">3786</span>      }<a name="line.3786"></a>
-<span class="sourceLineNo">3787</span><a name="line.3787"></a>
-<span class="sourceLineNo">3788</span>      if (region.coprocessorHost != null) {<a name="line.3788"></a>
-<span class="sourceLineNo">3789</span>        // call the coprocessor hook to do any finalization steps after the put is done<a name="line.3789"></a>
-<span class="sourceLineNo">3790</span>        region.coprocessorHost.postBatchMutateIndispensably(<a name="line.3790"></a>
-<span class="sourceLineNo">3791</span>            miniBatchOp != null ? miniBatchOp : createMiniBatch(size(), 0), success);<a name="line.3791"></a>
-<span class="sourceLineNo">3792</span>      }<a name="line.3792"></a>
-<span class="sourceLineNo">3793</span>    }<a name="line.3793"></a>
-<span class="sourceLineNo">3794</span><a name="line.3794"></a>
-<span class="sourceLineNo">3795</span>    /**<a name="line.3795"></a>
-<span class="sourceLineNo">3796</span>     * Runs prePut/ preDelete coprocessor hook for input mutation in a batch<a name="line.3796"></a>
-<span class="sourceLineNo">3797</span>     * @param metrics Array of 2 ints. index 0: count of puts and index 1: count of deletes<a name="line.3797"></a>
-<span class="sourceLineNo">3798</span>     */<a name="line.3798"></a>
-<span class="sourceLineNo">3799</span>    private void callPreMutateCPHook(int index, final WALEdit walEdit, final int[] metrics)<a name="line.3799"></a>
-<span class="sourceLineNo">3800</span>        throws IOException {<a name="line.3800"></a>
-<span class="sourceLineNo">3801</span>      Mutation m = getMutation(index);<a name="line.3801"></a>
-<span class="sourceLineNo">3802</span>      if (m instanceof Put) {<a name="line.3802"></a>
-<span class="sourceLineNo">3803</span>        if (region.coprocessorHost.prePut((Put) m, walEdit, m.getDurability())) {<a name="line.3803"></a>
-<span class="sourceLineNo">3804</span>          // pre hook says skip this Put<a name="line.3804"></a>
-<span class="sourceLineNo">3805</span>          // mark as success and skip in doMiniBatchMutation<a name="line.3805"></a>
-<span class="sourceLineNo">3806</span>          metrics[0]++;<a name="line.3806"></a>
-<span class="sourceLineNo">3807</span>          retCodeDetails[index] = OperationStatus.SUCCESS;<a name="line.3807"></a>
-<span class="sourceLineNo">3808</span>        }<a name="line.3808"></a>
-<span class="sourceLineNo">3809</span>      } else if (m instanceof Delete) {<a name="line.3809"></a>
-<span class="sourceLineNo">3810</span>        Delete curDel = (Delete) m;<a name="line.3810"></a>
-<span class="sourceLineNo">3811</span>        if (curDel.getFamilyCellMap().isEmpty()) {<a name="line.3811"></a>
-<span class="sourceLineNo">3812</span>          // handle deleting a row case<a name="line.3812"></a>
-<span class="sourceLineNo">3813</span>          // TODO: prepareDelete() has been called twice, before and after preDelete() CP hook.<a name="line.3813"></a>
-<span class="sourceLineNo">3814</span>          // Can this be avoided?<a name="line.3814"></a>
-<span class="sourceLineNo">3815</span>          region.prepareDelete(curDel);<a name="line.3815"></a>
-<span class="sourceLineNo">3816</span>        }<a name="line.3816"></a>
-<span class="sourceLineNo">3817</span>        if (region.coprocessorHost.preDelete(curDel, walEdit, m.getDurability())) {<a name="line.3817"></a>
-<span class="sourceLineNo">3818</span>          // pre hook says skip this Delete<a name="line.3818"></a>
-<span class="sourceLineNo">3819</span>          // mark as success and skip in doMiniBatchMutation<a name="line.3819"></a>
-<span class="sourceLineNo">3820</span>          metrics[1]++;<a name="line.3820"></a>
-<span class="sourceLineNo">3821</span>          retCodeDetails[index] = OperationStatus.SUCCESS;<a name="line.3821"></a>
-<span class="sourceLineNo">3822</span>        }<a name="line.3822"></a>
-<span class="sourceLineNo">3823</span>      } else {<a name="line.3823"></a>
-<span class="sourceLineNo">3824</span>        String msg = "Put/Delete mutations only supported in a batch";<a name="line.3824"></a>
-<span class="sourceLineNo">3825</span>        // In case of passing Append mutations along with the Puts and Deletes in batchMutate<a name="line.3825"></a>
-<span class="sourceLineNo">3826</span>        // mark the operation return code as failure so that it will not be considered in<a name="line.3826"></a>
-<span class="sourceLineNo">3827</span>        // the doMiniBatchMutation<a name="line.3827"></a>
-<span class="sourceLineNo">3828</span>        retCodeDetails[index] = new OperationStatus(OperationStatusCode.FAILURE, msg);<a name="line.3828"></a>
-<span class="sourceLineNo">3829</span><a name="line.3829"></a>
-<span class="sourceLineNo">3830</span>        if (isAtomic()) { // fail, atomic means all or none<a name="line.3830"></a>
-<span class="sourceLineNo">3831</span>          throw new IOException(msg);<a name="line.3831"></a>
-<span class="sourceLineNo">3832</span>        }<a name="line.3832"></a>
-<span class="sourceLineNo">3833</span>      }<a name="line.3833"></a>
-<span class="sourceLineNo">3834</span>    }<a name="line.3834"></a>
-<span class="sourceLineNo">3835</span><a name="line.3835"></a>
-<span class="sourceLineNo">3836</span>    private void checkAndMergeCPMutations(final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3836"></a>
-<span class="sourceLineNo">3837</span>        final List&lt;RowLock&gt; acquiredRowLocks, final long timestamp) throws IOException {<a name="line.3837"></a>
-<span class="sourceLineNo">3838</span>      visitBatchOperations(true, nextIndexToProcess + miniBatchOp.size(), (int i) -&gt; {<a name="line.3838"></a>
-<span class="sourceLineNo">3839</span>        // we pass (i - firstIndex) below since the call expects a relative index<a name="line.3839"></a>
-<span class="sourceLineNo">3840</span>        Mutation[] cpMutations = miniBatchOp.getOperationsFromCoprocessors(i - nextIndexToProcess);<a name="line.3840"></a>
-<span class="sourceLineNo">3841</span>        if (cpMutations == null) {<a name="line.3841"></a>
-<span class="sourceLineNo">3842</span>          return true;<a name="line.3842"></a>
-<span class="sourceLineNo">3843</span>        }<a name="line.3843"></a>
-<span class="sourceLineNo">3844</span>        // Else Coprocessor added more Mutations corresponding to the Mutation at this index.<a name="line.3844"></a>
-<span class="sourceLineNo">3845</span>        Mutation mutation = getMutation(i);<a name="line.3845"></a>
-<span class="sourceLineNo">3846</span>        for (Mutation cpMutation : cpMutations) {<a name="line.3846"></a>
-<span class="sourceLineNo">3847</span>          this.checkAndPrepareMutation(cpMutation, timestamp);<a name="line.3847"></a>
-<span class="sourceLineNo">3848</span><a name="line.3848"></a>
-<span class="sourceLineNo">3849</span>          // Acquire row locks. If not, the whole batch will fail.<a name="line.3849"></a>
-<span class="sourceLineNo">3850</span>          acquiredRowLocks.add(region.getRowLockInternal(cpMutation.getRow(), true, null));<a name="line.3850"></a>
+<span class="sourceLineNo">3469</span>      visitBatchOperations(true, nextIndexToProcess + miniBatchOp.size(), new Visitor() {<a name="line.3469"></a>
+<span class="sourceLineNo">3470</span>        private Pair&lt;NonceKey, WALEdit&gt; curWALEditForNonce;<a name="line.3470"></a>
+<span class="sourceLineNo">3471</span><a name="line.3471"></a>
+<span class="sourceLineNo">3472</span>        @Override<a name="line.3472"></a>
+<span class="sourceLineNo">3473</span>        public boolean visit(int index) throws IOException {<a name="line.3473"></a>
+<span class="sourceLineNo">3474</span>          Mutation m = getMutation(index);<a name="line.3474"></a>
+<span class="sourceLineNo">3475</span>          // we use durability of the original mutation for the mutation passed by CP.<a name="line.3475"></a>
+<span class="sourceLineNo">3476</span>          if (region.getEffectiveDurability(m.getDurability()) == Durability.SKIP_WAL) {<a name="line.3476"></a>
+<span class="sourceLineNo">3477</span>            region.recordMutationWithoutWal(m.getFamilyCellMap());<a name="line.3477"></a>
+<span class="sourceLineNo">3478</span>            return true;<a name="line.3478"></a>
+<span class="sourceLineNo">3479</span>          }<a name="line.3479"></a>
+<span class="sourceLineNo">3480</span><a name="line.3480"></a>
+<span class="sourceLineNo">3481</span>          // the batch may contain multiple nonce keys (replay case). If so, write WALEdit for each.<a name="line.3481"></a>
+<span class="sourceLineNo">3482</span>          // Given how nonce keys are originally written, these should be contiguous.<a name="line.3482"></a>
+<span class="sourceLineNo">3483</span>          // They don't have to be, it will still work, just write more WALEdits than needed.<a name="line.3483"></a>
+<span class="sourceLineNo">3484</span>          long nonceGroup = getNonceGroup(index);<a name="line.3484"></a>
+<span class="sourceLineNo">3485</span>          long nonce = getNonce(index);<a name="line.3485"></a>
+<span class="sourceLineNo">3486</span>          if (curWALEditForNonce == null ||<a name="line.3486"></a>
+<span class="sourceLineNo">3487</span>              curWALEditForNonce.getFirst().getNonceGroup() != nonceGroup ||<a name="line.3487"></a>
+<span class="sourceLineNo">3488</span>              curWALEditForNonce.getFirst().getNonce() != nonce) {<a name="line.3488"></a>
+<span class="sourceLineNo">3489</span>            curWALEditForNonce = new Pair&lt;&gt;(new NonceKey(nonceGroup, nonce),<a name="line.3489"></a>
+<span class="sourceLineNo">3490</span>                new WALEdit(miniBatchOp.getCellCount(), isInReplay()));<a name="line.3490"></a>
+<span class="sourceLineNo">3491</span>            walEdits.add(curWALEditForNonce);<a name="line.3491"></a>
+<span class="sourceLineNo">3492</span>          }<a name="line.3492"></a>
+<span class="sourceLineNo">3493</span>          WALEdit walEdit = curWALEditForNonce.getSecond();<a name="line.3493"></a>
+<span class="sourceLineNo">3494</span><a name="line.3494"></a>
+<span class="sourceLineNo">3495</span>          // Add WAL edits from CPs.<a name="line.3495"></a>
+<span class="sourceLineNo">3496</span>          WALEdit fromCP = walEditsFromCoprocessors[index];<a name="line.3496"></a>
+<span class="sourceLineNo">3497</span>          if (fromCP != null) {<a name="line.3497"></a>
+<span class="sourceLineNo">3498</span>            for (Cell cell : fromCP.getCells()) {<a name="line.3498"></a>
+<span class="sourceLineNo">3499</span>              walEdit.add(cell);<a name="line.3499"></a>
+<span class="sourceLineNo">3500</span>            }<a name="line.3500"></a>
+<span class="sourceLineNo">3501</span>          }<a name="line.3501"></a>
+<span class="sourceLineNo">3502</span>          walEdit.add(familyCellMaps[index]);<a name="line.3502"></a>
+<span class="sourceLineNo">3503</span><a name="line.3503"></a>
+<span class="sourceLineNo">3504</span>          return true;<a name="line.3504"></a>
+<span class="sourceLineNo">3505</span>        }<a name="line.3505"></a>
+<span class="sourceLineNo">3506</span>      });<a name="line.3506"></a>
+<span class="sourceLineNo">3507</span>      return walEdits;<a name="line.3507"></a>
+<span class="sourceLineNo">3508</span>    }<a name="line.3508"></a>
+<span class="sourceLineNo">3509</span><a name="line.3509"></a>
+<span class="sourceLineNo">3510</span>    /**<a name="line.3510"></a>
+<span class="sourceLineNo">3511</span>     * This method completes mini-batch operations by calling postBatchMutate() CP hook (if<a name="line.3511"></a>
+<span class="sourceLineNo">3512</span>     * required) and completing mvcc.<a name="line.3512"></a>
+<span class="sourceLineNo">3513</span>     */<a name="line.3513"></a>
+<span class="sourceLineNo">3514</span>    public void completeMiniBatchOperations(<a name="line.3514"></a>
+<span class="sourceLineNo">3515</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3515"></a>
+<span class="sourceLineNo">3516</span>        throws IOException {<a name="line.3516"></a>
+<span class="sourceLineNo">3517</span>      if (writeEntry != null) {<a name="line.3517"></a>
+<span class="sourceLineNo">3518</span>        region.mvcc.completeAndWait(writeEntry);<a name="line.3518"></a>
+<span class="sourceLineNo">3519</span>      }<a name="line.3519"></a>
+<span class="sourceLineNo">3520</span>    }<a name="line.3520"></a>
+<span class="sourceLineNo">3521</span><a name="line.3521"></a>
+<span class="sourceLineNo">3522</span>    public void doPostOpCleanupForMiniBatch(<a name="line.3522"></a>
+<span class="sourceLineNo">3523</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WALEdit walEdit,<a name="line.3523"></a>
+<span class="sourceLineNo">3524</span>        boolean success) throws IOException {<a name="line.3524"></a>
+<span class="sourceLineNo">3525</span>      doFinishHotnessProtector(miniBatchOp);<a name="line.3525"></a>
+<span class="sourceLineNo">3526</span>    }<a name="line.3526"></a>
+<span class="sourceLineNo">3527</span><a name="line.3527"></a>
+<span class="sourceLineNo">3528</span>    private void doFinishHotnessProtector(<a name="line.3528"></a>
+<span class="sourceLineNo">3529</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp) {<a name="line.3529"></a>
+<span class="sourceLineNo">3530</span>      // check and return if the protector is not enabled<a name="line.3530"></a>
+<span class="sourceLineNo">3531</span>      if (!region.storeHotnessProtector.isEnable()) {<a name="line.3531"></a>
+<span class="sourceLineNo">3532</span>        return;<a name="line.3532"></a>
+<span class="sourceLineNo">3533</span>      }<a name="line.3533"></a>
+<span class="sourceLineNo">3534</span>      // miniBatchOp is null, if and only if lockRowsAndBuildMiniBatch throwing exception.<a name="line.3534"></a>
+<span class="sourceLineNo">3535</span>      // This case was handled.<a name="line.3535"></a>
+<span class="sourceLineNo">3536</span>      if (miniBatchOp == null) {<a name="line.3536"></a>
+<span class="sourceLineNo">3537</span>        return;<a name="line.3537"></a>
+<span class="sourceLineNo">3538</span>      }<a name="line.3538"></a>
+<span class="sourceLineNo">3539</span><a name="line.3539"></a>
+<span class="sourceLineNo">3540</span>      final int finalLastIndexExclusive = miniBatchOp.getLastIndexExclusive();<a name="line.3540"></a>
+<span class="sourceLineNo">3541</span><a name="line.3541"></a>
+<span class="sourceLineNo">3542</span>      for (int i = nextIndexToProcess; i &lt; finalLastIndexExclusive; i++) {<a name="line.3542"></a>
+<span class="sourceLineNo">3543</span>        switch (retCodeDetails[i].getOperationStatusCode()) {<a name="line.3543"></a>
+<span class="sourceLineNo">3544</span>          case SUCCESS:<a name="line.3544"></a>
+<span class="sourceLineNo">3545</span>          case FAILURE:<a name="line.3545"></a>
+<span class="sourceLineNo">3546</span>            region.storeHotnessProtector.finish(getMutation(i).getFamilyCellMap());<a name="line.3546"></a>
+<span class="sourceLineNo">3547</span>            break;<a name="line.3547"></a>
+<span class="sourceLineNo">3548</span>          default:<a name="line.3548"></a>
+<span class="sourceLineNo">3549</span>            // do nothing<a name="line.3549"></a>
+<span class="sourceLineNo">3550</span>            // We won't start the protector for NOT_RUN/BAD_FAMILY/SANITY_CHECK_FAILURE and the<a name="line.3550"></a>
+<span class="sourceLineNo">3551</span>            // STORE_TOO_BUSY case is handled in StoreHotnessProtector#start<a name="line.3551"></a>
+<span class="sourceLineNo">3552</span>            break;<a name="line.3552"></a>
+<span class="sourceLineNo">3553</span>        }<a name="line.3553"></a>
+<span class="sourceLineNo">3554</span>      }<a name="line.3554"></a>
+<span class="sourceLineNo">3555</span>    }<a name="line.3555"></a>
+<span class="sourceLineNo">3556</span><a name="line.3556"></a>
+<span class="sourceLineNo">3557</span>    /**<a name="line.3557"></a>
+<span class="sourceLineNo">3558</span>     * Atomically apply the given map of family-&gt;edits to the memstore.<a name="line.3558"></a>
+<span class="sourceLineNo">3559</span>     * This handles the consistency control on its own, but the caller<a name="line.3559"></a>
+<span class="sourceLineNo">3560</span>     * should already have locked updatesLock.readLock(). This also does<a name="line.3560"></a>
+<span class="sourceLineNo">3561</span>     * &lt;b&gt;not&lt;/b&gt; check the families for validity.<a name="line.3561"></a>
+<span class="sourceLineNo">3562</span>     *<a name="line.3562"></a>
+<span class="sourceLineNo">3563</span>     * @param familyMap Map of Cells by family<a name="line.3563"></a>
+<span class="sourceLineNo">3564</span>     */<a name="line.3564"></a>
+<span class="sourceLineNo">3565</span>    protected void applyFamilyMapToMemStore(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3565"></a>
+<span class="sourceLineNo">3566</span>        MemStoreSizing memstoreAccounting) throws IOException {<a name="line.3566"></a>
+<span class="sourceLineNo">3567</span>      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; e : familyMap.entrySet()) {<a name="line.3567"></a>
+<span class="sourceLineNo">3568</span>        byte[] family = e.getKey();<a name="line.3568"></a>
+<span class="sourceLineNo">3569</span>        List&lt;Cell&gt; cells = e.getValue();<a name="line.3569"></a>
+<span class="sourceLineNo">3570</span>        assert cells instanceof RandomAccess;<a name="line.3570"></a>
+<span class="sourceLineNo">3571</span>        region.applyToMemStore(region.getStore(family), cells, false, memstoreAccounting);<a name="line.3571"></a>
+<span class="sourceLineNo">3572</span>      }<a name="line.3572"></a>
+<span class="sourceLineNo">3573</span>    }<a name="line.3573"></a>
+<span class="sourceLineNo">3574</span>  }<a name="line.3574"></a>
+<span class="sourceLineNo">3575</span><a name="line.3575"></a>
+<span class="sourceLineNo">3576</span><a name="line.3576"></a>
+<span class="sourceLineNo">3577</span>  /**<a name="line.3577"></a>
+<span class="sourceLineNo">3578</span>   * Batch of mutation operations. Base class is shared with {@link ReplayBatchOperation} as most<a name="line.3578"></a>
+<span class="sourceLineNo">3579</span>   * of the logic is same.<a name="line.3579"></a>
+<span class="sourceLineNo">3580</span>   */<a name="line.3580"></a>
+<span class="sourceLineNo">3581</span>  static class MutationBatchOperation extends BatchOperation&lt;Mutation&gt; {<a name="line.3581"></a>
+<span class="sourceLineNo">3582</span>    private long nonceGroup;<a name="line.3582"></a>
+<span class="sourceLineNo">3583</span>    private long nonce;<a name="line.3583"></a>
+<span class="sourceLineNo">3584</span>    public MutationBatchOperation(final HRegion region, Mutation[] operations, boolean atomic,<a name="line.3584"></a>
+<span class="sourceLineNo">3585</span>        long nonceGroup, long nonce) {<a name="line.3585"></a>
+<span class="sourceLineNo">3586</span>      super(region, operations);<a name="line.3586"></a>
+<span class="sourceLineNo">3587</span>      this.atomic = atomic;<a name="line.3587"></a>
+<span class="sourceLineNo">3588</span>      this.nonceGroup = nonceGroup;<a name="line.3588"></a>
+<span class="sourceLineNo">3589</span>      this.nonce = nonce;<a name="line.3589"></a>
+<span class="sourceLineNo">3590</span>    }<a name="line.3590"></a>
+<span class="sourceLineNo">3591</span><a name="line.3591"></a>
+<span class="sourceLineNo">3592</span>    @Override<a name="line.3592"></a>
+<span class="sourceLineNo">3593</span>    public Mutation getMutation(int index) {<a name="line.3593"></a>
+<span class="sourceLineNo">3594</span>      return this.operations[index];<a name="line.3594"></a>
+<span class="sourceLineNo">3595</span>    }<a name="line.3595"></a>
+<span class="sourceLineNo">3596</span><a name="line.3596"></a>
+<span class="sourceLineNo">3597</span>    @Override<a name="line.3597"></a>
+<span class="sourceLineNo">3598</span>    public long getNonceGroup(int index) {<a name="line.3598"></a>
+<span class="sourceLineNo">3599</span>      return nonceGroup;<a name="line.3599"></a>
+<span class="sourceLineNo">3600</span>    }<a name="line.3600"></a>
+<span class="sourceLineNo">3601</span><a name="line.3601"></a>
+<span class="sourceLineNo">3602</span>    @Override<a name="line.3602"></a>
+<span class="sourceLineNo">3603</span>    public long getNonce(int index) {<a name="line.3603"></a>
+<span class="sourceLineNo">3604</span>      return nonce;<a name="line.3604"></a>
+<span class="sourceLineNo">3605</span>    }<a name="line.3605"></a>
+<span class="sourceLineNo">3606</span><a name="line.3606"></a>
+<span class="sourceLineNo">3607</span>    @Override<a name="line.3607"></a>
+<span class="sourceLineNo">3608</span>    public Mutation[] getMutationsForCoprocs() {<a name="line.3608"></a>
+<span class="sourceLineNo">3609</span>      return this.operations;<a name="line.3609"></a>
+<span class="sourceLineNo">3610</span>    }<a name="line.3610"></a>
+<span class="sourceLineNo">3611</span><a name="line.3611"></a>
+<span class="sourceLineNo">3612</span>    @Override<a name="line.3612"></a>
+<span class="sourceLineNo">3613</span>    public boolean isInReplay() {<a name="line.3613"></a>
+<span class="sourceLineNo">3614</span>      return false;<a name="line.3614"></a>
+<span class="sourceLineNo">3615</span>    }<a name="line.3615"></a>
+<span class="sourceLineNo">3616</span><a name="line.3616"></a>
+<span class="sourceLineNo">3617</span>    @Override<a name="line.3617"></a>
+<span class="sourceLineNo">3618</span>    public long getOrigLogSeqNum() {<a name="line.3618"></a>
+<span class="sourceLineNo">3619</span>      return SequenceId.NO_SEQUENCE_ID;<a name="line.3619"></a>
+<span class="sourceLineNo">3620</span>    }<a name="line.3620"></a>
+<span class="sourceLineNo">3621</span><a name="line.3621"></a>
+<span class="sourceLineNo">3622</span>    @Override<a name="line.3622"></a>
+<span class="sourceLineNo">3623</span>    public void startRegionOperation() throws IOException {<a name="line.3623"></a>
+<span class="sourceLineNo">3624</span>      region.startRegionOperation(Operation.BATCH_MUTATE);<a name="line.3624"></a>
+<span class="sourceLineNo">3625</span>    }<a name="line.3625"></a>
+<span class="sourceLineNo">3626</span><a name="line.3626"></a>
+<span class="sourceLineNo">3627</span>    @Override<a name="line.3627"></a>
+<span class="sourceLineNo">3628</span>    public void closeRegionOperation() throws IOException {<a name="line.3628"></a>
+<span class="sourceLineNo">3629</span>      region.closeRegionOperation(Operation.BATCH_MUTATE);<a name="line.3629"></a>
+<span class="sourceLineNo">3630</span>    }<a name="line.3630"></a>
+<span class="sourceLineNo">3631</span><a name="line.3631"></a>
+<span class="sourceLineNo">3632</span>    @Override<a name="line.3632"></a>
+<span class="sourceLineNo">3633</span>    public void checkAndPreparePut(Put p) throws IOException {<a name="line.3633"></a>
+<span class="sourceLineNo">3634</span>      region.checkFamilies(p.getFamilyCellMap().keySet(), p.getDurability());<a name="line.3634"></a>
+<span class="sourceLineNo">3635</span>    }<a name="line.3635"></a>
+<span class="sourceLineNo">3636</span><a name="line.3636"></a>
+<span class="sourceLineNo">3637</span>    @Override<a name="line.3637"></a>
+<span class="sourceLineNo">3638</span>    public void checkAndPrepare() throws IOException {<a name="line.3638"></a>
+<span class="sourceLineNo">3639</span>      final int[] metrics = {0, 0}; // index 0: puts, index 1: deletes<a name="line.3639"></a>
+<span class="sourceLineNo">3640</span>      visitBatchOperations(true, this.size(), new Visitor() {<a name="line.3640"></a>
+<span class="sourceLineNo">3641</span>        private long now = EnvironmentEdgeManager.currentTime();<a name="line.3641"></a>
+<span class="sourceLineNo">3642</span>        private WALEdit walEdit;<a name="line.3642"></a>
+<span class="sourceLineNo">3643</span>        @Override<a name="line.3643"></a>
+<span class="sourceLineNo">3644</span>        public boolean visit(int index) throws IOException {<a name="line.3644"></a>
+<span class="sourceLineNo">3645</span>          // Run coprocessor pre hook outside of locks to avoid deadlock<a name="line.3645"></a>
+<span class="sourceLineNo">3646</span>          if (region.coprocessorHost != null) {<a name="line.3646"></a>
+<span class="sourceLineNo">3647</span>            if (walEdit == null) {<a name="line.3647"></a>
+<span class="sourceLineNo">3648</span>              walEdit = new WALEdit();<a name="line.3648"></a>
+<span class="sourceLineNo">3649</span>            }<a name="line.3649"></a>
+<span class="sourceLineNo">3650</span>            callPreMutateCPHook(index, walEdit, metrics);<a name="line.3650"></a>
+<span class="sourceLineNo">3651</span>            if (!walEdit.isEmpty()) {<a name="line.3651"></a>
+<span class="sourceLineNo">3652</span>              walEditsFromCoprocessors[index] = walEdit;<a name="line.3652"></a>
+<span class="sourceLineNo">3653</span>              walEdit = null;<a name="line.3653"></a>
+<span class="sourceLineNo">3654</span>            }<a name="line.3654"></a>
+<span class="sourceLineNo">3655</span>          }<a name="line.3655"></a>
+<span class="sourceLineNo">3656</span>          if (isOperationPending(index)) {<a name="line.3656"></a>
+<span class="sourceLineNo">3657</span>            // TODO: Currently validation is done with current time before acquiring locks and<a name="line.3657"></a>
+<span class="sourceLineNo">3658</span>            // updates are done with different timestamps after acquiring locks. This behavior is<a name="line.3658"></a>
+<span class="sourceLineNo">3659</span>            // inherited from the code prior to this change. Can this be changed?<a name="line.3659"></a>
+<span class="sourceLineNo">3660</span>            checkAndPrepareMutation(index, now);<a name="line.3660"></a>
+<span class="sourceLineNo">3661</span>          }<a name="line.3661"></a>
+<span class="sourceLineNo">3662</span>          return true;<a name="line.3662"></a>
+<span class="sourceLineNo">3663</span>        }<a name="line.3663"></a>
+<span class="sourceLineNo">3664</span>      });<a name="line.3664"></a>
+<span class="sourceLineNo">3665</span><a name="line.3665"></a>
+<span class="sourceLineNo">3666</span>      // FIXME: we may update metrics twice! here for all operations bypassed by CP and later in<a name="line.3666"></a>
+<span class="sourceLineNo">3667</span>      // normal processing.<a name="line.3667"></a>
+<span class="sourceLineNo">3668</span>      // Update metrics in same way as it is done when we go the normal processing route (we now<a name="line.3668"></a>
+<span class="sourceLineNo">3669</span>      // update general metrics though a Coprocessor did the work).<a name="line.3669"></a>
+<span class="sourceLineNo">3670</span>      if (region.metricsRegion != null) {<a name="line.3670"></a>
+<span class="sourceLineNo">3671</span>        if (metrics[0] &gt; 0) {<a name="line.3671"></a>
+<span class="sourceLineNo">3672</span>          // There were some Puts in the batch.<a name="line.3672"></a>
+<span class="sourceLineNo">3673</span>          region.metricsRegion.updatePut();<a name="line.3673"></a>
+<span class="sourceLineNo">3674</span>        }<a name="line.3674"></a>
+<span class="sourceLineNo">3675</span>        if (metrics[1] &gt; 0) {<a name="line.3675"></a>
+<span class="sourceLineNo">3676</span>          // There were some Deletes in the batch.<a name="line.3676"></a>
+<span class="sourceLineNo">3677</span>          region.metricsRegion.updateDelete();<a name="line.3677"></a>
+<span class="sourceLineNo">3678</span>        }<a name="line.3678"></a>
+<span class="sourceLineNo">3679</span>      }<a name="line.3679"></a>
+<span class="sourceLineNo">3680</span>    }<a name="line.3680"></a>
+<span class="sourceLineNo">3681</span><a name="line.3681"></a>
+<span class="sourceLineNo">3682</span>    @Override<a name="line.3682"></a>
+<span class="sourceLineNo">3683</span>    public void prepareMiniBatchOperations(MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3683"></a>
+<span class="sourceLineNo">3684</span>        long timestamp, final List&lt;RowLock&gt; acquiredRowLocks) throws IOException {<a name="line.3684"></a>
+<span class="sourceLineNo">3685</span>      byte[] byteTS = Bytes.toBytes(timestamp);<a name="line.3685"></a>
+<span class="sourceLineNo">3686</span>      visitBatchOperations(true, miniBatchOp.getLastIndexExclusive(), (int index) -&gt; {<a name="line.3686"></a>
+<span class="sourceLineNo">3687</span>        Mutation mutation = getMutation(index);<a name="line.3687"></a>
+<span class="sourceLineNo">3688</span>        if (mutation instanceof Put) {<a name="line.3688"></a>
+<span class="sourceLineNo">3689</span>          HRegion.updateCellTimestamps(familyCellMaps[index].values(), byteTS);<a name="line.3689"></a>
+<span class="sourceLineNo">3690</span>          miniBatchOp.incrementNumOfPuts();<a name="line.3690"></a>
+<span class="sourceLineNo">3691</span>        } else {<a name="line.3691"></a>
+<span class="sourceLineNo">3692</span>          region.prepareDeleteTimestamps(mutation, familyCellMaps[index], byteTS);<a name="line.3692"></a>
+<span class="sourceLineNo">3693</span>          miniBatchOp.incrementNumOfDeletes();<a name="line.3693"></a>
+<span class="sourceLineNo">3694</span>        }<a name="line.3694"></a>
+<span class="sourceLineNo">3695</span>        region.rewriteCellTags(familyCellMaps[index], mutation);<a name="line.3695"></a>
+<span class="sourceLineNo">3696</span><a name="line.3696"></a>
+<span class="sourceLineNo">3697</span>        // update cell count<a name="line.3697"></a>
+<span class="sourceLineNo">3698</span>        if (region.getEffectiveDurability(mutation.getDurability()) != Durability.SKIP_WAL) {<a name="line.3698"></a>
+<span class="sourceLineNo">3699</span>          for (List&lt;Cell&gt; cells : mutation.getFamilyCellMap().values()) {<a name="line.3699"></a>
+<span class="sourceLineNo">3700</span>            miniBatchOp.addCellCount(cells.size());<a name="line.3700"></a>
+<span class="sourceLineNo">3701</span>          }<a name="line.3701"></a>
+<span class="sourceLineNo">3702</span>        }<a name="line.3702"></a>
+<span class="sourceLineNo">3703</span><a name="line.3703"></a>
+<span class="sourceLineNo">3704</span>        WALEdit fromCP = walEditsFromCoprocessors[index];<a name="line.3704"></a>
+<span class="sourceLineNo">3705</span>        if (fromCP != null) {<a name="line.3705"></a>
+<span class="sourceLineNo">3706</span>          miniBatchOp.addCellCount(fromCP.size());<a name="line.3706"></a>
+<span class="sourceLineNo">3707</span>        }<a name="line.3707"></a>
+<span class="sourceLineNo">3708</span>        return true;<a name="line.3708"></a>
+<span class="sourceLineNo">3709</span>      });<a name="line.3709"></a>
+<span class="sourceLineNo">3710</span><a name="line.3710"></a>
+<span class="sourceLineNo">3711</span>      if (region.coprocessorHost != null) {<a name="line.3711"></a>
+<span class="sourceLineNo">3712</span>        // calling the pre CP hook for batch mutation<a name="line.3712"></a>
+<span class="sourceLineNo">3713</span>        region.coprocessorHost.preBatchMutate(miniBatchOp);<a name="line.3713"></a>
+<span class="sourceLineNo">3714</span>        checkAndMergeCPMutations(miniBatchOp, acquiredRowLocks, timestamp);<a name="line.3714"></a>
+<span class="sourceLineNo">3715</span>      }<a name="line.3715"></a>
+<span class="sourceLineNo">3716</span>    }<a name="line.3716"></a>
+<span class="sourceLineNo">3717</span><a name="line.3717"></a>
+<span class="sourceLineNo">3718</span>    @Override<a name="line.3718"></a>
+<span class="sourceLineNo">3719</span>    public List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; buildWALEdits(final MiniBatchOperationInProgress&lt;Mutation&gt;<a name="line.3719"></a>
+<span class="sourceLineNo">3720</span>        miniBatchOp) throws IOException {<a name="line.3720"></a>
+<span class="sourceLineNo">3721</span>      List&lt;Pair&lt;NonceKey, WALEdit&gt;&gt; walEdits = super.buildWALEdits(miniBatchOp);<a name="line.3721"></a>
+<span class="sourceLineNo">3722</span>      // for MutationBatchOperation, more than one nonce is not allowed<a name="line.3722"></a>
+<span class="sourceLineNo">3723</span>      if (walEdits.size() &gt; 1) {<a name="line.3723"></a>
+<span class="sourceLineNo">3724</span>        throw new IOException("Found multiple nonce keys per batch!");<a name="line.3724"></a>
+<span class="sourceLineNo">3725</span>      }<a name="line.3725"></a>
+<span class="sourceLineNo">3726</span>      return walEdits;<a name="line.3726"></a>
+<span class="sourceLineNo">3727</span>    }<a name="line.3727"></a>
+<span class="sourceLineNo">3728</span><a name="line.3728"></a>
+<span class="sourceLineNo">3729</span>    @Override<a name="line.3729"></a>
+<span class="sourceLineNo">3730</span>    public WriteEntry writeMiniBatchOperationsToMemStore(<a name="line.3730"></a>
+<span class="sourceLineNo">3731</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, @Nullable WriteEntry writeEntry)<a name="line.3731"></a>
+<span class="sourceLineNo">3732</span>        throws IOException {<a name="line.3732"></a>
+<span class="sourceLineNo">3733</span>      if (writeEntry == null) {<a name="line.3733"></a>
+<span class="sourceLineNo">3734</span>        writeEntry = region.mvcc.begin();<a name="line.3734"></a>
+<span class="sourceLineNo">3735</span>      }<a name="line.3735"></a>
+<span class="sourceLineNo">3736</span>      super.writeMiniBatchOperationsToMemStore(miniBatchOp, writeEntry.getWriteNumber());<a name="line.3736"></a>
+<span class="sourceLineNo">3737</span>      return writeEntry;<a name="line.3737"></a>
+<span class="sourceLineNo">3738</span>    }<a name="line.3738"></a>
+<span class="sourceLineNo">3739</span><a name="line.3739"></a>
+<span class="sourceLineNo">3740</span>    @Override<a name="line.3740"></a>
+<span class="sourceLineNo">3741</span>    public void completeMiniBatchOperations(<a name="line.3741"></a>
+<span class="sourceLineNo">3742</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3742"></a>
+<span class="sourceLineNo">3743</span>        throws IOException {<a name="line.3743"></a>
+<span class="sourceLineNo">3744</span>      // TODO: can it be done after completing mvcc?<a name="line.3744"></a>
+<span class="sourceLineNo">3745</span>      // calling the post CP hook for batch mutation<a name="line.3745"></a>
+<span class="sourceLineNo">3746</span>      if (region.coprocessorHost != null) {<a name="line.3746"></a>
+<span class="sourceLineNo">3747</span>        region.coprocessorHost.postBatchMutate(miniBatchOp);<a name="line.3747"></a>
+<span class="sourceLineNo">3748</span>      }<a name="line.3748"></a>
+<span class="sourceLineNo">3749</span>      super.completeMiniBatchOperations(miniBatchOp, writeEntry);<a name="line.3749"></a>
+<span class="sourceLineNo">3750</span>    }<a name="line.3750"></a>
+<span class="sourceLineNo">3751</span><a name="line.3751"></a>
+<span class="sourceLineNo">3752</span>    @Override<a name="line.3752"></a>
+<span class="sourceLineNo">3753</span>    public void doPostOpCleanupForMiniBatch(MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3753"></a>
+<span class="sourceLineNo">3754</span>        final WALEdit walEdit, boolean success) throws IOException {<a name="line.3754"></a>
+<span class="sourceLineNo">3755</span><a name="line.3755"></a>
+<span class="sourceLineNo">3756</span>      super.doPostOpCleanupForMiniBatch(miniBatchOp, walEdit, success);<a name="line.3756"></a>
+<span class="sourceLineNo">3757</span>      if (miniBatchOp != null) {<a name="line.3757"></a>
+<span class="sourceLineNo">3758</span>        // synced so that the coprocessor contract is adhered to.<a name="line.3758"></a>
+<span class="sourceLineNo">3759</span>        if (region.coprocessorHost != null) {<a name="line.3759"></a>
+<span class="sourceLineNo">3760</span>          visitBatchOperations(false, miniBatchOp.getLastIndexExclusive(), (int i) -&gt; {<a name="line.3760"></a>
+<span class="sourceLineNo">3761</span>            // only for successful puts<a name="line.3761"></a>
+<span class="sourceLineNo">3762</span>            if (retCodeDetails[i].getOperationStatusCode() == OperationStatusCode.SUCCESS) {<a name="line.3762"></a>
+<span class="sourceLineNo">3763</span>              Mutation m = getMutation(i);<a name="line.3763"></a>
+<span class="sourceLineNo">3764</span>              if (m instanceof Put) {<a name="line.3764"></a>
+<span class="sourceLineNo">3765</span>                region.coprocessorHost.postPut((Put) m, walEdit, m.getDurability());<a name="line.3765"></a>
+<span class="sourceLineNo">3766</span>              } else {<a name="line.3766"></a>
+<span class="sourceLineNo">3767</span>                region.coprocessorHost.postDelete((Delete) m, walEdit, m.getDurability());<a name="line.3767"></a>
+<span class="sourceLineNo">3768</span>              }<a name="line.3768"></a>
+<span class="sourceLineNo">3769</span>            }<a name="line.3769"></a>
+<span class="sourceLineNo">3770</span>            return true;<a name="line.3770"></a>
+<span class="sourceLineNo">3771</span>          });<a name="line.3771"></a>
+<span class="sourceLineNo">3772</span>        }<a name="line.3772"></a>
+<span class="sourceLineNo">3773</span><a name="line.3773"></a>
+<span class="sourceLineNo">3774</span>        // See if the column families were consistent through the whole thing.<a name="line.3774"></a>
+<span class="sourceLineNo">3775</span>        // if they were then keep them. If they were not then pass a null.<a name="line.3775"></a>
+<span class="sourceLineNo">3776</span>        // null will be treated as unknown.<a name="line.3776"></a>
+<span class="sourceLineNo">3777</span>        // Total time taken might be involving Puts and Deletes.<a name="line.3777"></a>
+<span class="sourceLineNo">3778</span>        // Split the time for puts and deletes based on the total number of Puts and Deletes.<a name="line.3778"></a>
+<span class="sourceLineNo">3779</span>        if (region.metricsRegion != null) {<a name="line.3779"></a>
+<span class="sourceLineNo">3780</span>          if (miniBatchOp.getNumOfPuts() &gt; 0) {<a name="line.3780"></a>
+<span class="sourceLineNo">3781</span>            // There were some Puts in the batch.<a name="line.3781"></a>
+<span class="sourceLineNo">3782</span>            region.metricsRegion.updatePut();<a name="line.3782"></a>
+<span class="sourceLineNo">3783</span>          }<a name="line.3783"></a>
+<span class="sourceLineNo">3784</span>          if (miniBatchOp.getNumOfDeletes() &gt; 0) {<a name="line.3784"></a>
+<span class="sourceLineNo">3785</span>            // There were some Deletes in the batch.<a name="line.3785"></a>
+<span class="sourceLineNo">3786</span>            region.metricsRegion.updateDelete();<a name="line.3786"></a>
+<span class="sourceLineNo">3787</span>          }<a name="line.3787"></a>
+<span class="sourceLineNo">3788</span>        }<a name="line.3788"></a>
+<span class="sourceLineNo">3789</span>      }<a name="line.3789"></a>
+<span class="sourceLineNo">3790</span><a name="line.3790"></a>
+<span class="sourceLineNo">3791</span>      if (region.coprocessorHost != null) {<a name="line.3791"></a>
+<span class="sourceLineNo">3792</span>        // call the coprocessor hook to do any finalization steps after the put is done<a name="line.3792"></a>
+<span class="sourceLineNo">3793</span>        region.coprocessorHost.postBatchMutateIndispensably(<a name="line.3793"></a>
+<span class="sourceLineNo">3794</span>            miniBatchOp != null ? miniBatchOp : createMiniBatch(size(), 0), success);<a name="line.3794"></a>
+<span class="sourceLineNo">3795</span>      }<a name="line.3795"></a>
+<span class="sourceLineNo">3796</span>    }<a name="line.3796"></a>
+<span class="sourceLineNo">3797</span><a name="line.3797"></a>
+<span class="sourceLineNo">3798</span>    /**<a name="line.3798"></a>
+<span class="sourceLineNo">3799</span>     * Runs prePut/ preDelete coprocessor hook for input mutation in a batch<a name="line.3799"></a>
+<span class="sourceLineNo">3800</span>     * @param metrics Array of 2 ints. index 0: count of puts and index 1: count of deletes<a name="line.3800"></a>
+<span class="sourceLineNo">3801</span>     */<a name="line.3801"></a>
+<span class="sourceLineNo">3802</span>    private void callPreMutateCPHook(int index, final WALEdit walEdit, final int[] metrics)<a name="line.3802"></a>
+<span class="sourceLineNo">3803</span>        throws IOException {<a name="line.3803"></a>
+<span class="sourceLineNo">3804</span>      Mutation m = getMutation(index);<a name="line.3804"></a>
+<span class="sourceLineNo">3805</span>      if (m instanceof Put) {<a name="line.3805"></a>
+<span class="sourceLineNo">3806</span>        if (region.coprocessorHost.prePut((Put) m, walEdit, m.getDurability())) {<a name="line.3806"></a>
+<span class="sourceLineNo">3807</span>          // pre hook says skip this Put<a name="line.3807"></a>
+<span class="sourceLineNo">3808</span>          // mark as success and skip in doMiniBatchMutation<a name="line.3808"></a>
+<span class="sourceLineNo">3809</span>          metrics[0]++;<a name="line.3809"></a>
+<span class="sourceLineNo">3810</span>          retCodeDetails[index] = OperationStatus.SUCCESS;<a name="line.3810"></a>
+<span class="sourceLineNo">3811</span>        }<a name="line.3811"></a>
+<span class="sourceLineNo">3812</span>      } else if (m instanceof Delete) {<a name="line.3812"></a>
+<span class="sourceLineNo">3813</span>        Delete curDel = (Delete) m;<a name="line.3813"></a>
+<span class="sourceLineNo">3814</span>        if (curDel.getFamilyCellMap().isEmpty()) {<a name="line.3814"></a>
+<span class="sourceLineNo">3815</span>          // handle deleting a row case<a name="line.3815"></a>
+<span class="sourceLineNo">3816</span>          // TODO: prepareDelete() has been called twice, before and after preDelete() CP hook.<a name="line.3816"></a>
+<span class="sourceLineNo">3817</span>          // Can this be avoided?<a name="line.3817"></a>
+<span class="sourceLineNo">3818</span>          region.prepareDelete(curDel);<a name="line.3818"></a>
+<span class="sourceLineNo">3819</span>        }<a name="line.3819"></a>
+<span class="sourceLineNo">3820</span>        if (region.coprocessorHost.preDelete(curDel, walEdit, m.getDurability())) {<a name="line.3820"></a>
+<span class="sourceLineNo">3821</span>          // pre hook says skip this Delete<a name="line.3821"></a>
+<span class="sourceLineNo">3822</span>          // mark as success and skip in doMiniBatchMutation<a name="line.3822"></a>
+<span class="sourceLineNo">3823</span>          metrics[1]++;<a name="line.3823"></a>
+<span class="sourceLineNo">3824</span>          retCodeDetails[index] = OperationStatus.SUCCESS;<a name="line.3824"></a>
+<span class="sourceLineNo">3825</span>        }<a name="line.3825"></a>
+<span class="sourceLineNo">3826</span>      } else {<a name="line.3826"></a>
+<span class="sourceLineNo">3827</span>        String msg = "Put/Delete mutations only supported in a batch";<a name="line.3827"></a>
+<span class="sourceLineNo">3828</span>        // In case of passing Append mutations along with the Puts and Deletes in batchMutate<a name="line.3828"></a>
+<span class="sourceLineNo">3829</span>        // mark the operation return code as failure so that it will not be considered in<a name="line.3829"></a>
+<span class="sourceLineNo">3830</span>        // the doMiniBatchMutation<a name="line.3830"></a>
+<span class="sourceLineNo">3831</span>        retCodeDetails[index] = new OperationStatus(OperationStatusCode.FAILURE, msg);<a name="line.3831"></a>
+<span class="sourceLineNo">3832</span><a name="line.3832"></a>
+<span class="sourceLineNo">3833</span>        if (isAtomic()) { // fail, atomic means all or none<a name="line.3833"></a>
+<span class="sourceLineNo">3834</span>          throw new IOException(msg);<a name="line.3834"></a>
+<span class="sourceLineNo">3835</span>        }<a name="line.3835"></a>
+<span class="sourceLineNo">3836</span>      }<a name="line.3836"></a>
+<span class="sourceLineNo">3837</span>    }<a name="line.3837"></a>
+<span class="sourceLineNo">3838</span><a name="line.3838"></a>
+<span class="sourceLineNo">3839</span>    private void checkAndMergeCPMutations(final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3839"></a>
+<span class="sourceLineNo">3840</span>        final List&lt;RowLock&gt; acquiredRowLocks, final long timestamp) throws IOException {<a name="line.3840"></a>
+<span class="sourceLineNo">3841</span>      visitBatchOperations(true, nextIndexToProcess + miniBatchOp.size(), (int i) -&gt; {<a name="line.3841"></a>
+<span class="sourceLineNo">3842</span>        // we pass (i - firstIndex) below since the call expects a relative index<a name="line.3842"></a>
+<span class="sourceLineNo">3843</span>        Mutation[] cpMutations = miniBatchOp.getOperationsFromCoprocessors(i - nextIndexToProcess);<a name="line.3843"></a>
+<span class="sourceLineNo">3844</span>        if (cpMutations == null) {<a name="line.3844"></a>
+<span class="sourceLineNo">3845</span>          return true;<a name="line.3845"></a>
+<span class="sourceLineNo">3846</span>        }<a name="line.3846"></a>
+<span class="sourceLineNo">3847</span>        // Else Coprocessor added more Mutations corresponding to the Mutation at this index.<a name="line.3847"></a>
+<span class="sourceLineNo">3848</span>        Mutation mutation = getMutation(i);<a name="line.3848"></a>
+<span class="sourceLineNo">3849</span>        for (Mutation cpMutation : cpMutations) {<a name="line.3849"></a>
+<span class="sourceLineNo">3850</span>          this.checkAndPrepareMutation(cpMutation, timestamp);<a name="line.3850"></a>
 <span class="sourceLineNo">3851</span><a name="line.3851"></a>
-<span class="sourceLineNo">3852</span>          // Returned mutations from coprocessor correspond to the Mutation at index i. We can<a name="line.3852"></a>
-<span class="sourceLineNo">3853</span>          // directly add the cells from those mutations to the familyMaps of this mutation.<a name="line.3853"></a>
-<span class="sourceLineNo">3854</span>          Map&lt;byte[], List&lt;Cell&gt;&gt; cpFamilyMap = cpMutation.getFamilyCellMap();<a name="line.3854"></a>
-<span class="sourceLineNo">3855</span>          region.rewriteCellTags(cpFamilyMap, mutation);<a name="line.3855"></a>
-<span class="sourceLineNo">3856</span>          // will get added to the memStore later<a name="line.3856"></a>
-<span class="sourceLineNo">3857</span>          mergeFamilyMaps(familyCellMaps[i], cpFamilyMap);<a name="line.3857"></a>
-<span class="sourceLineNo">3858</span><a name="line.3858"></a>
-<span class="sourceLineNo">3859</span>          // The durability of returned mutation is replaced by the corresponding mutation.<a name="line.3859"></a>
-<span class="sourceLineNo">3860</span>          // If the corresponding mutation contains the SKIP_WAL, we shouldn't count the<a name="line.3860"></a>
-<span class="sourceLineNo">3861</span>          // cells of returned mutation.<a name="line.3861"></a>
-<span class="sourceLineNo">3862</span>          if (region.getEffectiveDurability(mutation.getDurability()) != Durability.SKIP_WAL) {<a name="line.3862"></a>
-<span class="sourceLineNo">3863</span>            for (List&lt;Cell&gt; cells : cpFamilyMap.values()) {<a name="line.3863"></a>
-<span class="sourceLineNo">3864</span>              miniBatchOp.addCellCount(cells.size());<a name="line.3864"></a>
-<span class="sourceLineNo">3865</span>            }<a name="line.3865"></a>
-<span class="sourceLineNo">3866</span>          }<a name="line.3866"></a>
-<span class="sourceLineNo">3867</span>        }<a name="line.3867"></a>
-<span class="sourceLineNo">3868</span>        return true;<a name="line.3868"></a>
-<span class="sourceLineNo">3869</span>      });<a name="line.3869"></a>
-<span class="sourceLineNo">3870</span>    }<a name="line.3870"></a>
-<span class="sourceLineNo">3871</span><a name="line.3871"></a>
-<span class="sourceLineNo">3872</span>    private void mergeFamilyMaps(Map&lt;byte[], List&lt;Cell&gt;&gt; familyMap,<a name="line.3872"></a>
-<span class="sourceLineNo">3873</span>        Map&lt;byte[], List&lt;Cell&gt;&gt; toBeMerged) {<a name="line.3873"></a>
-<span class="sourceLineNo">3874</span>      for (Map.Entry&lt;byte[], List&lt;Cell&gt;&gt; entry : toBeMerged.entrySet()) {<a name="line.3874"></a>
-<span class="sourceLineNo">3875</span>        List&lt;Cell&gt; cells = familyMap.get(entry.getKey());<a name="line.3875"></a>
-<span class="sourceLineNo">3876</span>        if (cells == null) {<a name="line.3876"></a>
-<span class="sourceLineNo">3877</span>          familyMap.put(entry.getKey(), entry.getValue());<a name="line.3877"></a>
-<span class="sourceLineNo">3878</span>        } else {<a name="line.3878"></a>
-<span class="sourceLineNo">3879</span>          cells.addAll(entry.getValue());<a name="line.3879"></a>
-<span class="sourceLineNo">3880</span>        }<a name="line.3880"></a>
-<span class="sourceLineNo">3881</span>      }<a name="line.3881"></a>
-<span class="sourceLineNo">3882</span>    }<a name="line.3882"></a>
-<span class="sourceLineNo">3883</span>  }<a name="line.3883"></a>
-<span class="sourceLineNo">3884</span><a name="line.3884"></a>
-<span class="sourceLineNo">3885</span>  /**<a name="line.3885"></a>
-<span class="sourceLineNo">3886</span>   * Batch of mutations for replay. Base class is shared with {@link MutationBatchOperation} as most<a name="line.3886"></a>
-<span class="sourceLineNo">3887</span>   * of the logic is same.<a name="line.3887"></a>
-<span class="sourceLineNo">3888</span>   */<a name="line.3888"></a>
-<span class="sourceLineNo">3889</span>  static class ReplayBatchOperation extends BatchOperation&lt;MutationReplay&gt; {<a name="line.3889"></a>
-<span class="sourceLineNo">3890</span>    private long origLogSeqNum = 0;<a name="line.3890"></a>
-<span class="sourceLineNo">3891</span>    public ReplayBatchOperation(final HRegion region, MutationReplay[] operations,<a name="line.3891"></a>
-<span class="sourceLineNo">3892</span>        long origLogSeqNum) {<a name="line.3892"></a>
-<span class="sourceLineNo">3893</span>      super(region, operations);<a name="line.3893"></a>
-<span class="sourceLineNo">3894</span>      this.origLogSeqNum = origLogSeqNum;<a name="line.3894"></a>
-<span class="sourceLineNo">3895</span>    }<a name="line.3895"></a>
-<span class="sourceLineNo">3896</span><a name="line.3896"></a>
-<span class="sourceLineNo">3897</span>    @Override<a name="line.3897"></a>
-<span class="sourceLineNo">3898</span>    public Mutation getMutation(int index) {<a name="line.3898"></a>
-<span class="sourceLineNo">3899</span>      return this.operations[index].mutation;<a name="line.3899"></a>
-<span class="sourceLineNo">3900</span>    }<a name="line.3900"></a>
-<span class="sourceLineNo">3901</span><a name="line.3901"></a>
-<span class="sourceLineNo">3902</span>    @Override<a name="line.3902"></a>
-<span class="sourceLineNo">3903</span>    public long getNonceGroup(int index) {<a name="line.3903"></a>
-<span class="sourceLineNo">3904</span>      return this.operations[index].nonceGroup;<a name="line.3904"></a>
-<span class="sourceLineNo">3905</span>    }<a name="line.3905"></a>
-<span class="sourceLineNo">3906</span><a name="line.3906"></a>
-<span class="sourceLineNo">3907</span>    @Override<a name="line.3907"></a>
-<span class="sourceLineNo">3908</span>    public long getNonce(int index) {<a name="line.3908"></a>
-<span class="sourceLineNo">3909</span>      return this.operations[index].nonce;<a name="line.3909"></a>
-<span class="sourceLineNo">3910</span>    }<a name="line.3910"></a>
-<span class="sourceLineNo">3911</span><a name="line.3911"></a>
-<span class="sourceLineNo">3912</span>    @Override<a name="line.3912"></a>
-<span class="sourceLineNo">3913</span>    public Mutation[] getMutationsForCoprocs() {<a name="line.3913"></a>
-<span class="sourceLineNo">3914</span>      return null;<a name="line.3914"></a>
-<span class="sourceLineNo">3915</span>    }<a name="line.3915"></a>
-<span class="sourceLineNo">3916</span><a name="line.3916"></a>
-<span class="sourceLineNo">3917</span>    @Override<a name="line.3917"></a>
-<span class="sourceLineNo">3918</span>    public boolean isInReplay() {<a name="line.3918"></a>
-<span class="sourceLineNo">3919</span>      return true;<a name="line.3919"></a>
-<span class="sourceLineNo">3920</span>    }<a name="line.3920"></a>
-<span class="sourceLineNo">3921</span><a name="line.3921"></a>
-<span class="sourceLineNo">3922</span>    @Override<a name="line.3922"></a>
-<span class="sourceLineNo">3923</span>    public long getOrigLogSeqNum() {<a name="line.3923"></a>
-<span class="sourceLineNo">3924</span>      return this.origLogSeqNum;<a name="line.3924"></a>
-<span class="sourceLineNo">3925</span>    }<a name="line.3925"></a>
-<span class="sourceLineNo">3926</span><a name="line.3926"></a>
-<span class="sourceLineNo">3927</span>    @Override<a name="line.3927"></a>
-<span class="sourceLineNo">3928</span>    public void startRegionOperation() throws IOException {<a name="line.3928"></a>
-<span class="sourceLineNo">3929</span>      region.startRegionOperation(Operation.REPLAY_BATCH_MUTATE);<a name="line.3929"></a>
-<span class="sourceLineNo">3930</span>    }<a name="line.3930"></a>
-<span class="sourceLineNo">3931</span><a name="line.3931"></a>
-<span class="sourceLineNo">3932</span>    @Override<a name="line.3932"></a>
-<span class="sourceLineNo">3933</span>    public void closeRegionOperation() throws IOException {<a name="line.3933"></a>
-<span class="sourceLineNo">3934</span>      region.closeRegionOperation(Operation.REPLAY_BATCH_MUTATE);<a name="line.3934"></a>
-<span class="sourceLineNo">3935</span>    }<a name="line.3935"></a>
-<span class="sourceLineNo">3936</span><a name="line.3936"></a>
-<span class="sourceLineNo">3937</span>    /**<a name="line.3937"></a>
-<span class="sourceLineNo">3938</span>     * During replay, there could exist column families which are removed between region server<a name="line.3938"></a>
-<span class="sourceLineNo">3939</span>     * failure and replay<a name="line.3939"></a>
-<span class="sourceLineNo">3940</span>     */<a name="line.3940"></a>
-<span class="sourceLineNo">3941</span>    @Override<a name="line.3941"></a>
-<span class="sourceLineNo">3942</span>    protected void checkAndPreparePut(Put p) throws IOException {<a name="line.3942"></a>
-<span class="sourceLineNo">3943</span>      Map&lt;byte[], List&lt;Cell&gt;&gt; familyCellMap = p.getFamilyCellMap();<a name="line.3943"></a>
-<span class="sourceLineNo">3944</span>      List&lt;byte[]&gt; nonExistentList = null;<a name="line.3944"></a>
-<span class="sourceLineNo">3945</span>      for (byte[] family : familyCellMap.keySet()) {<a name="line.3945"></a>
-<span class="sourceLineNo">3946</span>        if (!region.htableDescriptor.hasColumnFamily(family)) {<a name="line.3946"></a>
-<span class="sourceLineNo">3947</span>          if (nonExistentList == null) {<a name="line.3947"></a>
-<span class="sourceLineNo">3948</span>            nonExistentList = new ArrayList&lt;&gt;();<a name="line.3948"></a>
-<span class="sourceLineNo">3949</span>          }<a name="line.3949"></a>
-<span class="sourceLineNo">3950</span>          nonExistentList.add(family);<a name="line.3950"></a>
-<span class="sourceLineNo">3951</span>        }<a name="line.3951"></a>
-<span class="sourceLineNo">3952</span>      }<a name="line.3952"></a>
-<span class="sourceLineNo">3953</span>      if (nonExistentList != null) {<a name="line.3953"></a>
-<span class="sourceLineNo">3954</span>        for (byte[] family : nonExistentList) {<a name="line.3954"></a>
-<span class="sourceLineNo">3955</span>          // Perhaps schema was changed between crash and replay<a name="line.3955"></a>
-<span class="sourceLineNo">3956</span>          LOG.info("No family for " + Bytes.toString(family) + " omit from reply.");<a name="line.3956"></a>
-<span class="sourceLineNo">3957</span>          familyCellMap.remove(family);<a name="line.3957"></a>
-<span class="sourceLineNo">3958</span>        }<a name="line.3958"></a>
-<span class="sourceLineNo">3959</span>      }<a name="line.3959"></a>
-<span class="sourceLineNo">3960</span>    }<a name="line.3960"></a>
-<span class="sourceLineNo">3961</span><a name="line.3961"></a>
-<span class="sourceLineNo">3962</span>    @Override<a name="line.3962"></a>
-<span class="sourceLineNo">3963</span>    public void checkAndPrepare() throws IOException {<a name="line.3963"></a>
-<span class="sourceLineNo">3964</span>      long now = EnvironmentEdgeManager.currentTime();<a name="line.3964"></a>
-<span class="sourceLineNo">3965</span>      visitBatchOperations(true, this.size(), (int index) -&gt; {<a name="line.3965"></a>
-<span class="sourceLineNo">3966</span>        checkAndPrepareMutation(index, now);<a name="line.3966"></a>
-<span class="sourceLineNo">3967</span>        return true;<a name="line.3967"></a>
-<span class="sourceLineNo">3968</span>      });<a name="line.3968"></a>
-<span class="sourceLineNo">3969</span>    }<a name="line.3969"></a>
-<span class="sourceLineNo">3970</span><a name="line.3970"></a>
-<span class="sourceLineNo">3971</span>    @Override<a name="line.3971"></a>
-<span class="sourceLineNo">3972</span>    public void prepareMiniBatchOperations(MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp,<a name="line.3972"></a>
-<span class="sourceLineNo">3973</span>        long timestamp, final List&lt;RowLock&gt; acquiredRowLocks) throws IOException {<a name="line.3973"></a>
-<span class="sourceLineNo">3974</span>      visitBatchOperations(true, miniBatchOp.getLastIndexExclusive(), (int index) -&gt; {<a name="line.3974"></a>
-<span class="sourceLineNo">3975</span>        // update cell count<a name="line.3975"></a>
-<span class="sourceLineNo">3976</span>        for (List&lt;Cell&gt; cells : getMutation(index).getFamilyCellMap().values()) {<a name="line.3976"></a>
-<span class="sourceLineNo">3977</span>          miniBatchOp.addCellCount(cells.size());<a name="line.3977"></a>
-<span class="sourceLineNo">3978</span>        }<a name="line.3978"></a>
-<span class="sourceLineNo">3979</span>        return true;<a name="line.3979"></a>
-<span class="sourceLineNo">3980</span>      });<a name="line.3980"></a>
-<span class="sourceLineNo">3981</span>    }<a name="line.3981"></a>
-<span class="sourceLineNo">3982</span><a name="line.3982"></a>
-<span class="sourceLineNo">3983</span>    @Override<a name="line.3983"></a>
-<span class="sourceLineNo">3984</span>    public WriteEntry writeMiniBatchOperationsToMemStore(<a name="line.3984"></a>
-<span class="sourceLineNo">3985</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3985"></a>
-<span class="sourceLineNo">3986</span>        throws IOException {<a name="line.3986"></a>
-<span class="sourceLineNo">3987</span>      super.writeMiniBatchOperationsToMemStore(miniBatchOp, getOrigLogSeqNum());<a name="line.3987"></a>
-<span class="sourceLineNo">3988</span>      return writeEntry;<a name="line.3988"></a>
-<span class="sourceLineNo">3989</span>    }<a name="line.3989"></a>
-<span class="sourceLineNo">3990</span><a name="line.3990"></a>
-<span class="sourceLineNo">3991</span>    @Override<a name="line.3991"></a>
-<span class="sourceLineNo">3992</span>    public void completeMiniBatchOperations(<a name="line.3992"></a>
-<span class="sourceLineNo">3993</span>        final MiniBatchOperationInProgress&lt;Mutation&gt; miniBatchOp, final WriteEntry writeEntry)<a name="line.3993"></a>
-<span class="sourceLineNo">3994</span>        throws IOException {<a name="line.3994"></a>
-<span class="sourceLineNo">3995</span>      super.completeMiniBatchOperations(miniBatchOp, writeEntry);<a name="line.3995"></a>
-<span class="sourceLineNo">3996</span>      region.mvcc.advanceTo(getOrigLogSeqNum());<a name="line.3996"></a>
-<span class="sourceLineNo">3997</span>    }<a name="line.3997"></a>
-<span class="sourceLineNo">3998</span>  }<a name="line.3998"></a>
-<span class="sourceLineNo">3999</span><a name="line.3999"></a>
-<span class="sourceLineNo">4000</span>  public OperationStatus[] batchMutate(Mutation[] mutations, long nonceGroup, long nonce)<a name="line.4000"></a>
-<span class="sourceLineNo">4001</span>      throws IOException {<a name="line.4001"></a>
-<span class="sourceLineNo">4002</span>    return batchMutate(mutations, false, nonceGroup, nonce);<a name="line.4002"></a>
-<span class="sourceLineNo">4003</span>  }<a name="line.4003"></a>
-<span class="sourceLineNo">4004</span><a name="line.4004"></a>
-<span class="sourceLineNo">4005</span>  public OperationStatus[] batchMutate(Mutation[] mutations, boolean atomic, long nonceGroup,<a name="line.4005"></a>
-<span class="sourceLineNo">4006</span>      long nonce) throws IOException {<a name="line.4006"></a>
-<span class="sourceLineNo">4007</span>    // As it stands, this is used for 3 things<a name="line.4007"></a>
-<span class="sourceLineNo">4008</span>    //  * batchMutate with single mutation - put/delete, separate or from checkAndMutate.<a name="line.4008"></a>
-<span class="sourceLineNo">4009</span>    //  * coprocessor calls (see ex. BulkDeleteEndpoint).<a name="line.4009"></a>
-<span class="sourceLineNo">4010</span>    // So nonces are not really ever used by HBase. They could be by coprocs, and checkAnd...<a name="line.4010"></a>
-<span class="sourceLineNo">4011</span>    return batchMutate(new MutationBatchOperation(this, mutations, atomic, nonceGroup, nonce));<a name="line.4011"></a>
-<span class="sourceLineNo">4012</span>  }<a name="line.4012"></a>
-<span class="sourceLineNo">4013</span><a name="line.4013"></a>
-<span class="sourceLineNo">4014</span>  @Override<a name="line.4014"></a>
-<span class="sourceLineNo">4015</span>  public OperationStatus[] batchMutate(Mutation[] mutations) throws IOException {<a name="line.4015"></a>
-<span class="sourceLineNo">4016</span>    return batchMutate(mutations, HConstants.NO_NONCE, HConstants.NO_NONCE);<a name="line.4016"></a>
-<span class="sourceLineNo">4017</span>  }<a name="line.4017"></a>
-<span class="sourceLineNo">4018</span><a name="line.4018"></a>
-<span class="sourceLineNo">4019</span>  public OperationStatus[] batchReplay(MutationReplay[] mutations, long replaySeqId)<a name="line.4019"></a>
-<span class="sourceLineNo">4020</span>      throws IOException {<a name="line.4020"></a>
-<span class="sourceLineNo">4021</span>    if (!RegionReplicaUtil.isDefaultReplica(getRegionInfo())<a name="line.4021"></a>
-<span class="sourceLineNo">4022</span>        &amp;&amp; replaySeqId &lt; lastReplayedOpenRegionSeqId) {<a name="line.4022"></a>
-<span class="sourceLineNo">4023</span>      // if it is a secondary replica we should ignore these entries silently<a name="line.4023"></a>
-<span class="sourceLineNo">4024</span>      // since they are coming out of order<a name="line.4024"></a>
-<span class="sourceLineNo">4025</span>      if (LOG.isTraceEnabled()) {<a name="line.4025"></a>
-<span class="sourceLineNo">4026</span>        LOG.trace(getRegionInfo().getEncodedName() + " : "<a name="line.4026"></a>
-<span class="sourceLineNo">4027</span>          + "Skipping " + mutations.length + " mutations with replaySeqId=" + replaySeqId<a name="line.4027"></a>
-<span class="sourceLineNo">4028</span>          + " which is &lt; than lastReplayedOpenRegionSeqId=" + lastReplayedOpenRegionSeqId);<a name="line.4028"></a>
-<span class="sourceLineNo">4029</span>        for (MutationReplay mut : mutations) {<a name="line.4029"></a>
-<span class="sourceLineNo">4030</span>          LOG.trace(getRegionInfo().getEncodedName() + " : Skipping : " + mut.mutation);<a name="line.4030"></a>
-<span class="sourceLineNo">4031</span>        }<a name="line.4031"></a>
-<span class="sourceLineNo">4032</span>      }<a name="line.4032"></a>
-<span class="sourceLineNo">4033</span><a name="line.4033"></a>
-<span class="sourceLineNo">4034</span>      OperationStatus[] statuses = new OperationStatus[mutations.length];<a name="line.4034"></a>
-<span class="sourceLineNo">4035</span>      for (int i = 0; i &lt; statuses.length; i++) {<a name="line.4035"></a>
-<span class="sourceLineNo">4036</span>        statuses[i] = OperationStatus.SUCCESS;<a name="line.4036"></a>
-<span class="sourceLineNo">4037</span>      }<a name="line.4037"></a>
-<span class="sourceLineNo">4038</span>      return statuses;<a name="line.4038"></a>
-<span class="sourceLineNo">4039</span>    }<a name="line.4039"></a>
-<span class="sourceLineNo">4040</span>    return batchMutate(new ReplayBatchOperation(this, mutations, replaySeqId));<a name="line.4040"></a>
-<span class="sourceLineNo">4041</span>  }<a name="line.4041"></a>
-<span class="sourceLineNo">4042</span><a name="line.4042"></a>
-<span class="sourceLineNo">4043</span>  /**<a name="line.4043"></a>
-<span class="sourceLineNo">4044</span>   * Perform a batch of mutations.<a name="line.4044"></a>
-<span class="sourceLineNo">4045</span>   *<a name="line.4045"></a>
-<span class="sourceLineNo">4046</span>   * It supports only Put and Delete mutations and will ignore other types passed. Operations in<a name="line.4046"></a>
-<span class="sourceLineNo">4047</span>   * a batch are stored with highest durability specified of for all operations in a batch,<a name="line.4047"></a>
-<span class="sourceLineNo">4048</span>   * except for {@link Durability#SKIP_WAL}.<a name="line.4048"></a>
-<span class="sourceLineNo">4049</span>   *<a name="line.4049"></a>
-<span class="sourceLineNo">4050</span>   * &lt;p&gt;This function is called from {@link #batchReplay(WALSplitUtil.MutationReplay[], long)} with<a name="line.4050"></a>
-<span class="sourceLineNo">4051</span>   * {@link ReplayBatchOperation} instance and {@link #batchMutate(Mutation[], long, long)} with<a name="line.4051"></a>
-<span class="sourceLineNo">4052</span>   * {@link MutationBatchOperation} instance as an argument. As the processing of replay batch<a name="line.4052"></a>
-<span class="sourceLineNo">4053</span>   * and mutation batch is very similar, lot of code is shared by providing generic methods in<a name="line.4053"></a>
-<span class="sourceLineNo">4054</span>   * base class {@link BatchOperation}. The logic for this method and<a name="line.4054"></a>
-<span class="sourceLineNo">4055</span>   * {@link #doMiniBatchMutate(BatchOperation)} is implemented using methods in base class which<a name="line.4055"></a>
-<span class="sourceLineNo">4056</span>   * are overridden by derived classes to implement special behavior.<a name="line.4056"></a>
-<span class="sourceLineNo">4057</span>   *<a name="line.4057"></a>
-<span class="sourceLineNo">4058</span>   * @param batchOp contains the list of mutations<a name="line.4058"></a>
-<span class="sourceLineNo">4059</span>   * @return an array of OperationStatus which internally contains the<a name="line.4059"></a>
-<span class="sourceLineNo">4060</span>   *         OperationStatusCode and the exceptionMessage if any.<a name="line.4060"></a>
-<span class="sourceLineNo">4061</span>   * @throws IOException if an IO problem is encountered<a name="line.4061"></a>
-<span class="sourceLineNo">4062</span>   */<a name="line.4062"></a>
... 213297 lines suppressed ...