hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From git-site-r...@apache.org
Subject [hbase-site] branch asf-site updated: Published site at e9f595307add3dfa37b2bb47fff9e4003134dc43.
Date Tue, 01 Jun 2021 17:04:35 GMT
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 c5dc89b  Published site at e9f595307add3dfa37b2bb47fff9e4003134dc43.
c5dc89b is described below

commit c5dc89b9a8e79b47d0f96ef927e139a56a422460
Author: jenkins <builds@apache.org>
AuthorDate: Tue Jun 1 17:04:16 2021 +0000

    Published site at e9f595307add3dfa37b2bb47fff9e4003134dc43.
---
 acid-semantics.html                                |    2 +-
 apache_hbase_reference_guide.pdf                   |    4 +-
 book.html                                          |    2 +-
 bulk-loads.html                                    |    2 +-
 checkstyle-aggregate.html                          |  156 +-
 checkstyle.rss                                     |   22 +-
 coc.html                                           |    2 +-
 dependencies.html                                  |    2 +-
 dependency-convergence.html                        |    2 +-
 dependency-info.html                               |    2 +-
 dependency-management.html                         |    2 +-
 devapidocs/index-all.html                          |   10 +-
 .../apache/hadoop/hbase/backup/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/client/package-tree.html   |   24 +-
 .../hadoop/hbase/coprocessor/package-tree.html     |    2 +-
 .../apache/hadoop/hbase/filter/package-tree.html   |    8 +-
 .../hadoop/hbase/hbtop/field/package-tree.html     |    2 +-
 .../org/apache/hadoop/hbase/http/package-tree.html |    4 +-
 .../apache/hadoop/hbase/io/hfile/package-tree.html |    6 +-
 .../org/apache/hadoop/hbase/ipc/package-tree.html  |    2 +-
 .../hadoop/hbase/mapreduce/package-tree.html       |    6 +-
 .../hadoop/hbase/master/balancer/package-tree.html |    2 +-
 .../apache/hadoop/hbase/master/package-tree.html   |    6 +-
 .../hbase/master/procedure/package-tree.html       |    4 +-
 .../hadoop/hbase/monitoring/package-tree.html      |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   16 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    2 +-
 .../hbase/procedure2/store/wal/package-tree.html   |    2 +-
 .../apache/hadoop/hbase/quotas/package-tree.html   |    6 +-
 .../hadoop/hbase/regionserver/package-tree.html    |   18 +-
 .../regionserver/querymatcher/package-tree.html    |    4 +-
 .../regionserver/wal/AbstractFSWAL.WalProps.html   |   10 +-
 .../hbase/regionserver/wal/AbstractFSWAL.html      |  471 ++--
 .../hadoop/hbase/regionserver/wal/AsyncFSWAL.html  |  134 +-
 .../hbase/regionserver/wal/DualAsyncFSWAL.html     |    6 +-
 .../wal/FSHLog.RingBufferEventHandler.html         |   38 +-
 .../wal/FSHLog.SafePointZigZagLatch.html           |   18 +-
 .../hbase/regionserver/wal/FSHLog.SyncRunner.html  |   22 +-
 .../hadoop/hbase/regionserver/wal/FSHLog.html      |   40 +-
 .../regionserver/wal/class-use/AbstractFSWAL.html  |    2 +-
 .../hbase/regionserver/wal/package-summary.html    |    2 +-
 .../hbase/regionserver/wal/package-tree.html       |    4 +-
 .../hadoop/hbase/regionserver/wal/package-use.html |    2 +-
 .../replication/regionserver/WALEntryStream.html   |   24 +-
 .../class-use/WALFileLengthProvider.html           |    2 +-
 .../replication/regionserver/package-tree.html     |    2 +-
 .../hadoop/hbase/security/access/package-tree.html |    6 +-
 .../apache/hadoop/hbase/security/package-tree.html |    4 +-
 .../apache/hadoop/hbase/thrift/package-tree.html   |    2 +-
 .../org/apache/hadoop/hbase/util/package-tree.html |    6 +-
 .../org/apache/hadoop/hbase/wal/class-use/WAL.html |    2 +-
 .../wal/class-use/WALProvider.AsyncWriter.html     |    3 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 .../regionserver/wal/AbstractFSWAL.WalProps.html   | 2682 ++++++++++----------
 .../hbase/regionserver/wal/AbstractFSWAL.html      | 2682 ++++++++++----------
 .../hadoop/hbase/regionserver/wal/AsyncFSWAL.html  | 1584 ++++++------
 .../wal/FSHLog.RingBufferEventHandler.html         | 1609 ++++++------
 .../wal/FSHLog.RingBufferExceptionHandler.html     | 1609 ++++++------
 .../wal/FSHLog.SafePointZigZagLatch.html           | 1609 ++++++------
 .../hbase/regionserver/wal/FSHLog.SyncRunner.html  | 1609 ++++++------
 .../hadoop/hbase/regionserver/wal/FSHLog.html      | 1609 ++++++------
 .../replication/regionserver/WALEntryStream.html   |  423 ++-
 downloads.html                                     |   18 +-
 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 +-
 testdevapidocs/allclasses-frame.html               |    2 +
 testdevapidocs/allclasses-noframe.html             |    2 +
 testdevapidocs/constant-values.html                |    7 +
 testdevapidocs/index-all.html                      |   22 +
 .../hadoop/hbase/class-use/HBaseClassTestRule.html |   46 +-
 .../hbase/class-use/HBaseTestingUtility.html       |    2 +-
 .../org/apache/hadoop/hbase/package-tree.html      |   16 +-
 .../hadoop/hbase/procedure/package-tree.html       |    8 +-
 .../hadoop/hbase/procedure2/package-tree.html      |    4 +-
 .../TestFailedAppendAndSync.DodgyFSLog.html        |    4 +-
 .../regionserver/TestWALLockup.DodgyFSLog.html     |    4 +-
 .../hadoop/hbase/regionserver/package-tree.html    |    8 +-
 .../wal/AbstractTestWALReplay.MockWAL.html         |    4 +-
 .../hbase/regionserver/wal/CustomAsyncFSWAL.html   |    4 +-
 .../hbase/regionserver/wal/CustomFSHLog.html       |    4 +-
 .../hbase/replication/DualAsyncFSWALForTest.html   |    4 +-
 .../regionserver/TestDumpReplicationQueues.html    |    4 +-
 ...onQueues.html => TestFSHLogWALEntryStream.html} |  103 +-
 .../TestGlobalReplicationThrottler.html            |    4 +-
 .../TestWALEntryStream.FailingWALEntryFilter.html  |   12 +-
 .../TestWALEntryStream.PathWatcher.html            |   12 +-
 ...stWALEntryStream.WALEntryStreamWithRetries.html |  443 ++++
 .../regionserver/TestWALEntryStream.html           |  149 +-
 ...ryStream.html => TestFSHLogWALEntryStream.html} |   20 +-
 ...tWALEntryStream.WALEntryStreamWithRetries.html} |   20 +-
 .../regionserver/class-use/TestWALEntryStream.html |   44 +-
 .../replication/regionserver/package-frame.html    |    2 +
 .../replication/regionserver/package-summary.html  |   96 +-
 .../replication/regionserver/package-tree.html     |    7 +-
 .../replication/regionserver/package-use.html      |    3 +
 .../org/apache/hadoop/hbase/test/package-tree.html |    4 +-
 .../org/apache/hadoop/hbase/wal/FaultyFSLog.html   |    4 +-
 .../hadoop/hbase/wal/IOTestProvider.IOTestWAL.html |    4 +-
 ...CorruptionDueToDanglingByteBuffer.PauseWAL.html |    4 +-
 ...CorruptionDueToDanglingByteBuffer.PauseWAL.html |    4 +-
 .../org/apache/hadoop/hbase/wal/package-tree.html  |    2 +-
 testdevapidocs/overview-tree.html                  |    7 +-
 .../regionserver/TestFSHLogWALEntryStream.html     |  123 +
 .../TestWALEntryStream.FailingWALEntryFilter.html  | 1656 ++++++------
 .../TestWALEntryStream.PathWatcher.html            | 1656 ++++++------
 ...stWALEntryStream.WALEntryStreamWithRetries.html |  991 ++++++++
 .../regionserver/TestWALEntryStream.html           | 1656 ++++++------
 124 files changed, 12877 insertions(+), 10894 deletions(-)

diff --git a/acid-semantics.html b/acid-semantics.html
index 30f9fc3..69da1ab 100644
--- a/acid-semantics.html
+++ b/acid-semantics.html
@@ -467,7 +467,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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 f506c29..cdff4c2 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.3, based on Prawn 2.2.2)
 /Producer (Apache HBase Team)
-/ModDate (D:20210531200521+00'00')
-/CreationDate (D:20210531201515+00'00')
+/ModDate (D:20210601165216+00'00')
+/CreationDate (D:20210601170208+00'00')
 >>
 endobj
 2 0 obj
diff --git a/book.html b/book.html
index 7a29ed3..8b335cc 100644
--- a/book.html
+++ b/book.html
@@ -46192,7 +46192,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 2021-05-31 20:05:21 UTC
+Last updated 2021-06-01 16:52:16 UTC
 </div>
 </div>
 <link rel="stylesheet" href="./coderay-asciidoctor.css">
diff --git a/bulk-loads.html b/bulk-loads.html
index 9bd8f77..7762d6e 100644
--- a/bulk-loads.html
+++ b/bulk-loads.html
@@ -172,7 +172,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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 36855ec..3e4b649 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -166,10 +166,10 @@
 <th><img src="images/icon_warning_sml.gif" alt="" />&#160;Warnings</th>
 <th><img src="images/icon_error_sml.gif" alt="" />&#160;Errors</th></tr>
 <tr class="b">
-<td>4422</td>
+<td>4423</td>
 <td>0</td>
 <td>0</td>
-<td>8882</td></tr></table></div>
+<td>8884</td></tr></table></div>
 <div class="section">
 <h2><a name="Files"></a>Files</h2>
 <table border="0" class="table table-striped">
@@ -5424,245 +5424,255 @@
 <td>0</td>
 <td>1</td></tr>
 <tr class="a">
+<td><a href="#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.Compressor.java">org/apache/hadoop/hbase/regionserver/wal/Compressor.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>8</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FSHLog.java">org/apache/hadoop/hbase/regionserver/wal/FSHLog.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.FailedSyncBeforeLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.InstrumentedLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/InstrumentedLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>19</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.ReaderBase.java">org/apache/hadoop/hbase/regionserver/wal/ReaderBase.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogReader.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogReader.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/SecureProtobufLogWriter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SecureWALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/SecureWALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.SequenceIdAccounting.java">org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>10</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestAsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncFSWAL.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestAsyncWALReplay.java">org/apache/hadoop/hbase/regionserver/wal/TestAsyncWALReplay.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestLogRolling.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestLogRollingNoCluster.java">org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>4</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.TestWALConfiguration.java">org/apache/hadoop/hbase/regionserver/wal/TestWALConfiguration.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.java">org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCellCodec.java">org/apache/hadoop/hbase/regionserver/wal/WALCellCodec.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>5</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALCoprocessorHost.java">org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.regionserver.wal.WALUtil.java">org/apache/hadoop/hbase/regionserver/wal/WALUtil.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.BaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/BaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.BulkLoadCellFilter.java">org/apache/hadoop/hbase/replication/BulkLoadCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ClusterMarkingEntryFilter.java">org/apache/hadoop/hbase/replication/ClusterMarkingEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.HBaseReplicationEndpoint.java">org/apache/hadoop/hbase/replication/HBaseReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationEndpoint.java">org/apache/hadoop/hbase/replication/ReplicationEndpoint.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationException.java">org/apache/hadoop/hbase/replication/ReplicationException.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationPeerConfig.java">org/apache/hadoop/hbase/replication/ReplicationPeerConfig.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.ReplicationSinkServiceImpl.java">org/apache/hadoop/hbase/replication/ReplicationSinkServiceImpl.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestMultiSlaveReplication.java">org/apache/hadoop/hbase/replication/TestMultiSlaveReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestPerTableCFReplication.java">org/apache/hadoop/hbase/replication/TestPerTableCFReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestReplicationDisableInactivePeer.java">org/apache/hadoop/hbase/replication/TestReplicationDisableInactivePeer.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestReplicationKillMasterRSCompressed.java">org/apache/hadoop/hbase/replication/TestReplicationKillMasterRSCompressed.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.TestReplicationStatusSink.java">org/apache/hadoop/hbase/replication/TestReplicationStatusSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.TestVerifyReplicationAdjunct.java">org/apache/hadoop/hbase/replication/TestVerifyReplicationAdjunct.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.WALCellFilter.java">org/apache/hadoop/hbase/replication/WALCellFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.WALEntryFilter.java">org/apache/hadoop/hbase/replication/WALEntryFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.master.ReplicationLogCleaner.java">org/apache/hadoop/hbase/replication/master/ReplicationLogCleaner.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.DumpReplicationQueues.java">org/apache/hadoop/hbase/replication/regionserver/DumpReplicationQueues.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>6</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.MetricsSink.java">org/apache/hadoop/hbase/replication/regionserver/MetricsSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationLoad.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationLoad.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationSourceShipper.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.ReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/ReplicationThrottler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>2</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestGlobalReplicationThrottler.java">org/apache/hadoop/hbase/replication/regionserver/TestGlobalReplicationThrottler.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestRefreshRecoveredReplication.java">org/apache/hadoop/hbase/replication/regionserver/TestRefreshRecoveredReplication.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>3</td></tr>
-<tr class="a">
+<tr class="b">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestReplicationSink.java">org/apache/hadoop/hbase/replication/regionserver/TestReplicationSink.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>11</td></tr>
-<tr class="b">
+<tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestWALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntrySinkFilter.java</a></td>
 <td>0</td>
 <td>0</td>
 <td>1</td></tr>
+<tr class="b">
+<td><a href="#org.apache.hadoop.hbase.replication.regionserver.TestWALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.java</a></td>
+<td>0</td>
+<td>0</td>
+<td>1</td></tr>
 <tr class="a">
 <td><a href="#org.apache.hadoop.hbase.replication.regionserver.WALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/WALEntrySinkFilter.java</a></td>
 <td>0</td>
@@ -7324,7 +7334,7 @@
 <tr class="b">
 <td></td>
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_coding.html#InnerAssignment">InnerAssignment</a></td>
-<td>60</td>
+<td>61</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>design</td>
@@ -7375,7 +7385,7 @@
 <td><a class="externalLink" href="http://checkstyle.sourceforge.net/config_imports.html#UnusedImports">UnusedImports</a>
 <ul>
 <li>processJavadoc: <tt>&quot;true&quot;</tt></li></ul></td>
-<td>70</td>
+<td>71</td>
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td></tr>
 <tr class="a">
 <td>indentation</td>
@@ -55223,7 +55233,7 @@
 <td>design</td>
 <td>VisibilityModifier</td>
 <td>Variable 'encodedName2HighestSequenceId' must be private and have accessor methods.</td>
-<td>291</td></tr></table></div>
+<td>295</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AbstractProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AbstractProtobufLogWriter.java</h3>
 <table border="0" class="table table-striped">
@@ -55330,6 +55340,21 @@
 <td>At-clause should have a non-empty description.</td>
 <td>187</td></tr></table></div>
 <div class="section">
+<h3 id="org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.java">org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java</h3>
+<table border="0" class="table table-striped">
+<tr class="b">
+<th>Severity</th>
+<th>Category</th>
+<th>Rule</th>
+<th>Message</th>
+<th>Line</th></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>imports</td>
+<td>UnusedImports</td>
+<td>Unused import - java.util.OptionalLong.</td>
+<td>34</td></tr></table></div>
+<div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.AsyncProtobufLogWriter.java">org/apache/hadoop/hbase/regionserver/wal/AsyncProtobufLogWriter.java</h3>
 <table border="0" class="table table-striped">
 <tr class="b">
@@ -55451,31 +55476,31 @@
 <td>coding</td>
 <td>InnerAssignment</td>
 <td>Inner assignments should be avoided.</td>
-<td>568</td></tr>
+<td>571</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 110).</td>
-<td>850</td></tr>
+<td>853</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 107).</td>
-<td>852</td></tr>
+<td>855</td></tr>
 <tr class="a">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 112).</td>
-<td>1035</td></tr>
+<td>1038</td></tr>
 <tr class="b">
 <td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
 <td>sizes</td>
 <td>LineLength</td>
 <td>Line is longer than 100 characters (found 102).</td>
-<td>1036</td></tr></table></div>
+<td>1039</td></tr></table></div>
 <div class="section">
 <h3 id="org.apache.hadoop.hbase.regionserver.wal.FailedLogCloseException.java">org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.java</h3>
 <table border="0" class="table table-striped">
@@ -56662,6 +56687,21 @@
 <td>At-clause should have a non-empty description.</td>
 <td>102</td></tr></table></div>
 <div class="section">
+<h3 id="org.apache.hadoop.hbase.replication.regionserver.TestWALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/TestWALEntryStream.java</h3>
+<table border="0" class="table table-striped">
+<tr class="b">
+<th>Severity</th>
+<th>Category</th>
+<th>Rule</th>
+<th>Message</th>
+<th>Line</th></tr>
+<tr class="a">
+<td><img src="images/icon_error_sml.gif" alt="" />&#160;Error</td>
+<td>coding</td>
+<td>InnerAssignment</td>
+<td>Inner assignments should be avoided.</td>
+<td>133</td></tr></table></div>
+<div class="section">
 <h3 id="org.apache.hadoop.hbase.replication.regionserver.WALEntrySinkFilter.java">org/apache/hadoop/hbase/replication/regionserver/WALEntrySinkFilter.java</h3>
 <table border="0" class="table table-striped">
 <tr class="b">
@@ -73529,7 +73569,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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.rss b/checkstyle.rss
index 6ea80f2..97f4ca5 100644
--- a/checkstyle.rss
+++ b/checkstyle.rss
@@ -25,8 +25,8 @@ under the License.
     <language>en-us</language>
     <copyright>&#169;2007 - 2021 The Apache Software Foundation</copyright>
     <item>
-      <title>File: 4422,
-             Errors: 8882,
+      <title>File: 4423,
+             Errors: 8884,
              Warnings: 0,
              Infos: 0
       </title>
@@ -9281,7 +9281,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
@@ -11022,6 +11022,20 @@ under the License.
               </tr>
                           <tr>
                 <td>
+                  <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.replication.regionserver.TestFSHLogWALEntryStream.java">org/apache/hadoop/hbase/replication/regionserver/TestFSHLogWALEntryStream.java</a>
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+                <td>
+                  0
+                </td>
+              </tr>
+                          <tr>
+                <td>
                   <a href="https://hbase.apache.org/checkstyle.html#org.apache.hadoop.hbase.client.AsyncAdminBuilderBase.java">org/apache/hadoop/hbase/client/AsyncAdminBuilderBase.java</a>
                 </td>
                 <td>
@@ -40263,7 +40277,7 @@ under the License.
                   0
                 </td>
                 <td>
-                  0
+                  1
                 </td>
               </tr>
                           <tr>
diff --git a/coc.html b/coc.html
index b7872ee..8fc5221 100644
--- a/coc.html
+++ b/coc.html
@@ -241,7 +241,7 @@ email to <a class="externalLink" href="mailto:private@hbase.apache.org">the priv
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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 ba3b7a2..bc5512f 100644
--- a/dependencies.html
+++ b/dependencies.html
@@ -313,7 +313,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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 909e493..277ee5d 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -824,7 +824,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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 7278565..9265081 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -194,7 +194,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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 ed56424..247197e 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -1201,7 +1201,7 @@
         <div class="row">
             <p>Copyright &copy;2007&#x2013;2021
 <a href="https://www.apache.org/">The Apache Software Foundation</a>.
-All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-05-31</li>
+All rights reserved.        <li id="publishDate" class="pull-right">Last Published: 2021-06-01</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/index-all.html b/devapidocs/index-all.html
index 9e8122b..13371f0 100644
--- a/devapidocs/index-all.html
+++ b/devapidocs/index-all.html
@@ -14360,7 +14360,7 @@
 <dd>
 <div class="block">Schedule closes on all user regions.</div>
 </dd>
-<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-">closeWriter(WALProvider.AsyncWriter)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AsyncFSWAL</a></dt>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-org.apache.hadoop.fs.Path-">closeWriter(WALProvider.AsyncWriter, Path)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AsyncFSWAL</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.Writer-org.apache.hadoop.fs.Path-boolean-">closeWriter(WALProvider.Writer, Path, boolean)</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></dt>
 <dd>&nbsp;</dd>
@@ -35470,7 +35470,7 @@
 <dd>&nbsp;</dd>
 <dt><a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">FSHLog</span></a> - Class in <a href="org/apache/hadoop/hbase/regionserver/wal/package-summary.html">org.apache.hadoop.hbase.regionserver.wal</a></dt>
 <dd>
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#FSHLog-org.apache.hadoop.fs.FileSystem-org.apache.hadoop.fs.Path-java.lang.String-org.apache.hadoop.conf.Configuration-">FSHLog(FileSystem, Path, String, Configuration)</a></span> - Constructor for class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></dt>
 <dd>
@@ -42996,6 +42996,8 @@
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/mapreduce/ImportTsv.TsvParser.ParsedLine.html#getIndividualAttributes--">getIndividualAttributes()</a></span> - Method in class org.apache.hadoop.hbase.mapreduce.<a href="org/apache/hadoop/hbase/mapreduce/ImportTsv.TsvParser.ParsedLine.html" title="class in org.apache.hadoop.hbase.mapreduce">ImportTsv.TsvParser.ParsedLine</a></dt>
 <dd>&nbsp;</dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getInflightWALCloseCount--">getInflightWALCloseCount()</a></span> - Method in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></dt>
+<dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/security/SecurityInfo.html#getInfo-java.lang.String-">getInfo(String)</a></span> - Static method in class org.apache.hadoop.hbase.security.<a href="org/apache/hadoop/hbase/security/SecurityInfo.html" title="class in org.apache.hadoop.hbase.security">SecurityInfo</a></dt>
 <dd>
 <div class="block">Returns the security configuration associated with the given service name.</div>
@@ -63977,6 +63979,10 @@
 <div class="block">Infer the mime type for the response based on the extension of the request
  URI.</div>
 </dd>
+<dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#inflightWALClosures">inflightWALClosures</a></span> - Variable in class org.apache.hadoop.hbase.regionserver.wal.<a href="org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></dt>
+<dd>
+<div class="block">Tracks the logs in the process of being closed.</div>
+</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/backup/impl/BackupException.html#info">info</a></span> - Variable in exception org.apache.hadoop.hbase.backup.impl.<a href="org/apache/hadoop/hbase/backup/impl/BackupException.html" title="class in org.apache.hadoop.hbase.backup.impl">BackupException</a></dt>
 <dd>&nbsp;</dd>
 <dt><span class="memberNameLink"><a href="org/apache/hadoop/hbase/metrics/impl/MetricRegistryImpl.html#info">info</a></span> - Variable in class org.apache.hadoop.hbase.metrics.impl.<a href="org/apache/hadoop/hbase/metrics/impl/MetricRegistryImpl.html" title="class in org.apache.hadoop.hbase.metrics.impl">MetricRegistryImpl</a></dt>
diff --git a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
index 6dd9b30..998b56b 100644
--- a/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/backup/package-tree.html
@@ -166,10 +166,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupRestoreConstants.BackupCommand.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupRestoreConstants.BackupCommand</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupType.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupState.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.backup.<a href="../../../../../org/apache/hadoop/hbase/backup/BackupInfo.BackupPhase.html" title="enum in org.apache.hadoop.hbase.backup"><span class="typeNameLink">BackupInfo.BackupPhase</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
index 6b78e35..3527119 100644
--- a/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/client/package-tree.html
@@ -455,25 +455,25 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.FilterByOperator.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.FilterByOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Consistency.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Consistency</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/ServerType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">ServerType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RequestController.ReturnCode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RequestController.ReturnCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CatalogReplicaMode.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CatalogReplicaMode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactionState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactionState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MasterSwitchType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MasterSwitchType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AbstractResponse.ResponseType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AbstractResponse.ResponseType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Scan.ReadType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Scan.ReadType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanControllerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/SnapshotType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">SnapshotType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">AsyncScanSingleRegionRpcRetryingCaller.ScanResumerState</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/Durability.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">Durability</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/MobCompactPartitionPolicy.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">MobCompactPartitionPolicy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/TableState.State.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">TableState.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/LogQueryFilter.Type.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">LogQueryFilter.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/IsolationLevel.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">IsolationLevel</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/RegionLocateType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">RegionLocateType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.client.<a href="../../../../../org/apache/hadoop/hbase/client/CompactType.html" title="enum in org.apache.hadoop.hbase.client"><span class="typeNameLink">CompactType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
index d5d2be0..e831a2a 100644
--- a/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/coprocessor/package-tree.html
@@ -176,8 +176,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/RegionObserver.MutationType.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">RegionObserver.MutationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.coprocessor.<a href="../../../../../org/apache/hadoop/hbase/coprocessor/MetaTableMetrics.MetaTableOps.html" title="enum in org.apache.hadoop.hbase.coprocessor"><span class="typeNameLink">MetaTableMetrics.MetaTableOps</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
index 7c6b2e2..af0e5b8 100644
--- a/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/filter/package-tree.html
@@ -190,13 +190,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/BitComparator.BitwiseOp.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">BitComparator.BitwiseOp</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.SatisfiesCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.SatisfiesCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FuzzyRowFilter.Order.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FuzzyRowFilter.Order</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/Filter.ReturnCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">Filter.ReturnCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterList.Operator.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterList.Operator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/FilterWrapper.FilterRowRetCode.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">FilterWrapper.FilterRowRetCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.filter.<a href="../../../../../org/apache/hadoop/hbase/filter/RegexStringComparator.EngineType.html" title="enum in org.apache.hadoop.hbase.filter"><span class="typeNameLink">RegexStringComparator.EngineType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
index a951142..33940b4 100644
--- a/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/hbtop/field/package-tree.html
@@ -92,8 +92,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/Field.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">Field</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.hbtop.field.<a href="../../../../../../org/apache/hadoop/hbase/hbtop/field/FieldValueType.html" title="enum in org.apache.hadoop.hbase.hbtop.field"><span class="typeNameLink">FieldValueType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
index 7cce376..657f27b 100644
--- a/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/http/package-tree.html
@@ -140,9 +140,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/HttpConfig.Policy.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">HttpConfig.Policy</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Event.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Event</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.http.<a href="../../../../../org/apache/hadoop/hbase/http/ProfileServlet.Output.html" title="enum in org.apache.hadoop.hbase.http"><span class="typeNameLink">ProfileServlet.Output</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
index 1348a6f..2d8cf8b 100644
--- a/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/io/hfile/package-tree.html
@@ -305,12 +305,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.Writer.State.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">HFileBlock.Writer.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockCacheFactory.ExternalBlockCaches.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockCacheFactory.ExternalBlockCaches</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/ReaderContext.ReaderType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">ReaderContext.ReaderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.BlockCategory.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType.BlockCategory</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockPriority.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockPriority</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.io.hfile.<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html" title="enum in org.apache.hadoop.hbase.io.hfile"><span class="typeNameLink">BlockType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
index 3139f55..e727f9a 100644
--- a/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/ipc/package-tree.html
@@ -356,8 +356,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/BufferCallBeforeInitHandler.BufferCallAction.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">BufferCallBeforeInitHandler.BufferCallAction</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/CallEvent.Type.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">CallEvent.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.ipc.<a href="../../../../../org/apache/hadoop/hbase/ipc/MetricsHBaseServerSourceFactoryImpl.SourceStorage.html" title="enum in org.apache.hadoop.hbase.ipc"><span class="typeNameLink">MetricsHBaseServerSourceFactoryImpl.SourceStorage</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
index 067f8ea..9006b55 100644
--- a/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/mapreduce/package-tree.html
@@ -300,11 +300,11 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/SyncTable.SyncMapper.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">SyncTable.SyncMapper.Counter</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/WALPlayer.Counter.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">WALPlayer.Counter</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/TableSplit.Version.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">TableSplit.Version</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/CellCounter.CellCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">CellCounter.CellCounterMapper.Counters</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.mapreduce.<a href="../../../../../org/apache/hadoop/hbase/mapreduce/RowCounter.RowCounterMapper.Counters.html" title="enum in org.apache.hadoop.hbase.mapreduce"><span class="typeNameLink">RowCounter.RowCounterMapper.Counters</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
index 26aa97d..a781782 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/balancer/package-tree.html
@@ -212,8 +212,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalancerClusterState.LocalityType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalanceAction.Type.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalanceAction.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.balancer.<a href="../../../../../../org/apache/hadoop/hbase/master/balancer/BalancerClusterState.LocalityType.html" title="enum in org.apache.hadoop.hbase.master.balancer"><span class="typeNameLink">BalancerClusterState.LocalityType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
index 0a26661..b8b68f9 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/package-tree.html
@@ -318,13 +318,13 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MasterRpcServices.BalanceSwitchMode.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MasterRpcServices.BalanceSwitchMode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.ResubmitDirective.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.ResubmitDirective</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/ServerManager.ServerLiveState.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">ServerManager.ServerLiveState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/SplitLogManager.TerminationStatus.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">SplitLogManager.TerminationStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/RegionState.State.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">RegionState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetaRegionLocationCache.ZNodeOpType.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetaRegionLocationCache.ZNodeOpType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.<a href="../../../../../org/apache/hadoop/hbase/master/MetricsMasterSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.master"><span class="typeNameLink">MetricsMasterSourceFactoryImpl.FactoryStorage</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
index 95dca0f..c98d78d 100644
--- a/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/master/procedure/package-tree.html
@@ -222,10 +222,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/PeerProcedureInterface.PeerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">PeerProcedureInterface.PeerOperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/ServerProcedureInterface.ServerOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">ServerProcedureInterface.ServerOperationType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/MetaProcedureInterface.MetaOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">MetaProcedureInterface.MetaOperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.master.procedure.<a href="../../../../../../org/apache/hadoop/hbase/master/procedure/TableProcedureInterface.TableOperationType.html" title="enum in org.apache.hadoop.hbase.master.procedure"><span class="typeNameLink">TableProcedureInterface.TableOperationType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
index c29587a..4b6a729 100644
--- a/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/monitoring/package-tree.html
@@ -126,8 +126,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/MonitoredTask.State.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">MonitoredTask.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.monitoring.<a href="../../../../../org/apache/hadoop/hbase/monitoring/TaskMonitor.TaskFilter.TaskType.html" title="enum in org.apache.hadoop.hbase.monitoring"><span class="typeNameLink">TaskMonitor.TaskFilter.TaskType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/package-tree.html b/devapidocs/org/apache/hadoop/hbase/package-tree.html
index 36b2d84..decebbe 100644
--- a/devapidocs/org/apache/hadoop/hbase/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/package-tree.html
@@ -424,19 +424,19 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClientMetaTableAccessor.QueryType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClientMetaTableAccessor.QueryType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeepDeletedCells.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeepDeletedCells</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/MemoryCompactionPolicy.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">MemoryCompactionPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CellBuilderType.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CellBuilderType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/ClusterMetrics.Option.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">ClusterMetrics.Option</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompatibilitySingletonFactory.SingletonStorage.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompatibilitySingletonFactory.SingletonStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/CompareOperator.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">CompareOperator</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HealthChecker.HealthCheckerExitStatus.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HealthChecker.HealthCheckerExitStatus</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Cell.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Cell.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/KeyValue.Type.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">KeyValue.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Size.Unit.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Size.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/Coprocessor.State.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">Coprocessor.State</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.<a href="../../../../org/apache/hadoop/hbase/HConstants.OperationStatusCode.html" title="enum in org.apache.hadoop.hbase"><span class="typeNameLink">HConstants.OperationStatusCode</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
index 529e365..160fa62 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/package-tree.html
@@ -216,8 +216,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/StateMachineProcedure.Flow.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">StateMachineProcedure.Flow</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/LockedResourceType.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">LockedResourceType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/RootProcedureState.State.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">RootProcedureState.State</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.<a href="../../../../../org/apache/hadoop/hbase/procedure2/Procedure.LockState.html" title="enum in org.apache.hadoop.hbase.procedure2"><span class="typeNameLink">Procedure.LockState</span></a></li>
diff --git a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
index b0ced2c..4ef4954 100644
--- a/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/procedure2/store/wal/package-tree.html
@@ -133,8 +133,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/ProcedureStoreTracker.DeleteState.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">ProcedureStoreTracker.DeleteState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.procedure2.store.wal.<a href="../../../../../../../org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.PushType.html" title="enum in org.apache.hadoop.hbase.procedure2.store.wal"><span class="typeNameLink">WALProcedureStore.PushType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
index 4fcbeaf..d9c25a8 100644
--- a/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/quotas/package-tree.html
@@ -240,12 +240,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaScope.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/RpcThrottlingException.Type.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">RpcThrottlingException.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/QuotaType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">QuotaType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/ThrottleType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">ThrottleType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/OperationQuota.OperationType.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">OperationQuota.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.quotas.<a href="../../../../../org/apache/hadoop/hbase/quotas/SpaceViolationPolicy.html" title="enum in org.apache.hadoop.hbase.quotas"><span class="typeNameLink">SpaceViolationPolicy</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
index 3458187..6448598 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/package-tree.html
@@ -725,20 +725,20 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.NextState.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.NextState</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/Region.Operation.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">Region.Operation</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MetricsRegionServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MetricsRegionServerSourceFactoryImpl.FactoryStorage</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/SplitLogWorker.TaskExecutor.Status.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">SplitLogWorker.TaskExecutor.Status</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/MemStoreCompactionStrategy.Action.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">MemStoreCompactionStrategy.Action</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/CompactingMemStore.IndexType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">CompactingMemStore.IndexType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/TimeRangeTracker.Type.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">TimeRangeTracker.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScanType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScanType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/FlushType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">FlushType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/BloomType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">BloomType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/DefaultHeapMemoryTuner.StepDirection.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">DefaultHeapMemoryTuner.StepDirection</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ScannerContext.LimitScope.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ScannerContext.LimitScope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/ChunkCreator.ChunkType.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">ChunkCreator.ChunkType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.<a href="../../../../../org/apache/hadoop/hbase/regionserver/HRegion.FlushResult.Result.html" title="enum in org.apache.hadoop.hbase.regionserver"><span class="typeNameLink">HRegion.FlushResult.Result</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
index cf03ba1..0790b6c 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/querymatcher/package-tree.html
@@ -130,9 +130,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/DeleteTracker.DeleteResult.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">DeleteTracker.DeleteResult</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/ScanQueryMatcher.MatchCode.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">ScanQueryMatcher.MatchCode</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.querymatcher.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/querymatcher/StripeCompactionScanQueryMatcher.DropDeletesInOutput.html" title="enum in org.apache.hadoop.hbase.regionserver.querymatcher"><span class="typeNameLink">StripeCompactionScanQueryMatcher.DropDeletesInOutput</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html
index 39879ca..0a4e510 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html
@@ -107,7 +107,7 @@
 </dl>
 <hr>
 <br>
-<pre>private static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.285">AbstractFSWAL.WalProps</a>
+<pre>private static final class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.289">AbstractFSWAL.WalProps</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>
@@ -199,7 +199,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>encodedName2HighestSequenceId</h4>
-<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.291">encodedName2HighestSequenceId</a></pre>
+<pre>public final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;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; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.295">encodedName2HighestSequenceId</a></pre>
 <div class="block">Map the encoded region name to the highest sequence id.
  <p/>Contains all the regions it has an entry for.</div>
 </li>
@@ -210,7 +210,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>logSize</h4>
-<pre>public final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.297">logSize</a></pre>
+<pre>public final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.301">logSize</a></pre>
 <div class="block">The log file size. Notice that the size may not be accurate if we do asynchronous close in
  sub classes.</div>
 </li>
@@ -221,7 +221,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>rollTimeNs</h4>
-<pre>public final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.302">rollTimeNs</a></pre>
+<pre>public final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.306">rollTimeNs</a></pre>
 <div class="block">The nanoTime of the log rolling, used to determine the time interval that has passed since.</div>
 </li>
 </ul>
@@ -239,7 +239,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>WalProps</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.304">WalProps</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;encodedName2HighestSequenceId,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html#line.308">WalProps</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;encodedName2HighestSequenceId,
                 long&nbsp;logSize)</pre>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
index 9d47746..c7b7261 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
@@ -18,7 +18,7 @@
     catch(err) {
     }
 //-->
-var methods = {"i0":10,"i1":6,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":6,"i18":6,"i19":6,"i20":10,"i21":6,"i22":6,"i23":6,"i24":6,"i25":9,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":6,"i37":10,"i38":10,"i39":10,"i40":10,"i41":6,"i42":10,"i43":10,"i44":10,"i45":9,"i46":10,"i47":10,"i48":10,"i49":10,"i50":9,"i51":10,"i52":10,"i53":10,"i54":10,"i55" [...]
+var methods = {"i0":10,"i1":6,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":6,"i18":6,"i19":6,"i20":10,"i21":6,"i22":6,"i23":6,"i24":6,"i25":9,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":6,"i38":10,"i39":10,"i40":10,"i41":10,"i42":6,"i43":10,"i44":10,"i45":10,"i46":9,"i47":10,"i48":10,"i49":10,"i50":10,"i51":9,"i52":10,"i53":10,"i54":10,"i55" [...]
 var tabs = {65535:["t0","All Methods"],1:["t1","Static Methods"],2:["t2","Instance Methods"],4:["t3","Abstract Methods"],8:["t4","Concrete Methods"]};
 var altColor = "altColor";
 var rowColor = "rowColor";
@@ -118,7 +118,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.Private
-public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.119">AbstractFSWAL</a>&lt;W extends <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.WriterBase.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.WriterBase</a>&gt;
+public abstract class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.120">AbstractFSWAL</a>&lt;W extends <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.WriterBase.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.WriterBase</a>&gt;
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
 implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></pre>
 <div class="block">Implementation of <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal"><code>WAL</code></a> to go against <code>FileSystem</code>; i.e. keep WALs in HDFS. Only one
@@ -272,200 +272,206 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 </td>
 </tr>
 <tr class="rowColor">
+<td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&gt;</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#inflightWALClosures">inflightWALClosures</a></span></code>
+<div class="block">Tracks the logs in the process of being closed.</div>
+</td>
+</tr>
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#lastTimeCheckLowReplication">lastTimeCheckLowReplication</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#lastTimeCheckSlowSync">lastTimeCheckSlowSync</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/List.html?is-external=true" title="class or interface in java.util">List</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#listeners">listeners</a></span></code>
 <div class="block">Listeners that are called on WAL events.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static org.slf4j.Logger</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#LOG">LOG</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>(package private) <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.Path&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#LOG_NAME_COMPARATOR">LOG_NAME_COMPARATOR</a></span></code>
 <div class="block">WAL Comparator; it compares the timestamp (log filenum), present in the log file name.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#logArchiveExecutor">logArchiveExecutor</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#logrollsize">logrollsize</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#MAX_LOGS">MAX_LOGS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#maxLogs">maxLogs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#nextLogTooOldNs">nextLogTooOldNs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#numEntries">numEntries</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.PathFilter</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#ourFiles">ourFiles</a></span></code>
 <div class="block">Matches just those wal files that belong to this wal instance.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#prefixPathStr">prefixPathStr</a></span></code>
 <div class="block">Prefix used when checking for wal membership.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#RING_BUFFER_SLOT_COUNT">RING_BUFFER_SLOT_COUNT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#ROLL_ON_SYNC_TIME_MS">ROLL_ON_SYNC_TIME_MS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#rollOnSyncNs">rollOnSyncNs</a></span></code>
 <div class="block">The slow sync will be logged; the very slow sync will cause the WAL to be rolled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <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></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#rollRequested">rollRequested</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#rollWriterLock">rollWriterLock</a></span></code>
 <div class="block">This lock makes sure only one log roll runs at a time.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SequenceIdAccounting</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#sequenceIdAccounting">sequenceIdAccounting</a></span></code>
 <div class="block">Class that does accounting of sequenceids in WAL subsystem.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <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></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#shutdown">shutdown</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#SLOW_SYNC_ROLL_INTERVAL_MS">SLOW_SYNC_ROLL_INTERVAL_MS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#SLOW_SYNC_ROLL_THRESHOLD">SLOW_SYNC_ROLL_THRESHOLD</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#SLOW_SYNC_TIME_MS">SLOW_SYNC_TIME_MS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#slowSyncCheckInterval">slowSyncCheckInterval</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicInteger.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicInteger</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#slowSyncCount">slowSyncCount</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#slowSyncNs">slowSyncNs</a></span></code>
 <div class="block">The slow sync will be logged; the very slow sync will cause the WAL to be rolled.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#slowSyncRollThreshold">slowSyncRollThreshold</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#SURVIVED_TOO_LONG_LOG_INTERVAL_NS">SURVIVED_TOO_LONG_LOG_INTERVAL_NS</a></span></code>
 <div class="block">Don't log blocking regions more frequently than this.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private static int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#SURVIVED_TOO_LONG_SEC_DEFAULT">SURVIVED_TOO_LONG_SEC_DEFAULT</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#SURVIVED_TOO_LONG_SEC_KEY">SURVIVED_TOO_LONG_SEC_KEY</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#totalLogSize">totalLogSize</a></span></code>
 <div class="block">The total size of wal</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#useHsync">useHsync</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#WAL_ROLL_MULTIPLIER">WAL_ROLL_MULTIPLIER</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#WAL_SYNC_TIMEOUT_MS">WAL_SYNC_TIMEOUT_MS</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walArchiveDir">walArchiveDir</a></span></code>
 <div class="block">dir path where old logs are kept.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walDir">walDir</a></span></code>
 <div class="block">WAL directory, where all WAL files would be placed.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL.WalProps</a>&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walFile2Props">walFile2Props</a></span></code>
 <div class="block">Map of WAL log file to properties.</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walFilePrefix">walFilePrefix</a></span></code>
 <div class="block">Prefix of a WAL file, usually the region server name it is hosted on.</div>
 </td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walFileSuffix">walFileSuffix</a></span></code>
 <div class="block">Suffix included on generated wal file names</div>
 </td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walSyncTimeoutNs">walSyncTimeoutNs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="rowColor">
+<tr class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#walTooOldNs">walTooOldNs</a></span></code>&nbsp;</td>
 </tr>
-<tr class="altColor">
+<tr class="rowColor">
 <td class="colFirst"><code>(package private) <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#writer">writer</a></span></code>
 <div class="block">Current log file.</div>
@@ -714,107 +720,111 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 </td>
 </tr>
 <tr id="i34" class="altColor">
+<td class="colFirst"><code>int</code></td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getInflightWALCloseCount--">getInflightWALCloseCount</a></span>()</code>&nbsp;</td>
+</tr>
+<tr id="i35" class="rowColor">
 <td class="colFirst"><code>long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getLogFileSize--">getLogFileSize</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i35" class="rowColor">
+<tr id="i36" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getLogFileSizeIfBeingWritten-org.apache.hadoop.fs.Path-">getLogFileSizeIfBeingWritten</a></span>(org.apache.hadoop.fs.Path&nbsp;path)</code>
 <div class="block">if the given <code>path</code> is being written currently, then return its length.</div>
 </td>
 </tr>
-<tr id="i36" class="altColor">
+<tr id="i37" class="rowColor">
 <td class="colFirst"><code>(package private) abstract int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getLogReplication--">getLogReplication</a></span>()</code>
 <div class="block">This method gets the datanode replication count for the current WAL.</div>
 </td>
 </tr>
-<tr id="i37" class="rowColor">
+<tr id="i38" class="altColor">
 <td class="colFirst"><code>private org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getNewPath--">getNewPath</a></span>()</code>
 <div class="block">retrieve the next path to use for writing.</div>
 </td>
 </tr>
-<tr id="i38" class="altColor">
+<tr id="i39" class="rowColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getNumLogFiles--">getNumLogFiles</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i39" class="rowColor">
+<tr id="i40" class="altColor">
 <td class="colFirst"><code>int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getNumRolledLogFiles--">getNumRolledLogFiles</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i40" class="altColor">
+<tr id="i41" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getOldPath--">getOldPath</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i41" class="rowColor">
+<tr id="i42" class="altColor">
 <td class="colFirst"><code>(package private) abstract org.apache.hadoop.hdfs.protocol.DatanodeInfo[]</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getPipeline--">getPipeline</a></span>()</code>
 <div class="block">This method gets the pipeline for the current WAL.</div>
 </td>
 </tr>
-<tr id="i42" class="altColor">
+<tr id="i43" class="rowColor">
 <td class="colFirst"><code>protected int</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getPreallocatedEventCount--">getPreallocatedEventCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i43" class="rowColor">
+<tr id="i44" class="altColor">
 <td class="colFirst"><code>protected <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getSyncFuture-long-boolean-">getSyncFuture</a></span>(long&nbsp;sequence,
              boolean&nbsp;forceSync)</code>&nbsp;</td>
 </tr>
-<tr id="i44" class="altColor">
+<tr id="i45" class="rowColor">
 <td class="colFirst"><code>(package private) long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getUnflushedEntriesCount--">getUnflushedEntriesCount</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i45" class="rowColor">
+<tr id="i46" class="altColor">
 <td class="colFirst"><code>static org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getWALArchivePath-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">getWALArchivePath</a></span>(org.apache.hadoop.fs.Path&nbsp;archiveDir,
                  org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr id="i46" class="altColor">
+<tr id="i47" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#init--">init</a></span>()</code>
 <div class="block">Used to initialize the WAL.</div>
 </td>
 </tr>
-<tr id="i47" class="rowColor">
+<tr id="i48" class="altColor">
 <td class="colFirst"><code>protected boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#isLogRollRequested--">isLogRollRequested</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i48" class="altColor">
+<tr id="i49" class="rowColor">
 <td class="colFirst"><code>(package private) boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#isUnflushedEntries--">isUnflushedEntries</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i49" class="rowColor">
+<tr id="i50" class="altColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#logRollAndSetupWalProps-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-long-">logRollAndSetupWalProps</a></span>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                        org.apache.hadoop.fs.Path&nbsp;newPath,
                        long&nbsp;oldFileLen)</code>&nbsp;</td>
 </tr>
-<tr id="i50" class="altColor">
+<tr id="i51" class="rowColor">
 <td class="colFirst"><code>static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#main-java.lang.String:A-">main</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>[]&nbsp;args)</code>
 <div class="block">Pass one or more log file names and it will either dump out a text version on
  <code>stdout</code> or split the specified log files.</div>
 </td>
 </tr>
-<tr id="i51" class="rowColor">
+<tr id="i52" class="altColor">
 <td class="colFirst"><code>private long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#postAppend-org.apache.hadoop.hbase.wal.WAL.Entry-long-">postAppend</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;e,
           long&nbsp;elapsedTime)</code>&nbsp;</td>
 </tr>
-<tr id="i52" class="altColor">
+<tr id="i53" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#postSync-long-int-">postSync</a></span>(long&nbsp;timeInNanos,
         int&nbsp;handlerSyncs)</code>&nbsp;</td>
 </tr>
-<tr id="i53" class="rowColor">
+<tr id="i54" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#registerWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">registerWALActionsListener</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</code>
 <div class="block">Registers WALActionsListener</div>
 </td>
 </tr>
-<tr id="i54" class="altColor">
+<tr id="i55" class="rowColor">
 <td class="colFirst"><code>(package private) org.apache.hadoop.fs.Path</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#replaceWriter-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-W-">replaceWriter</a></span>(org.apache.hadoop.fs.Path&nbsp;oldPath,
              org.apache.hadoop.fs.Path&nbsp;newPath,
@@ -822,42 +832,42 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <div class="block">Cleans up current writer closing it and then puts in place the passed in <code>nextWriter</code>.</div>
 </td>
 </tr>
-<tr id="i55" class="rowColor">
+<tr id="i56" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#requestLogRoll--">requestLogRoll</a></span>()</code>&nbsp;</td>
 </tr>
-<tr id="i56" class="altColor">
+<tr id="i57" class="rowColor">
 <td class="colFirst"><code>protected void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#requestLogRoll-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason-">requestLogRoll</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener.RollRequestReason</a>&nbsp;reason)</code>& [...]
 </tr>
-<tr id="i57" class="rowColor">
+<tr id="i58" class="altColor">
 <td class="colFirst"><code><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;byte[]&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#rollWriter--">rollWriter</a></span>()</code>
 <div class="block">Roll the log writer.</div>
 </td>
 </tr>
-<tr id="i58" class="altColor">
+<tr id="i59" class="rowColor">
 <td class="colFirst"><code><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;byte[]&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#rollWriter-boolean-">rollWriter</a></span>(boolean&nbsp;force)</code>
 <div class="block">Roll the log writer.</div>
 </td>
 </tr>
-<tr id="i59" class="rowColor">
+<tr id="i60" class="altColor">
 <td class="colFirst"><code>private <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;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;byte[]&gt;&gt;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#rollWriterInternal-boolean-">rollWriterInternal</a></span>(boolean&nbsp;force)</code>&nbsp;</td>
 </tr>
-<tr id="i60" class="altColor">
+<tr id="i61" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#shutdown--">shutdown</a></span>()</code>
 <div class="block">Stop accepting new writes.</div>
 </td>
 </tr>
-<tr id="i61" class="rowColor">
+<tr id="i62" class="altColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#split-org.apache.hadoop.conf.Configuration-org.apache.hadoop.fs.Path-">split</a></span>(org.apache.hadoop.conf.Configuration&nbsp;conf,
      org.apache.hadoop.fs.Path&nbsp;p)</code>&nbsp;</td>
 </tr>
-<tr id="i62" class="altColor">
+<tr id="i63" class="rowColor">
 <td class="colFirst"><code>protected long</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#stampSequenceIdAndPublishToRingBuffer-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-boolean-com.lmax.disruptor.RingBuffer-">stampSequenceIdAndPublishToRingBuffer</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache. [...]
                                      <a href="../../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
@@ -865,12 +875,12 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
                                      boolean&nbsp;inMemstore,
                                      com.lmax.disruptor.RingBuffer&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>&gt;&nbsp;ringBuffer)</code>&nbsp;</td>
 </tr>
-<tr id="i63" class="rowColor">
+<tr id="i64" class="altColor">
 <td class="colFirst"><code><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></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#startCacheFlush-byte:A-java.util.Map-">startCacheFlush</a></span>(byte[]&nbsp;encodedRegionName,
                <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;familyToSeq)</code>&nbsp;</td>
 </tr>
-<tr id="i64" class="altColor">
+<tr id="i65" class="rowColor">
 <td class="colFirst"><code><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></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#startCacheFlush-byte:A-java.util.Set-">startCacheFlush</a></span>(byte[]&nbsp;encodedRegionName,
                <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;families)</code>
@@ -878,54 +888,54 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
  in order to be able to do accounting to figure which WALs can be let go.</div>
 </td>
 </tr>
-<tr id="i65" class="rowColor">
+<tr id="i66" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#sync--">sync</a></span>()</code>
 <div class="block">Sync what we have in the WAL.</div>
 </td>
 </tr>
-<tr id="i66" class="altColor">
+<tr id="i67" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#sync-boolean-">sync</a></span>(boolean&nbsp;forceSync)</code>&nbsp;</td>
 </tr>
-<tr id="i67" class="rowColor">
+<tr id="i68" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#sync-long-">sync</a></span>(long&nbsp;txid)</code>
 <div class="block">Sync the WAL if the txId was not already sync'd.</div>
 </td>
 </tr>
-<tr id="i68" class="altColor">
+<tr id="i69" class="rowColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#sync-long-boolean-">sync</a></span>(long&nbsp;txid,
     boolean&nbsp;forceSync)</code>&nbsp;</td>
 </tr>
-<tr id="i69" class="rowColor">
+<tr id="i70" class="altColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#tellListenersAboutPostLogRoll-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">tellListenersAboutPostLogRoll</a></span>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                              org.apache.hadoop.fs.Path&nbsp;newPath)</code>
 <div class="block">Tell listeners about post log roll.</div>
 </td>
 </tr>
-<tr id="i70" class="altColor">
+<tr id="i71" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#tellListenersAboutPreLogRoll-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">tellListenersAboutPreLogRoll</a></span>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                             org.apache.hadoop.fs.Path&nbsp;newPath)</code>
 <div class="block">Tell listeners about pre log roll.</div>
 </td>
 </tr>
-<tr id="i71" class="rowColor">
+<tr id="i72" class="altColor">
 <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#toString--">toString</a></span>()</code>
 <div class="block">Human readable identifying information about the state of this WAL.</div>
 </td>
 </tr>
-<tr id="i72" class="altColor">
+<tr id="i73" class="rowColor">
 <td class="colFirst"><code>boolean</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#unregisterWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">unregisterWALActionsListener</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</code>
 <div class="block">Unregisters WALActionsListener</div>
 </td>
 </tr>
-<tr id="i73" class="rowColor">
+<tr id="i74" class="altColor">
 <td class="colFirst"><code>void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#updateStore-byte:A-byte:A-java.lang.Long-boolean-">updateStore</a></span>(byte[]&nbsp;encodedRegionName,
            byte[]&nbsp;familyName,
@@ -934,7 +944,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <div class="block">updates the sequence number of a specific store.</div>
 </td>
 </tr>
-<tr id="i74" class="altColor">
+<tr id="i75" class="rowColor">
 <td class="colFirst"><code>private static void</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#usage--">usage</a></span>()</code>&nbsp;</td>
 </tr>
@@ -966,7 +976,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.120">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.121">LOG</a></pre>
 </li>
 </ul>
 <a name="SURVIVED_TOO_LONG_SEC_KEY">
@@ -975,7 +985,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SURVIVED_TOO_LONG_SEC_KEY</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.122">SURVIVED_TOO_LONG_SEC_KEY</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.123">SURVIVED_TOO_LONG_SEC_KEY</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.SURVIVED_TOO_LONG_SEC_KEY">Constant Field Values</a></dd>
@@ -988,7 +998,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SURVIVED_TOO_LONG_SEC_DEFAULT</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.123">SURVIVED_TOO_LONG_SEC_DEFAULT</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.124">SURVIVED_TOO_LONG_SEC_DEFAULT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.SURVIVED_TOO_LONG_SEC_DEFAULT">Constant Field Values</a></dd>
@@ -1001,7 +1011,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SURVIVED_TOO_LONG_LOG_INTERVAL_NS</h4>
-<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.125">SURVIVED_TOO_LONG_LOG_INTERVAL_NS</a></pre>
+<pre>private static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.126">SURVIVED_TOO_LONG_LOG_INTERVAL_NS</a></pre>
 <div class="block">Don't log blocking regions more frequently than this.</div>
 </li>
 </ul>
@@ -1011,7 +1021,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_SYNC_TIME_MS</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.127">SLOW_SYNC_TIME_MS</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.128">SLOW_SYNC_TIME_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.SLOW_SYNC_TIME_MS">Constant Field Values</a></dd>
@@ -1024,7 +1034,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_SYNC_TIME_MS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.128">DEFAULT_SLOW_SYNC_TIME_MS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.129">DEFAULT_SLOW_SYNC_TIME_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.DEFAULT_SLOW_SYNC_TIME_MS">Constant Field Values</a></dd>
@@ -1037,7 +1047,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>ROLL_ON_SYNC_TIME_MS</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.129">ROLL_ON_SYNC_TIME_MS</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.130">ROLL_ON_SYNC_TIME_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.ROLL_ON_SYNC_TIME_MS">Constant Field Values</a></dd>
@@ -1050,7 +1060,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ROLL_ON_SYNC_TIME_MS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.130">DEFAULT_ROLL_ON_SYNC_TIME_MS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.131">DEFAULT_ROLL_ON_SYNC_TIME_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.DEFAULT_ROLL_ON_SYNC_TIME_MS">Constant Field Values</a></dd>
@@ -1063,7 +1073,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_SYNC_ROLL_THRESHOLD</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.131">SLOW_SYNC_ROLL_THRESHOLD</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.132">SLOW_SYNC_ROLL_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.SLOW_SYNC_ROLL_THRESHOLD">Constant Field Values</a></dd>
@@ -1076,7 +1086,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_SYNC_ROLL_THRESHOLD</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.133">DEFAULT_SLOW_SYNC_ROLL_THRESHOLD</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.134">DEFAULT_SLOW_SYNC_ROLL_THRESHOLD</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.DEFAULT_SLOW_SYNC_ROLL_THRESHOLD">Constant Field Values</a></dd>
@@ -1089,7 +1099,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>SLOW_SYNC_ROLL_INTERVAL_MS</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.134">SLOW_SYNC_ROLL_INTERVAL_MS</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.135">SLOW_SYNC_ROLL_INTERVAL_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.SLOW_SYNC_ROLL_INTERVAL_MS">Constant Field Values</a></dd>
@@ -1102,7 +1112,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.136">DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.137">DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS">Constant Field Values</a></dd>
@@ -1115,7 +1125,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_SYNC_TIMEOUT_MS</h4>
-<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.138">WAL_SYNC_TIMEOUT_MS</a></pre>
+<pre>protected static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.139">WAL_SYNC_TIMEOUT_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.WAL_SYNC_TIMEOUT_MS">Constant Field Values</a></dd>
@@ -1128,7 +1138,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAL_SYNC_TIMEOUT_MS</h4>
-<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.139">DEFAULT_WAL_SYNC_TIMEOUT_MS</a></pre>
+<pre>protected static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.140">DEFAULT_WAL_SYNC_TIMEOUT_MS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.DEFAULT_WAL_SYNC_TIMEOUT_MS">Constant Field Values</a></dd>
@@ -1141,7 +1151,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_ROLL_MULTIPLIER</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.141">WAL_ROLL_MULTIPLIER</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.142">WAL_ROLL_MULTIPLIER</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.WAL_ROLL_MULTIPLIER">Constant Field Values</a></dd>
@@ -1154,7 +1164,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_LOGS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.143">MAX_LOGS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.144">MAX_LOGS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.MAX_LOGS">Constant Field Values</a></dd>
@@ -1167,7 +1177,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>RING_BUFFER_SLOT_COUNT</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.145">RING_BUFFER_SLOT_COUNT</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.146">RING_BUFFER_SLOT_COUNT</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL.RING_BUFFER_SLOT_COUNT">Constant Field Values</a></dd>
@@ -1180,7 +1190,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>fs</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.151">fs</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.FileSystem <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.152">fs</a></pre>
 <div class="block">file system instance</div>
 </li>
 </ul>
@@ -1190,7 +1200,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walDir</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.156">walDir</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.157">walDir</a></pre>
 <div class="block">WAL directory, where all WAL files would be placed.</div>
 </li>
 </ul>
@@ -1200,7 +1210,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walArchiveDir</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.161">walArchiveDir</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.Path <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.162">walArchiveDir</a></pre>
 <div class="block">dir path where old logs are kept.</div>
 </li>
 </ul>
@@ -1210,7 +1220,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>ourFiles</h4>
-<pre>protected final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.166">ourFiles</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.fs.PathFilter <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.167">ourFiles</a></pre>
 <div class="block">Matches just those wal files that belong to this wal instance.</div>
 </li>
 </ul>
@@ -1220,7 +1230,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walFilePrefix</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.171">walFilePrefix</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.172">walFilePrefix</a></pre>
 <div class="block">Prefix of a WAL file, usually the region server name it is hosted on.</div>
 </li>
 </ul>
@@ -1230,7 +1240,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walFileSuffix</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.176">walFileSuffix</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.177">walFileSuffix</a></pre>
 <div class="block">Suffix included on generated wal file names</div>
 </li>
 </ul>
@@ -1240,7 +1250,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>prefixPathStr</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.181">prefixPathStr</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.182">prefixPathStr</a></pre>
 <div class="block">Prefix used when checking for wal membership.</div>
 </li>
 </ul>
@@ -1250,7 +1260,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>coprocessorHost</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.183">coprocessorHost</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.184">coprocessorHost</a></pre>
 </li>
 </ul>
 <a name="conf">
@@ -1259,7 +1269,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>conf</h4>
-<pre>protected final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.188">conf</a></pre>
+<pre>protected final&nbsp;org.apache.hadoop.conf.Configuration <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.189">conf</a></pre>
 <div class="block">conf object</div>
 </li>
 </ul>
@@ -1269,7 +1279,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>abortable</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.190">abortable</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.191">abortable</a></pre>
 </li>
 </ul>
 <a name="listeners">
@@ -1278,17 +1288,27 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>listeners</h4>
-<pre>protected 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/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.193">listeners</a></pre>
+<pre>protected 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/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.194">listeners</a></pre>
 <div class="block">Listeners that are called on WAL events.</div>
 </li>
 </ul>
+<a name="inflightWALClosures">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>inflightWALClosures</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;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a> extends <a href="../../../../../../org/apache/hadoo [...]
+<div class="block">Tracks the logs in the process of being closed.</div>
+</li>
+</ul>
 <a name="sequenceIdAccounting">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>sequenceIdAccounting</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SequenceIdAccounting</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.200">sequenceIdAccounting</a></pre>
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SequenceIdAccounting</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.204">sequenceIdAccounting</a></pre>
 <div class="block">Class that does accounting of sequenceids in WAL subsystem. Holds oldest outstanding sequence
  id as yet not flushed as well as the most recent edit sequence id appended to the WAL. Has
  facility for answering questions such as "Is it safe to GC a WAL?".</div>
@@ -1300,7 +1320,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>slowSyncNs</h4>
-<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.203">slowSyncNs</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.207">slowSyncNs</a></pre>
 <div class="block">The slow sync will be logged; the very slow sync will cause the WAL to be rolled.</div>
 </li>
 </ul>
@@ -1310,7 +1330,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>rollOnSyncNs</h4>
-<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.203">rollOnSyncNs</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.207">rollOnSyncNs</a></pre>
 <div class="block">The slow sync will be logged; the very slow sync will cause the WAL to be rolled.</div>
 </li>
 </ul>
@@ -1320,7 +1340,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>slowSyncRollThreshold</h4>
-<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.204">slowSyncRollThreshold</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.208">slowSyncRollThreshold</a></pre>
 </li>
 </ul>
 <a name="slowSyncCheckInterval">
@@ -1329,7 +1349,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>slowSyncCheckInterval</h4>
-<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.205">slowSyncCheckInterval</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.209">slowSyncCheckInterval</a></pre>
 </li>
 </ul>
 <a name="slowSyncCount">
@@ -1338,7 +1358,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>slowSyncCount</h4>
-<pre>protected 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/wal/AbstractFSWAL.html#line.206">slowSyncCount</a></pre>
+<pre>protected 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/wal/AbstractFSWAL.html#line.210">slowSyncCount</a></pre>
 </li>
 </ul>
 <a name="walSyncTimeoutNs">
@@ -1347,7 +1367,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walSyncTimeoutNs</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.208">walSyncTimeoutNs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.212">walSyncTimeoutNs</a></pre>
 </li>
 </ul>
 <a name="walTooOldNs">
@@ -1356,7 +1376,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walTooOldNs</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.210">walTooOldNs</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.214">walTooOldNs</a></pre>
 </li>
 </ul>
 <a name="logrollsize">
@@ -1365,7 +1385,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>logrollsize</h4>
-<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.213">logrollsize</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.217">logrollsize</a></pre>
 </li>
 </ul>
 <a name="blocksize">
@@ -1374,7 +1394,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>blocksize</h4>
-<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.218">blocksize</a></pre>
+<pre>protected final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.222">blocksize</a></pre>
 <div class="block">Block size to use writing files.</div>
 </li>
 </ul>
@@ -1384,7 +1404,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>maxLogs</h4>
-<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.224">maxLogs</a></pre>
+<pre>protected final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.228">maxLogs</a></pre>
 </li>
 </ul>
 <a name="useHsync">
@@ -1393,7 +1413,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>useHsync</h4>
-<pre>protected final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.226">useHsync</a></pre>
+<pre>protected final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.230">useHsync</a></pre>
 </li>
 </ul>
 <a name="rollWriterLock">
@@ -1402,7 +1422,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterLock</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.235">rollWriterLock</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/ReentrantLock.html?is-external=true" title="class or interface in java.util.concurrent.locks">ReentrantLock</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.239">rollWriterLock</a></pre>
 <div class="block">This lock makes sure only one log roll runs at a time. Should not be taken while any other lock
  is held. We don't just use synchronized because that results in bogus and tedious findbugs
  warning when it thinks synchronized controls writer thread safety. It is held when we are
@@ -1416,7 +1436,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>filenum</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.238">filenum</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.242">filenum</a></pre>
 </li>
 </ul>
 <a name="numEntries">
@@ -1425,7 +1445,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>numEntries</h4>
-<pre>protected 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/wal/AbstractFSWAL.html#line.241">numEntries</a></pre>
+<pre>protected 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/wal/AbstractFSWAL.html#line.245">numEntries</a></pre>
 </li>
 </ul>
 <a name="highestUnsyncedTxid">
@@ -1434,7 +1454,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>highestUnsyncedTxid</h4>
-<pre>protected volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.248">highestUnsyncedTxid</a></pre>
+<pre>protected volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.252">highestUnsyncedTxid</a></pre>
 <div class="block">The highest known outstanding unsync'd WALEdit transaction id. Usually, we use a queue to pass
  WALEdit to background consumer thread, and the transaction id is the sequence number of the
  corresponding entry in queue.</div>
@@ -1446,7 +1466,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>highestSyncedTxid</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.255">highestSyncedTxid</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.259">highestSyncedTxid</a></pre>
 <div class="block">Updated to the transaction id of the last successful sync call. This can be less than
  <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#highestUnsyncedTxid"><code>highestUnsyncedTxid</code></a> for case where we have an append where a sync has not yet come in
  for it.</div>
@@ -1458,7 +1478,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>totalLogSize</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.260">totalLogSize</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/AtomicLong.html?is-external=true" title="class or interface in java.util.concurrent.atomic">AtomicLong</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.264">totalLogSize</a></pre>
 <div class="block">The total size of wal</div>
 </li>
 </ul>
@@ -1468,7 +1488,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>writer</h4>
-<pre>volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a> extends <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.WriterBase.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.WriterBase</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.264">writer</a></pre>
+<pre>volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a> extends <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.WriterBase.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.WriterBase</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.268">writer</a></pre>
 <div class="block">Current log file.</div>
 </li>
 </ul>
@@ -1478,7 +1498,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>lastTimeCheckLowReplication</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.267">lastTimeCheckLowReplication</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.271">lastTimeCheckLowReplication</a></pre>
 </li>
 </ul>
 <a name="lastTimeCheckSlowSync">
@@ -1487,7 +1507,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>lastTimeCheckSlowSync</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.270">lastTimeCheckSlowSync</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.274">lastTimeCheckSlowSync</a></pre>
 </li>
 </ul>
 <a name="closed">
@@ -1496,7 +1516,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>closed</h4>
-<pre>protected volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.272">closed</a></pre>
+<pre>protected volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.276">closed</a></pre>
 </li>
 </ul>
 <a name="shutdown">
@@ -1505,7 +1525,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>protected 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/wal/AbstractFSWAL.html#line.274">shutdown</a></pre>
+<pre>protected 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/wal/AbstractFSWAL.html#line.278">shutdown</a></pre>
 </li>
 </ul>
 <a name="nextLogTooOldNs">
@@ -1514,7 +1534,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>nextLogTooOldNs</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.276">nextLogTooOldNs</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.280">nextLogTooOldNs</a></pre>
 </li>
 </ul>
 <a name="LOG_NAME_COMPARATOR">
@@ -1523,7 +1543,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG_NAME_COMPARATOR</h4>
-<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.Path&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.282">LOG_NAME_COMPARATOR</a></pre>
+<pre>final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;org.apache.hadoop.fs.Path&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.286">LOG_NAME_COMPARATOR</a></pre>
 <div class="block">WAL Comparator; it compares the timestamp (log filenum), present in the log file name. Throws
  an IllegalArgumentException if used to compare paths from different wals.</div>
 </li>
@@ -1534,7 +1554,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>walFile2Props</h4>
-<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL.WalProps</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/r [...]
+<pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentNavigableMap.html?is-external=true" title="class or interface in java.util.concurrent">ConcurrentNavigableMap</a>&lt;org.apache.hadoop.fs.Path,<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL.WalProps</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/r [...]
 <div class="block">Map of WAL log file to properties. The map is sorted by the log file creation timestamp
  (contained in the log file name).</div>
 </li>
@@ -1545,7 +1565,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>cachedSyncFutures</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.323">cachedSyncFutures</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/ThreadLocal.html?is-external=true" title="class or interface in java.lang">ThreadLocal</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.327">cachedSyncFutures</a></pre>
 <div class="block">Map of <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal"><code>SyncFuture</code></a>s owned by Thread objects. Used so we reuse SyncFutures.
  Thread local is used so JVM can GC the terminated thread for us. See HBASE-21228
  <p></div>
@@ -1557,7 +1577,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>implClassName</h4>
-<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.332">implClassName</a></pre>
+<pre>protected final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.336">implClassName</a></pre>
 <div class="block">The class name of the runtime implementation, used as prefix for logging/tracing.
  <p>
  Performance testing shows getClass().getSimpleName() might be a bottleneck so we store it here,
@@ -1571,7 +1591,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>rollRequested</h4>
-<pre>protected 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/wal/AbstractFSWAL.html#line.334">rollRequested</a></pre>
+<pre>protected 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/wal/AbstractFSWAL.html#line.338">rollRequested</a></pre>
 </li>
 </ul>
 <a name="logArchiveExecutor">
@@ -1580,7 +1600,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>logArchiveExecutor</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.336">logArchiveExecutor</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.340">logArchiveExecutor</a></pre>
 </li>
 </ul>
 <a name="archiveRetries">
@@ -1589,7 +1609,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>archiveRetries</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.339">archiveRetries</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.343">archiveRetries</a></pre>
 </li>
 </ul>
 </li>
@@ -1606,7 +1626,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>AbstractFSWAL</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.388">AbstractFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.392">AbstractFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         org.apache.hadoop.fs.Path&nbsp;rootDir,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;archiveDir,
@@ -1630,7 +1650,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AbstractFSWAL</h4>
-<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.395">AbstractFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>protected&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.399">AbstractFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                         <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>&nbsp;abortable,
                         org.apache.hadoop.fs.Path&nbsp;rootDir,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir,
@@ -1663,7 +1683,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFilenum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.341">getFilenum</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.345">getFilenum</a>()</pre>
 </li>
 </ul>
 <a name="getFileNumFromFileName-org.apache.hadoop.fs.Path-">
@@ -1672,7 +1692,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFileNumFromFileName</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.351">getFileNumFromFileName</a>(org.apache.hadoop.fs.Path&nbsp;fileName)</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.355">getFileNumFromFileName</a>(org.apache.hadoop.fs.Path&nbsp;fileName)</pre>
 <div class="block">A log file has a creation timestamp (in ms) in its file name (<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#filenum"><code>filenum</code></a>. This helper
  method returns the creation timestamp from a given log file. It extracts the timestamp assuming
  the filename is created with the <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#computeFilename-long-"><code>computeFilename(long filenum)</code></a> method.</div>
@@ -1688,7 +1708,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>calculateMaxLogFiles</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.363">calculateMaxLogFiles</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.367">calculateMaxLogFiles</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                                  long&nbsp;logRollSize)</pre>
 </li>
 </ul>
@@ -1698,7 +1718,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getPreallocatedEventCount</h4>
-<pre>protected final&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.369">getPreallocatedEventCount</a>()</pre>
+<pre>protected final&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.373">getPreallocatedEventCount</a>()</pre>
 </li>
 </ul>
 <a name="init--">
@@ -1707,7 +1727,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>init</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.510">init</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.514">init</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">Used to initialize the WAL. Usually just call rollWriter to create the first log writer.</div>
 <dl>
@@ -1722,7 +1742,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>registerWALActionsListener</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.515">registerWALActionsListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.519">registerWALActionsListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#registerWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">WAL</a></code></span></div>
 <div class="block">Registers WALActionsListener</div>
 <dl>
@@ -1737,7 +1757,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>unregisterWALActionsListener</h4>
-<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.520">unregisterWALActionsListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
+<pre>public&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.524">unregisterWALActionsListener</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.html" title="interface in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener</a>&nbsp;listener)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#unregisterWALActionsListener-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener-">WAL</a></code></span></div>
 <div class="block">Unregisters WALActionsListener</div>
 <dl>
@@ -1752,7 +1772,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getCoprocessorHost</h4>
-<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.525">getCoprocessorHost</a>()</pre>
+<pre>public&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALCoprocessorHost.html" title="class in org.apache.hadoop.hbase.regionserver.wal">WALCoprocessorHost</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.529">getCoprocessorHost</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getCoprocessorHost--">getCoprocessorHost</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" title="interface in org.apache.hadoop.hbase.wal">WAL</a></code></dd>
@@ -1767,7 +1787,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>startCacheFlush</h4>
-<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.530">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.534">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
                             <a href="https://docs.oracle.com/javase/8/docs/api/java/util/Set.html?is-external=true" title="class or interface in java.util">Set</a>&lt;byte[]&gt;&nbsp;families)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#startCacheFlush-byte:A-java.util.Set-">WAL</a></code></span></div>
 <div class="block">WAL keeps track of the sequence numbers that are as yet not flushed im memstores
@@ -1799,7 +1819,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>startCacheFlush</h4>
-<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.535">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;<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>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.539">startCacheFlush</a>(byte[]&nbsp;encodedRegionName,
                             <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;familyToSeq)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1813,7 +1833,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>completeCacheFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.540">completeCacheFlush</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.544">completeCacheFlush</a>(byte[]&nbsp;encodedRegionName,
                                long&nbsp;maxFlushedSeqId)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#completeCacheFlush-byte:A-long-">WAL</a></code></span></div>
 <div class="block">Complete the cache flush.</div>
@@ -1836,7 +1856,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>abortCacheFlush</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.545">abortCacheFlush</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.549">abortCacheFlush</a>(byte[]&nbsp;encodedRegionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#abortCacheFlush-byte:A-">WAL</a></code></span></div>
 <div class="block">Abort a cache flush. Call if the flush fails. Note that the only recovery
  for an aborted flush currently is a restart of the regionserver so the
@@ -1855,7 +1875,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getEarliestMemStoreSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.550">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName)</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.554">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getEarliestMemStoreSeqNum-byte:A-">WAL</a></code></span></div>
 <div class="block">Gets the earliest unflushed sequence id in the memstore for the region.</div>
 <dl>
@@ -1874,7 +1894,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getEarliestMemStoreSeqNum</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.556">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.560">getEarliestMemStoreSeqNum</a>(byte[]&nbsp;encodedRegionName,
                                       byte[]&nbsp;familyName)</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#getEarliestMemStoreSeqNum-byte:A-byte:A-">WAL</a></code></span></div>
 <div class="block">Gets the earliest unflushed sequence id in the memstore for the store.</div>
@@ -1895,7 +1915,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.569">rollWriter</a>()
+<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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.573">rollWriter</a>()
                                     throws <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FailedLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedLogCloseException</a>,
                                            <a href="https://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/wal/WAL.html#rollWriter--">WAL</a></code></span></div>
@@ -1923,7 +1943,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.574">sync</a>()
+<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.578">sync</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/wal/WAL.html#sync--">WAL</a></code></span></div>
 <div class="block">Sync what we have in the WAL.</div>
@@ -1941,7 +1961,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.579">sync</a>(long&nbsp;txid)
+<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.583">sync</a>(long&nbsp;txid)
                 throws <a href="https://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/wal/WAL.html#sync-long-">WAL</a></code></span></div>
 <div class="block">Sync the WAL if the txId was not already sync'd.</div>
@@ -1961,7 +1981,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.584">sync</a>(boolean&nbsp;forceSync)
+<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.588">sync</a>(boolean&nbsp;forceSync)
                 throws <a href="https://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>
@@ -1980,7 +2000,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.592">sync</a>(long&nbsp;txid,
+<pre>public final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.596">sync</a>(long&nbsp;txid,
                        boolean&nbsp;forceSync)
                 throws <a href="https://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>
@@ -2001,7 +2021,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doSync</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.599">doSync</a>(boolean&nbsp;forceSync)
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.603">doSync</a>(boolean&nbsp;forceSync)
                         throws <a href="https://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>
@@ -2015,7 +2035,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doSync</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.601">doSync</a>(long&nbsp;txid,
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.605">doSync</a>(long&nbsp;txid,
                                boolean&nbsp;forceSync)
                         throws <a href="https://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>
@@ -2030,7 +2050,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>computeFilename</h4>
-<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.607">computeFilename</a>(long&nbsp;filenum)</pre>
+<pre>protected&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.611">computeFilename</a>(long&nbsp;filenum)</pre>
 <div class="block">This is a convenience method that computes a new filename with a given file-number.</div>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
@@ -2046,7 +2066,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getCurrentFileName</h4>
-<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.620">getCurrentFileName</a>()</pre>
+<pre>public&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.624">getCurrentFileName</a>()</pre>
 <div class="block">This is a convenience method that computes a new filename with a given using the current WAL
  file-number</div>
 <dl>
@@ -2061,7 +2081,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getNewPath</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.627">getNewPath</a>()
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.631">getNewPath</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">retrieve the next path to use for writing. Increments the internal filenum.</div>
 <dl>
@@ -2076,7 +2096,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getOldPath</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.637">getOldPath</a>()</pre>
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.641">getOldPath</a>()</pre>
 </li>
 </ul>
 <a name="tellListenersAboutPreLogRoll-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">
@@ -2085,7 +2105,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>tellListenersAboutPreLogRoll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.650">tellListenersAboutPreLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.654">tellListenersAboutPreLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                                           org.apache.hadoop.fs.Path&nbsp;newPath)
                                    throws <a href="https://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">Tell listeners about pre log roll.</div>
@@ -2101,7 +2121,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>tellListenersAboutPostLogRoll</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.664">tellListenersAboutPostLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.668">tellListenersAboutPostLogRoll</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                                            org.apache.hadoop.fs.Path&nbsp;newPath)
                                     throws <a href="https://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">Tell listeners about post log roll.</div>
@@ -2117,7 +2137,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumRolledLogFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.677">getNumRolledLogFiles</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.681">getNumRolledLogFiles</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of rolled log files</dd>
@@ -2130,7 +2150,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getNumLogFiles</h4>
-<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.683">getNumLogFiles</a>()</pre>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.687">getNumLogFiles</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the number of log files in use</dd>
@@ -2143,7 +2163,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>findRegionsToForceFlush</h4>
-<pre><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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.694">findRegionsToForceFlush</a>()
+<pre><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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.698">findRegionsToForceFlush</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">If the number of un-archived WAL files ('live' WALs) is greater than maximum allowed,
  check the first (oldest) WAL, and return those regions which should be flushed so that
@@ -2162,7 +2182,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanOldLogs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.724">cleanOldLogs</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.728">cleanOldLogs</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">Archive old logs. A WAL is eligible for archiving if all its WALEdits have been flushed.</div>
 <dl>
@@ -2177,7 +2197,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>archive</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.779">archive</a>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,<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;log)</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.783">archive</a>(<a href="../../../../../../org/apache/hadoop/hbase/util/Pair.html" title="class in org.apache.hadoop.hbase.util">Pair</a>&lt;org.apache.hadoop.fs.Path,<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;log)</pre>
 </li>
 </ul>
 <a name="getWALArchivePath-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-">
@@ -2186,7 +2206,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getWALArchivePath</h4>
-<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.807">getWALArchivePath</a>(org.apache.hadoop.fs.Path&nbsp;archiveDir,
+<pre>public static&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.811">getWALArchivePath</a>(org.apache.hadoop.fs.Path&nbsp;archiveDir,
                                                           org.apache.hadoop.fs.Path&nbsp;p)</pre>
 </li>
 </ul>
@@ -2196,7 +2216,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>archiveLogFile</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.811">archiveLogFile</a>(org.apache.hadoop.fs.Path&nbsp;p)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.815">archiveLogFile</a>(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>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -2210,7 +2230,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>logRollAndSetupWalProps</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.831">logRollAndSetupWalProps</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.835">logRollAndSetupWalProps</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                                              org.apache.hadoop.fs.Path&nbsp;newPath,
                                              long&nbsp;oldFileLen)</pre>
 </li>
@@ -2221,7 +2241,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>createSpan</h4>
-<pre>private&nbsp;io.opentelemetry.api.trace.Span&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.846">createSpan</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
+<pre>private&nbsp;io.opentelemetry.api.trace.Span&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.850">createSpan</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
 </li>
 </ul>
 <a name="replaceWriter-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider.WriterBase-">
@@ -2232,7 +2252,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>replaceWriter</h4>
-<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.866">replaceWriter</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
+<pre>org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.870">replaceWriter</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                                         org.apache.hadoop.fs.Path&nbsp;newPath,
                                         <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;nextWriter)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2263,7 +2283,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>blockOnSync</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.873">blockOnSync</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture)
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.877">blockOnSync</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture)
                           throws <a href="https://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>
@@ -2277,7 +2297,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>ensureIOException</h4>
-<pre>private static&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/wal/AbstractFSWAL.html#line.897">ensureIOException</a>(<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>
+<pre>private static&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/wal/AbstractFSWAL.html#line.901">ensureIOException</a>(<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>
 <a name="convertInterruptedExceptionToIOException-java.lang.InterruptedException-">
@@ -2286,7 +2306,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>convertInterruptedExceptionToIOException</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/wal/AbstractFSWAL.html#line.901">convertInterruptedExceptionToIOException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>& [...]
+<pre>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/wal/AbstractFSWAL.html#line.905">convertInterruptedExceptionToIOException</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>& [...]
 </li>
 </ul>
 <a name="rollWriterInternal-boolean-">
@@ -2295,7 +2315,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriterInternal</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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.908">rollWriterInternal</a>(boolean&nbsp;force)
+<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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.912">rollWriterInternal</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>
@@ -2309,7 +2329,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>rollWriter</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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.954">rollWriter</a>(boolean&nbsp;force)
+<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;byte[]&gt;&gt;&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.958">rollWriter</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"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#rollWriter-boolean-">WAL</a></code></span></div>
 <div class="block">Roll the log writer. That is, start writing log messages to a new file.
@@ -2338,7 +2358,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFileSize</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.960">getLogFileSize</a>()</pre>
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.964">getLogFileSize</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>the size of log files in use</dd>
@@ -2351,7 +2371,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>requestLogRoll</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.965">requestLogRoll</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.969">requestLogRoll</a>()</pre>
 </li>
 </ul>
 <a name="getFiles--">
@@ -2360,7 +2380,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getFiles</h4>
-<pre>org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.973">getFiles</a>()
+<pre>org.apache.hadoop.fs.FileStatus[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.977">getFiles</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">Get the backing files associated with this WAL.</div>
 <dl>
@@ -2377,7 +2397,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.978">shutdown</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.982">shutdown</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/wal/WAL.html#shutdown--">WAL</a></code></span></div>
 <div class="block">Stop accepting new writes. If we have unsynced writes still in buffer, sync them.
@@ -2396,7 +2416,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>close</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1001">close</a>()
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1005">close</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/wal/WAL.html#close--">WAL</a></code></span></div>
 <div class="block">Caller no longer needs any edits from this WAL. Implementers are free to reclaim
@@ -2414,13 +2434,26 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 </dl>
 </li>
 </ul>
+<a name="getInflightWALCloseCount--">
+<!--   -->
+</a>
+<ul class="blockList">
+<li class="blockList">
+<h4>getInflightWALCloseCount</h4>
+<pre>public&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1037">getInflightWALCloseCount</a>()</pre>
+<dl>
+<dt><span class="returnLabel">Returns:</span></dt>
+<dd>number of WALs currently in the process of closing.</dd>
+</dl>
+</li>
+</ul>
 <a name="updateStore-byte:A-byte:A-java.lang.Long-boolean-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>updateStore</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1035">updateStore</a>(byte[]&nbsp;encodedRegionName,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1046">updateStore</a>(byte[]&nbsp;encodedRegionName,
                         byte[]&nbsp;familyName,
                         <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>&nbsp;sequenceid,
                         boolean&nbsp;onlyIfGreater)</pre>
@@ -2438,7 +2471,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getSyncFuture</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1040">getSyncFuture</a>(long&nbsp;sequence,
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1051">getSyncFuture</a>(long&nbsp;sequence,
                                          boolean&nbsp;forceSync)</pre>
 </li>
 </ul>
@@ -2448,7 +2481,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>isLogRollRequested</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1044">isLogRollRequested</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1055">isLogRollRequested</a>()</pre>
 </li>
 </ul>
 <a name="requestLogRoll-org.apache.hadoop.hbase.regionserver.wal.WALActionsListener.RollRequestReason-">
@@ -2457,7 +2490,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>requestLogRoll</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1048">requestLogRoll</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener.RollRequestReason</a>&nbsp;reason)</pre>
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1059">requestLogRoll</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal">WALActionsListener.RollRequestReason</a>&nbsp;reason)</pre>
 </li>
 </ul>
 <a name="getUnflushedEntriesCount--">
@@ -2466,7 +2499,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getUnflushedEntriesCount</h4>
-<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1058">getUnflushedEntriesCount</a>()</pre>
+<pre>long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1069">getUnflushedEntriesCount</a>()</pre>
 </li>
 </ul>
 <a name="isUnflushedEntries--">
@@ -2475,7 +2508,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>isUnflushedEntries</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1064">isUnflushedEntries</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1075">isUnflushedEntries</a>()</pre>
 </li>
 </ul>
 <a name="atHeadOfRingBufferEventHandlerAppend--">
@@ -2484,7 +2517,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>atHeadOfRingBufferEventHandlerAppend</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1071">atHeadOfRingBufferEventHandlerAppend</a>()</pre>
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1082">atHeadOfRingBufferEventHandlerAppend</a>()</pre>
 <div class="block">Exposed for testing only. Use to tricks like halt the ring buffer appending.</div>
 </li>
 </ul>
@@ -2496,7 +2529,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>appendEntry</h4>
-<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1075">appendEntry</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;writer,
+<pre>protected final&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1086">appendEntry</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;writer,
                                     <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&nbsp;entry)
                              throws <a href="https://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>
@@ -2511,7 +2544,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>postAppend</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1113">postAppend</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;e,
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1124">postAppend</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.Entry.html" title="class in org.apache.hadoop.hbase.wal">WAL.Entry</a>&nbsp;e,
                         long&nbsp;elapsedTime)
                  throws <a href="https://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>
@@ -2526,7 +2559,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>postSync</h4>
-<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1126">postSync</a>(long&nbsp;timeInNanos,
+<pre>protected final&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1137">postSync</a>(long&nbsp;timeInNanos,
                               int&nbsp;handlerSyncs)</pre>
 </li>
 </ul>
@@ -2536,7 +2569,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>stampSequenceIdAndPublishToRingBuffer</h4>
-<pre>protected final&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1153">stampSequenceIdAndPublishToRingBuffer</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>protected final&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1164">stampSequenceIdAndPublishToRingBuffer</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                                                            <a href="../../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                                                            <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edits,
                                                            boolean&nbsp;inMemstore,
@@ -2554,7 +2587,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <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/wal/AbstractFSWAL.html#line.1177">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/wal/AbstractFSWAL.html#line.1188">toString</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html#toString--">WAL</a></code></span></div>
 <div class="block">Human readable identifying information about the state of this WAL.
  Implementors are encouraged to include information appropriate for debugging.
@@ -2574,7 +2607,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogFileSizeIfBeingWritten</h4>
-<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1188">getLogFileSizeIfBeingWritten</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
+<pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/OptionalLong.html?is-external=true" title="class or interface in java.util">OptionalLong</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1199">getLogFileSizeIfBeingWritten</a>(org.apache.hadoop.fs.Path&nbsp;path)</pre>
 <div class="block">if the given <code>path</code> is being written currently, then return its length.
  <p>
  This is used by replication to prevent replicating unacked log entries. See
@@ -2591,7 +2624,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>appendData</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1204">appendData</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1224">appendData</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/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                        <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&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>
@@ -2626,7 +2659,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>appendMarker</h4>
-<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1210">appendMarker</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>public&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1230">appendMarker</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/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                          <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&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>
@@ -2664,7 +2697,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>protected abstract&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1245">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;info,
+<pre>protected abstract&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1265">append</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/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                                <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edits,
                                boolean&nbsp;inMemstore)
@@ -2713,7 +2746,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doAppend</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1248">doAppend</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;writer,
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1268">doAppend</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;writer,
                                  <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&nbsp;entry)
                           throws <a href="https://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>
@@ -2728,7 +2761,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>createWriterInstance</h4>
-<pre>protected abstract&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1250">createWriterInstance</a>(org.apache.hadoop.fs.Path&nbsp;path)
+<pre>protected abstract&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1270">createWriterInstance</a>(org.apache.hadoop.fs.Path&nbsp;path)
                                    throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a>,
                                           <a href="../../../../../../org/apache/hadoop/hbase/util/CommonFSUtils.StreamLacksCapabilityException.html" title="class in org.apache.hadoop.hbase.util">CommonFSUtils.StreamLacksCapabilityException</a></pre>
 <dl>
@@ -2746,7 +2779,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doReplaceWriter</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1260">doReplaceWriter</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1280">doReplaceWriter</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                                         org.apache.hadoop.fs.Path&nbsp;newPath,
                                         <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="type parameter in AbstractFSWAL">W</a>&nbsp;nextWriter)
                                  throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -2767,7 +2800,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doShutdown</h4>
-<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1263">doShutdown</a>()
+<pre>protected abstract&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1283">doShutdown</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>
@@ -2781,7 +2814,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doCheckLogLowReplication</h4>
-<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1265">doCheckLogLowReplication</a>()</pre>
+<pre>protected abstract&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1285">doCheckLogLowReplication</a>()</pre>
 </li>
 </ul>
 <a name="doCheckSlowSync--">
@@ -2790,7 +2823,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>doCheckSlowSync</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1271">doCheckSlowSync</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1291">doCheckSlowSync</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>true if we exceeded the slow sync roll threshold over the last check
@@ -2804,7 +2837,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>checkLogLowReplication</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1302">checkLogLowReplication</a>(long&nbsp;checkInterval)</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1322">checkLogLowReplication</a>(long&nbsp;checkInterval)</pre>
 </li>
 </ul>
 <a name="getPipeline--">
@@ -2813,7 +2846,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getPipeline</h4>
-<pre>abstract&nbsp;org.apache.hadoop.hdfs.protocol.DatanodeInfo[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1324">getPipeline</a>()</pre>
+<pre>abstract&nbsp;org.apache.hadoop.hdfs.protocol.DatanodeInfo[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1344">getPipeline</a>()</pre>
 <div class="block">This method gets the pipeline for the current WAL.</div>
 </li>
 </ul>
@@ -2823,7 +2856,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogReplication</h4>
-<pre>abstract&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1329">getLogReplication</a>()</pre>
+<pre>abstract&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1349">getLogReplication</a>()</pre>
 <div class="block">This method gets the datanode replication count for the current WAL.</div>
 </li>
 </ul>
@@ -2833,7 +2866,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>split</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1331">split</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1351">split</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                           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>
@@ -2848,7 +2881,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockList">
 <li class="blockList">
 <h4>usage</h4>
-<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1349">usage</a>()</pre>
+<pre>private static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1369">usage</a>()</pre>
 </li>
 </ul>
 <a name="main-java.lang.String:A-">
@@ -2857,7 +2890,7 @@ implements <a href="../../../../../../org/apache/hadoop/hbase/wal/WAL.html" titl
 <ul class="blockListLast">
 <li class="blockList">
 <h4>main</h4>
-<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1364">main</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;args)
+<pre>public static&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#line.1384">main</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;args)
                  throws <a href="https://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">Pass one or more log file names and it will either dump out a text version on
  <code>stdout</code> or split the specified log files.</div>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html
index 08043f8..29612c9 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html
@@ -123,7 +123,7 @@ var activeTableTab = "activeTableTab";
 <hr>
 <br>
 <pre>@InterfaceAudience.LimitedPrivate(value="Configuration")
-public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.129">AsyncFSWAL</a>
+public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.130">AsyncFSWAL</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&gt;</pre>
 <div class="block">An asynchronous implementation of FSWAL.
  <p>
@@ -343,7 +343,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortable">abortable</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#blocksize">blocksize</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#closed">closed</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortable">abortable</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#blocksize">blocksize</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#closed">closed</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase [...]
 </ul>
 </li>
 </ul>
@@ -415,7 +415,8 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 </tr>
 <tr id="i2" class="altColor">
 <td class="colFirst"><code>protected long</code></td>
-<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-">closeWriter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer)</code>&nbsp;</td>
+<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-org.apache.hadoop.fs.Path-">closeWriter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
+           org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
 <tr id="i3" class="rowColor">
 <td class="colFirst"><code>private void</code></td>
@@ -539,7 +540,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortCacheFlush-byte:A-">abortCacheFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendData-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">appendData</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendEntry-W-org.apache.hadoop.h [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortCacheFlush-byte:A-">abortCacheFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendData-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">appendData</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendEntry-W-org.apache.hadoop.h [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -568,7 +569,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>LOG</h4>
-<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.131">LOG</a></pre>
+<pre>private static final&nbsp;org.slf4j.Logger <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.132">LOG</a></pre>
 </li>
 </ul>
 <a name="SEQ_COMPARATOR">
@@ -577,7 +578,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>SEQ_COMPARATOR</h4>
-<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.133">SEQ_COMPARATOR</a></pre>
+<pre>private static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Comparator.html?is-external=true" title="class or interface in java.util">Comparator</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.134">SEQ_COMPARATOR</a></pre>
 </li>
 </ul>
 <a name="WAL_BATCH_SIZE">
@@ -586,7 +587,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>WAL_BATCH_SIZE</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.138">WAL_BATCH_SIZE</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.139">WAL_BATCH_SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.WAL_BATCH_SIZE">Constant Field Values</a></dd>
@@ -599,7 +600,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_WAL_BATCH_SIZE</h4>
-<pre>public static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.139">DEFAULT_WAL_BATCH_SIZE</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.140">DEFAULT_WAL_BATCH_SIZE</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.DEFAULT_WAL_BATCH_SIZE">Constant Field Values</a></dd>
@@ -612,7 +613,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>ASYNC_WAL_USE_SHARED_EVENT_LOOP</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.141">ASYNC_WAL_USE_SHARED_EVENT_LOOP</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.142">ASYNC_WAL_USE_SHARED_EVENT_LOOP</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.ASYNC_WAL_USE_SHARED_EVENT_LOOP">Constant Field Values</a></dd>
@@ -625,7 +626,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ASYNC_WAL_USE_SHARED_EVENT_LOOP</h4>
-<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.143">DEFAULT_ASYNC_WAL_USE_SHARED_EVENT_LOOP</a></pre>
+<pre>public static final&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.144">DEFAULT_ASYNC_WAL_USE_SHARED_EVENT_LOOP</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.DEFAULT_ASYNC_WAL_USE_SHARED_EVENT_LOOP">Constant Field Values</a></dd>
@@ -638,7 +639,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS</h4>
-<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.145">ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS</a></pre>
+<pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.146">ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS">Constant Field Values</a></dd>
@@ -651,7 +652,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>DEFAULT_ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS</h4>
-<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.147">DEFAULT_ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS</a></pre>
+<pre>public static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.148">DEFAULT_ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.DEFAULT_ASYNC_WAL_WAIT_ON_SHUTDOWN_IN_SECONDS">Constant Field Values</a></dd>
@@ -664,7 +665,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>eventLoopGroup</h4>
-<pre>private final&nbsp;org.apache.hbase.thirdparty.io.netty.channel.EventLoopGroup <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.149">eventLoopGroup</a></pre>
+<pre>private final&nbsp;org.apache.hbase.thirdparty.io.netty.channel.EventLoopGroup <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.150">eventLoopGroup</a></pre>
 </li>
 </ul>
 <a name="consumeExecutor">
@@ -673,7 +674,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>consumeExecutor</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.151">consumeExecutor</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.152">consumeExecutor</a></pre>
 </li>
 </ul>
 <a name="channelClass">
@@ -682,7 +683,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>channelClass</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.apache.hbase.thirdparty.io.netty.channel.Channel&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.153">channelClass</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Class.html?is-external=true" title="class or interface in java.lang">Class</a>&lt;? extends org.apache.hbase.thirdparty.io.netty.channel.Channel&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.154">channelClass</a></pre>
 </li>
 </ul>
 <a name="consumeLock">
@@ -691,7 +692,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>consumeLock</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/wal/AsyncFSWAL.html#line.155">consumeLock</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/wal/AsyncFSWAL.html#line.156">consumeLock</a></pre>
 </li>
 </ul>
 <a name="consumer">
@@ -700,7 +701,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>consumer</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.157">consumer</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.158">consumer</a></pre>
 </li>
 </ul>
 <a name="hasConsumerTask">
@@ -709,7 +710,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>hasConsumerTask</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.160">hasConsumerTask</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html?is-external=true" title="class or interface in java.util.function">Supplier</a>&lt;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Boolean.html?is-external=true" title="class or interface in java.lang">Boolean</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.161">hasConsumerTask</a></pre>
 </li>
 </ul>
 <a name="MAX_EPOCH">
@@ -718,7 +719,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>MAX_EPOCH</h4>
-<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.162">MAX_EPOCH</a></pre>
+<pre>private static final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.163">MAX_EPOCH</a></pre>
 <dl>
 <dt><span class="seeLabel">See Also:</span></dt>
 <dd><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.regionserver.wal.AsyncFSWAL.MAX_EPOCH">Constant Field Values</a></dd>
@@ -731,7 +732,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>epochAndState</h4>
-<pre>private volatile&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.170">epochAndState</a></pre>
+<pre>private volatile&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.171">epochAndState</a></pre>
 </li>
 </ul>
 <a name="readyForRolling">
@@ -740,7 +741,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>readyForRolling</h4>
-<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.172">readyForRolling</a></pre>
+<pre>private&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.173">readyForRolling</a></pre>
 </li>
 </ul>
 <a name="readyForRollingCond">
@@ -749,7 +750,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>readyForRollingCond</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.174">readyForRollingCond</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html?is-external=true" title="class or interface in java.util.concurrent.locks">Condition</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.175">readyForRollingCond</a></pre>
 </li>
 </ul>
 <a name="waitingConsumePayloads">
@@ -758,7 +759,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>waitingConsumePayloads</h4>
-<pre>private final&nbsp;com.lmax.disruptor.RingBuffer&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.176">waitingConsumePayloads</a></pre>
+<pre>private final&nbsp;com.lmax.disruptor.RingBuffer&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.177">waitingConsumePayloads</a></pre>
 </li>
 </ul>
 <a name="waitingConsumePayloadsGatingSequence">
@@ -767,7 +768,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>waitingConsumePayloadsGatingSequence</h4>
-<pre>private final&nbsp;com.lmax.disruptor.Sequence <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.178">waitingConsumePayloadsGatingSequence</a></pre>
+<pre>private final&nbsp;com.lmax.disruptor.Sequence <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.179">waitingConsumePayloadsGatingSequence</a></pre>
 </li>
 </ul>
 <a name="consumerScheduled">
@@ -776,7 +777,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>consumerScheduled</h4>
-<pre>private 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/wal/AsyncFSWAL.html#line.180">consumerScheduled</a></pre>
+<pre>private 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/wal/AsyncFSWAL.html#line.181">consumerScheduled</a></pre>
 </li>
 </ul>
 <a name="batchSize">
@@ -785,7 +786,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>batchSize</h4>
-<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.182">batchSize</a></pre>
+<pre>private final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.183">batchSize</a></pre>
 </li>
 </ul>
 <a name="closeExecutor">
@@ -794,7 +795,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>closeExecutor</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.184">closeExecutor</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html?is-external=true" title="class or interface in java.util.concurrent">ExecutorService</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.185">closeExecutor</a></pre>
 </li>
 </ul>
 <a name="fsOut">
@@ -803,7 +804,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>fsOut</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/asyncfs/AsyncFSOutput.html" title="interface in org.apache.hadoop.hbase.io.asyncfs">AsyncFSOutput</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.187">fsOut</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/io/asyncfs/AsyncFSOutput.html" title="interface in org.apache.hadoop.hbase.io.asyncfs">AsyncFSOutput</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.188">fsOut</a></pre>
 </li>
 </ul>
 <a name="toWriteAppends">
@@ -812,7 +813,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>toWriteAppends</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.189">toWriteAppends</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.190">toWriteAppends</a></pre>
 </li>
 </ul>
 <a name="unackedAppends">
@@ -821,7 +822,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>unackedAppends</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.191">unackedAppends</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Deque.html?is-external=true" title="class or interface in java.util">Deque</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.192">unackedAppends</a></pre>
 </li>
 </ul>
 <a name="syncFutures">
@@ -830,7 +831,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>syncFutures</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.193">syncFutures</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/SortedSet.html?is-external=true" title="class or interface in java.util">SortedSet</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.194">syncFutures</a></pre>
 </li>
 </ul>
 <a name="highestProcessedAppendTxid">
@@ -839,7 +840,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>highestProcessedAppendTxid</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.196">highestProcessedAppendTxid</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.197">highestProcessedAppendTxid</a></pre>
 </li>
 </ul>
 <a name="fileLengthAtLastSync">
@@ -848,7 +849,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>fileLengthAtLastSync</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.199">fileLengthAtLastSync</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.200">fileLengthAtLastSync</a></pre>
 </li>
 </ul>
 <a name="highestProcessedAppendTxidAtLastSync">
@@ -857,7 +858,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>highestProcessedAppendTxidAtLastSync</h4>
-<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.201">highestProcessedAppendTxidAtLastSync</a></pre>
+<pre>private&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.202">highestProcessedAppendTxidAtLastSync</a></pre>
 </li>
 </ul>
 <a name="waitOnShutdownInSeconds">
@@ -866,7 +867,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>waitOnShutdownInSeconds</h4>
-<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.203">waitOnShutdownInSeconds</a></pre>
+<pre>private final&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.204">waitOnShutdownInSeconds</a></pre>
 </li>
 </ul>
 </li>
@@ -883,7 +884,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>AsyncFSWAL</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.205">AsyncFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.206">AsyncFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;archiveDir,
@@ -909,7 +910,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>AsyncFSWAL</h4>
-<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.213">AsyncFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>public&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.214">AsyncFSWAL</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                   <a href="../../../../../../org/apache/hadoop/hbase/Abortable.html" title="interface in org.apache.hadoop.hbase">Abortable</a>&nbsp;abortable,
                   org.apache.hadoop.fs.Path&nbsp;rootDir,
                   <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;logDir,
@@ -944,7 +945,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>waitingRoll</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.265">waitingRoll</a>(int&nbsp;epochAndState)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.266">waitingRoll</a>(int&nbsp;epochAndState)</pre>
 </li>
 </ul>
 <a name="writerBroken-int-">
@@ -953,7 +954,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>writerBroken</h4>
-<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.269">writerBroken</a>(int&nbsp;epochAndState)</pre>
+<pre>private static&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.270">writerBroken</a>(int&nbsp;epochAndState)</pre>
 </li>
 </ul>
 <a name="epoch-int-">
@@ -962,7 +963,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>epoch</h4>
-<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.273">epoch</a>(int&nbsp;epochAndState)</pre>
+<pre>private static&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.274">epoch</a>(int&nbsp;epochAndState)</pre>
 </li>
 </ul>
 <a name="trySetReadyForRolling--">
@@ -971,7 +972,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>trySetReadyForRolling</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.278">trySetReadyForRolling</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.279">trySetReadyForRolling</a>()</pre>
 </li>
 </ul>
 <a name="syncFailed-long-java.lang.Throwable-">
@@ -980,7 +981,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>syncFailed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.301">syncFailed</a>(long&nbsp;epochWhenSync,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.302">syncFailed</a>(long&nbsp;epochWhenSync,
                         <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Throwable.html?is-external=true" title="class or interface in java.lang">Throwable</a>&nbsp;error)</pre>
 </li>
 </ul>
@@ -990,7 +991,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>syncCompleted</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.334">syncCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.335">syncCompleted</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
                            long&nbsp;processedTxid,
                            long&nbsp;startTimeNs)</pre>
 </li>
@@ -1001,7 +1002,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>isHsync</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.363">isHsync</a>(long&nbsp;beginTxid,
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.364">isHsync</a>(long&nbsp;beginTxid,
                         long&nbsp;endTxid)</pre>
 </li>
 </ul>
@@ -1011,7 +1012,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>sync</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.377">sync</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.378">sync</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer)</pre>
 </li>
 </ul>
 <a name="finishSyncLowerThanTxid-long-">
@@ -1020,7 +1021,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>finishSyncLowerThanTxid</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.394">finishSyncLowerThanTxid</a>(long&nbsp;txid)</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.395">finishSyncLowerThanTxid</a>(long&nbsp;txid)</pre>
 </li>
 </ul>
 <a name="finishSync--">
@@ -1029,7 +1030,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>finishSync</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.410">finishSync</a>()</pre>
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.411">finishSync</a>()</pre>
 </li>
 </ul>
 <a name="appendAndSync--">
@@ -1038,7 +1039,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>appendAndSync</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.444">appendAndSync</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.445">appendAndSync</a>()</pre>
 </li>
 </ul>
 <a name="drainNonMarkerEditsAndFailSyncs--">
@@ -1047,7 +1048,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>drainNonMarkerEditsAndFailSyncs</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.500">drainNonMarkerEditsAndFailSyncs</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.501">drainNonMarkerEditsAndFailSyncs</a>()</pre>
 </li>
 </ul>
 <a name="consume--">
@@ -1056,7 +1057,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>consume</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.542">consume</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.543">consume</a>()</pre>
 </li>
 </ul>
 <a name="shouldScheduleConsumer--">
@@ -1065,7 +1066,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>shouldScheduleConsumer</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.620">shouldScheduleConsumer</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.621">shouldScheduleConsumer</a>()</pre>
 </li>
 </ul>
 <a name="markerEditOnly--">
@@ -1074,7 +1075,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>markerEditOnly</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.630">markerEditOnly</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.631">markerEditOnly</a>()</pre>
 </li>
 </ul>
 <a name="append-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-boolean-">
@@ -1083,7 +1084,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.635">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.636">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                       <a href="../../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                       <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edits,
                       boolean&nbsp;inMemstore)
@@ -1133,7 +1134,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doSync</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.649">doSync</a>(boolean&nbsp;forceSync)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.650">doSync</a>(boolean&nbsp;forceSync)
                throws <a href="https://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>
@@ -1149,7 +1150,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doSync</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.666">doSync</a>(long&nbsp;txid,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.667">doSync</a>(long&nbsp;txid,
                       boolean&nbsp;forceSync)
                throws <a href="https://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>
@@ -1166,7 +1167,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createAsyncWriter</h4>
-<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.686">createAsyncWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
+<pre>protected final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.687">createAsyncWriter</a>(org.apache.hadoop.fs.FileSystem&nbsp;fs,
                                                           org.apache.hadoop.fs.Path&nbsp;path)
                                                    throws <a href="https://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>
@@ -1181,7 +1182,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>createWriterInstance</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.692">createWriterInstance</a>(org.apache.hadoop.fs.Path&nbsp;path)
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.693">createWriterInstance</a>(org.apache.hadoop.fs.Path&nbsp;path)
                                                 throws <a href="https://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>
@@ -1197,16 +1198,17 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>waitForSafePoint</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.696">waitForSafePoint</a>()</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.697">waitForSafePoint</a>()</pre>
 </li>
 </ul>
-<a name="closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-">
+<a name="closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-org.apache.hadoop.fs.Path-">
 <!--   -->
 </a>
 <ul class="blockList">
 <li class="blockList">
 <h4>closeWriter</h4>
-<pre>protected final&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.715">closeWriter</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer)</pre>
+<pre>protected final&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.716">closeWriter</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
+                                 org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
 <a name="doReplaceWriter-org.apache.hadoop.fs.Path-org.apache.hadoop.fs.Path-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-">
@@ -1215,7 +1217,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doReplaceWriter</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.732">doReplaceWriter</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.736">doReplaceWriter</a>(org.apache.hadoop.fs.Path&nbsp;oldPath,
                                org.apache.hadoop.fs.Path&nbsp;newPath,
                                <a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;nextWriter)
                         throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1239,7 +1241,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doShutdown</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.760">doShutdown</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.764">doShutdown</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>
@@ -1255,7 +1257,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doAppend</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.802">doAppend</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.806">doAppend</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
                         <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&nbsp;entry)</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1269,7 +1271,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getPipeline</h4>
-<pre>org.apache.hadoop.hdfs.protocol.DatanodeInfo[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.807">getPipeline</a>()</pre>
+<pre>org.apache.hadoop.hdfs.protocol.DatanodeInfo[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.811">getPipeline</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getPipeline--">AbstractFSWAL</a></code></span></div>
 <div class="block">This method gets the pipeline for the current WAL.</div>
 <dl>
@@ -1284,7 +1286,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogReplication</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.813">getLogReplication</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.817">getLogReplication</a>()</pre>
 <div class="block"><span class="descfrmTypeLabel">Description copied from class:&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#getLogReplication--">AbstractFSWAL</a></code></span></div>
 <div class="block">This method gets the datanode replication count for the current WAL.</div>
 <dl>
@@ -1299,7 +1301,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>doCheckLogLowReplication</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.818">doCheckLogLowReplication</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#line.822">doCheckLogLowReplication</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#doCheckLogLowReplication--">doCheckLogLowReplication</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALPr [...]
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html
index 004a30d..a2af928 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/DualAsyncFSWAL.html
@@ -193,7 +193,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Asyn
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortable">abortable</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#blocksize">blocksize</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#closed">closed</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortable">abortable</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#blocksize">blocksize</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#closed">closed</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase [...]
 </ul>
 </li>
 </ul>
@@ -261,14 +261,14 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Asyn
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AsyncFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#append-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-boolean-">append</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-">closeWriter</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#creat [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#append-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-boolean-">append</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-org.apache.hadoop.fs.Path-">closeWriter</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.org.apache.hadoop.hbase.regionserver.wal.AbstractFSWAL">
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortCacheFlush-byte:A-">abortCacheFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendData-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">appendData</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendEntry-W-org.apache.hadoop.h [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortCacheFlush-byte:A-">abortCacheFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendData-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">appendData</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendEntry-W-org.apache.hadoop.h [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html
index fa7bbb9..b19b47b 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html
@@ -117,7 +117,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.941">FSHLog.RingBufferEventHandler</a>
+<pre>class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.944">FSHLog.RingBufferEventHandler</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 com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>&gt;, com.lmax.disruptor.LifecycleAware</pre>
 <div class="block">Handler that is run by the disruptor ringbuffer consumer. Consumer is a SINGLE
@@ -302,7 +302,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>syncRunners</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.SyncRunner</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.942">syncRunners</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.SyncRunner</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.945">syncRunners</a></pre>
 </li>
 </ul>
 <a name="syncFutures">
@@ -311,7 +311,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>syncFutures</h4>
-<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.943">syncFutures</a></pre>
+<pre>private final&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>[] <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.946">syncFutures</a></pre>
 </li>
 </ul>
 <a name="syncFuturesCount">
@@ -320,7 +320,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>syncFuturesCount</h4>
-<pre>private&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/wal/FSHLog.RingBufferEventHandler.html#line.946">syncFuturesCount</a></pre>
+<pre>private&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/wal/FSHLog.RingBufferEventHandler.html#line.949">syncFuturesCount</a></pre>
 </li>
 </ul>
 <a name="zigzagLatch">
@@ -329,7 +329,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>zigzagLatch</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.SafePointZigZagLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.947">zigzagLatch</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.SafePointZigZagLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.950">zigzagLatch</a></pre>
 </li>
 </ul>
 <a name="exception">
@@ -338,7 +338,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>exception</h4>
-<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.952">exception</a></pre>
+<pre>private&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.955">exception</a></pre>
 <div class="block">Set if we get an exception appending or syncing so that all subsequence appends and syncs on
  this WAL fail until WAL is replaced.</div>
 </li>
@@ -349,7 +349,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>safePointWaiter</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.956">safePointWaiter</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.959">safePointWaiter</a></pre>
 <div class="block">Object to block on while waiting on safe point.</div>
 </li>
 </ul>
@@ -359,7 +359,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>shutdown</h4>
-<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.957">shutdown</a></pre>
+<pre>private volatile&nbsp;boolean <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.960">shutdown</a></pre>
 </li>
 </ul>
 <a name="syncRunnerIndex">
@@ -368,7 +368,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>syncRunnerIndex</h4>
-<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.962">syncRunnerIndex</a></pre>
+<pre>private&nbsp;int <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.965">syncRunnerIndex</a></pre>
 <div class="block">Which syncrunner to use next.</div>
 </li>
 </ul>
@@ -386,7 +386,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>RingBufferEventHandler</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.964">RingBufferEventHandler</a>(int&nbsp;syncRunnerCount,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.967">RingBufferEventHandler</a>(int&nbsp;syncRunnerCount,
                        int&nbsp;maxBatchCount)</pre>
 </li>
 </ul>
@@ -404,7 +404,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>cleanupOutstandingSyncsOnException</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.972">cleanupOutstandingSyncsOnException</a>(long&nbsp;sequence,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.975">cleanupOutstandingSyncsOnException</a>(long&nbsp;sequence,
                                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a>&nbsp;e)</pre>
 </li>
 </ul>
@@ -414,7 +414,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>isOutstandingSyncs</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.983">isOutstandingSyncs</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.986">isOutstandingSyncs</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True if outstanding sync futures still</dd>
@@ -427,7 +427,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>isOutstandingSyncsFromRunners</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.994">isOutstandingSyncsFromRunners</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.997">isOutstandingSyncsFromRunners</a>()</pre>
 </li>
 </ul>
 <a name="onEvent-org.apache.hadoop.hbase.regionserver.wal.RingBufferTruck-long-boolean-">
@@ -436,7 +436,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>onEvent</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1006">onEvent</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>&nbsp;truck,
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1009">onEvent</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.html" title="class in org.apache.hadoop.hbase.regionserver.wal">RingBufferTruck</a>&nbsp;truck,
                     long&nbsp;sequence,
                     boolean&nbsp;endOfBatch)
              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
@@ -454,7 +454,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>attainSafePoint</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.SafePointZigZagLatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1095">attainSafePoint</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog.SafePointZigZagLatch</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1098">attainSafePoint</a>()</pre>
 </li>
 </ul>
 <a name="attainSafePoint-long-">
@@ -463,7 +463,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>attainSafePoint</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1104">attainSafePoint</a>(long&nbsp;currentSequence)</pre>
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1107">attainSafePoint</a>(long&nbsp;currentSequence)</pre>
 <div class="block">Check if we should attain safe point. If so, go there and then wait till signalled before we
  proceeding.</div>
 </li>
@@ -474,7 +474,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1139">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&nbsp;entry)
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1142">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSWALEntry.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSWALEntry</a>&nbsp;entry)
      throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Exception.html?is-external=true" title="class or interface in java.lang">Exception</a></pre>
 <div class="block">Append to the WAL. Does all CP and WAL listener calls.</div>
 <dl>
@@ -489,7 +489,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockList">
 <li class="blockList">
 <h4>onStart</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1152">onStart</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1155">onStart</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>onStart</code>&nbsp;in interface&nbsp;<code>com.lmax.disruptor.LifecycleAware</code></dd>
@@ -502,7 +502,7 @@ implements com.lmax.disruptor.EventHandler&lt;<a href="../../../../../../org/apa
 <ul class="blockListLast">
 <li class="blockList">
 <h4>onShutdown</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1159">onShutdown</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.RingBufferEventHandler.html#line.1162">onShutdown</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code>onShutdown</code>&nbsp;in interface&nbsp;<code>com.lmax.disruptor.LifecycleAware</code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html
index 283f4db..4464978 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html
@@ -113,7 +113,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.859">FSHLog.SafePointZigZagLatch</a>
+<pre>static class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.862">FSHLog.SafePointZigZagLatch</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></pre>
 <div class="block">This class is used coordinating two threads holding one thread at a 'safe point' while the
  orchestrating thread does some work that requires the first thread paused: e.g. holding the WAL
@@ -254,7 +254,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>safePointAttainedLatch</h4>
-<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.863">safePointAttainedLatch</a></pre>
+<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.866">safePointAttainedLatch</a></pre>
 <div class="block">Count down this latch when safe point attained.</div>
 </li>
 </ul>
@@ -264,7 +264,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>safePointReleasedLatch</h4>
-<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.867">safePointReleasedLatch</a></pre>
+<pre>private volatile&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html?is-external=true" title="class or interface in java.util.concurrent">CountDownLatch</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.870">safePointReleasedLatch</a></pre>
 <div class="block">Latch to wait on. Will be released when we can proceed.</div>
 </li>
 </ul>
@@ -282,7 +282,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SafePointZigZagLatch</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.859">SafePointZigZagLatch</a>()</pre>
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.862">SafePointZigZagLatch</a>()</pre>
 </li>
 </ul>
 </li>
@@ -299,7 +299,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>checkIfSyncFailed</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.869">checkIfSyncFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.872">checkIfSyncFailed</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture)
                         throws <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedSyncBeforeLogCloseException</a></pre>
 <dl>
 <dt><span class="throwsLabel">Throws:</span></dt>
@@ -313,7 +313,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>waitSafePoint</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.882">waitSafePoint</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture)
+<pre><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.885">waitSafePoint</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a>,
                          <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FailedSyncBeforeLogCloseException.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FailedSyncBeforeLogCloseException</a></pre>
 <div class="block">For Thread A to call when it is ready to wait on the 'safe point' to be attained. Thread A
@@ -336,7 +336,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>safePointAttained</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.896">safePointAttained</a>()
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.899">safePointAttained</a>()
                 throws <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/InterruptedException.html?is-external=true" title="class or interface in java.lang">InterruptedException</a></pre>
 <div class="block">Called by Thread B when it attains the 'safe point'. In this method, Thread B signals Thread
  A it can proceed. Thread B will be held in here until <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#releaseSafePoint--"><code>releaseSafePoint()</code></a> is called
@@ -353,7 +353,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseSafePoint</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.905">releaseSafePoint</a>()</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.908">releaseSafePoint</a>()</pre>
 <div class="block">Called by Thread A when it is done with the work it needs to do while Thread B is halted.
  This will release the Thread B held in a call to <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#safePointAttained--"><code>safePointAttained()</code></a></div>
 </li>
@@ -364,7 +364,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>isCocked</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.912">isCocked</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SafePointZigZagLatch.html#line.915">isCocked</a>()</pre>
 <dl>
 <dt><span class="returnLabel">Returns:</span></dt>
 <dd>True is this is a 'cocked', fresh instance, and not one that has already fired.</dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html
index 17e0149..4007a6a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html
@@ -122,7 +122,7 @@ var activeTableTab = "activeTableTab";
 </dl>
 <hr>
 <br>
-<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.515">FSHLog.SyncRunner</a>
+<pre>private class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.518">FSHLog.SyncRunner</a>
 extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html?is-external=true" title="class or interface in java.lang">Thread</a></pre>
 <div class="block">Thread to runs the hdfs sync call. This call takes a while to complete. This is the longest
  pole adding edits to the WAL and this must complete to be sure all edits persisted. We run
@@ -291,7 +291,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>sequence</h4>
-<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.516">sequence</a></pre>
+<pre>private volatile&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.519">sequence</a></pre>
 </li>
 </ul>
 <a name="syncFutures">
@@ -300,7 +300,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>syncFutures</h4>
-<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.518">syncFutures</a></pre>
+<pre>private final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/BlockingQueue.html?is-external=true" title="class or interface in java.util.concurrent">BlockingQueue</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&gt; <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.521">syncFutures</a></pre>
 </li>
 </ul>
 <a name="takeSyncFuture">
@@ -309,7 +309,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>takeSyncFuture</h4>
-<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.519">takeSyncFuture</a></pre>
+<pre>private volatile&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a> <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.522">takeSyncFuture</a></pre>
 </li>
 </ul>
 </li>
@@ -326,7 +326,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>SyncRunner</h4>
-<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.521">SyncRunner</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
+<pre><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.524">SyncRunner</a>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name,
            int&nbsp;maxHandlersCount)</pre>
 </li>
 </ul>
@@ -344,7 +344,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>offer</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.539">offer</a>(long&nbsp;sequence,
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.542">offer</a>(long&nbsp;sequence,
            <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>[]&nbsp;syncFutures,
            int&nbsp;syncFutureCount)</pre>
 </li>
@@ -355,7 +355,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseSyncFuture</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.551">releaseSyncFuture</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.554">releaseSyncFuture</a>(<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;syncFuture,
                               long&nbsp;currentSequence,
                               <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>
 <div class="block">Release the passed <code>syncFuture</code></div>
@@ -371,7 +371,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>releaseSyncFutures</h4>
-<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.566">releaseSyncFutures</a>(long&nbsp;currentSequence,
+<pre>private&nbsp;int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.569">releaseSyncFutures</a>(long&nbsp;currentSequence,
                                <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>
 <div class="block">Release all SyncFutures whose sequence is <= <code>currentSequence</code>.</div>
 <dl>
@@ -388,7 +388,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>updateHighestSyncedSequence</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.585">updateHighestSyncedSequence</a>(long&nbsp;sequence)</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.588">updateHighestSyncedSequence</a>(long&nbsp;sequence)</pre>
 <dl>
 <dt><span class="paramLabel">Parameters:</span></dt>
 <dd><code>sequence</code> - The sequence we ran the filesystem sync against.</dd>
@@ -403,7 +403,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockList">
 <li class="blockList">
 <h4>areSyncFuturesReleased</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.600">areSyncFuturesReleased</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.603">areSyncFuturesReleased</a>()</pre>
 </li>
 </ul>
 <a name="run--">
@@ -412,7 +412,7 @@ extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html
 <ul class="blockListLast">
 <li class="blockList">
 <h4>run</h4>
-<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.608">run</a>()</pre>
+<pre>public&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.SyncRunner.html#line.611">run</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true#run--" title="class or interface in java.lang">run</a></code>&nbsp;in interface&nbsp;<code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Runnable.html?is-external=true" title="class or interface in java.lang">Runnable</a></code></dd>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html
index 28add65..4f32ffd 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html
@@ -121,7 +121,7 @@ var activeTableTab = "activeTableTab";
 <pre>@InterfaceAudience.Private
 public class <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.72">FSHLog</a>
 extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&gt;</pre>
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </li>
 </ul>
 </div>
@@ -298,7 +298,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <!--   -->
 </a>
 <h3>Fields inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortable">abortable</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#blocksize">blocksize</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#closed">closed</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortable">abortable</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#blocksize">blocksize</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#closed">closed</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#conf">conf</a>, <a href="../../../../../../org/apache/hadoop/hbase [...]
 </ul>
 </li>
 </ul>
@@ -497,7 +497,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <!--   -->
 </a>
 <h3>Methods inherited from class&nbsp;org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a></h3>
-<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortCacheFlush-byte:A-">abortCacheFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendData-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">appendData</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendEntry-W-org.apache.hadoop.h [...]
+<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#abortCacheFlush-byte:A-">abortCacheFlush</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendData-org.apache.hadoop.hbase.client.RegionInfo-org.apache.hadoop.hbase.wal.WALKeyImpl-org.apache.hadoop.hbase.wal.WALEdit-">appendData</a>, <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#appendEntry-W-org.apache.hadoop.h [...]
 </ul>
 <ul class="blockList">
 <li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
@@ -788,7 +788,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>FIXED_OVERHEAD</h4>
-<pre>public static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.830">FIXED_OVERHEAD</a></pre>
+<pre>public static final&nbsp;long <a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.833">FIXED_OVERHEAD</a></pre>
 </li>
 </ul>
 </li>
@@ -1032,7 +1032,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>closeWriter</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.435">closeWriter</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;writer,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.436">closeWriter</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;writer,
                          org.apache.hadoop.fs.Path&nbsp;path,
                          boolean&nbsp;syncCloseCall)
                   throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
@@ -1048,7 +1048,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doShutdown</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.455">doShutdown</a>()
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.458">doShutdown</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>
@@ -1064,7 +1064,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>append</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.493">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.496">append</a>(<a href="../../../../../../org/apache/hadoop/hbase/client/RegionInfo.html" title="interface in org.apache.hadoop.hbase.client">RegionInfo</a>&nbsp;hri,
                       <a href="../../../../../../org/apache/hadoop/hbase/wal/WALKeyImpl.html" title="class in org.apache.hadoop.hbase.wal">WALKeyImpl</a>&nbsp;key,
                       <a href="../../../../../../org/apache/hadoop/hbase/wal/WALEdit.html" title="class in org.apache.hadoop.hbase.wal">WALEdit</a>&nbsp;edits,
                       boolean&nbsp;inMemstore)
@@ -1114,7 +1114,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>checkLogRoll</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.683">checkLogRoll</a>()</pre>
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.686">checkLogRoll</a>()</pre>
 <div class="block">Schedule a log roll if needed.</div>
 </li>
 </ul>
@@ -1124,7 +1124,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doCheckLogLowReplication</h4>
-<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.720">doCheckLogLowReplication</a>()</pre>
+<pre>protected&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.723">doCheckLogLowReplication</a>()</pre>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
 <dd><code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html#doCheckLogLowReplication--">doCheckLogLowReplication</a></code>&nbsp;in class&nbsp;<code><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html" title="class in org.apache.hadoop.hbase.regionserver.wal">AbstractFSWAL</a>&lt;<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvide [...]
@@ -1139,7 +1139,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getSequenceOnRingBuffer</h4>
-<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.765">getSequenceOnRingBuffer</a>()</pre>
+<pre>protected&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.768">getSequenceOnRingBuffer</a>()</pre>
 </li>
 </ul>
 <a name="publishSyncOnRingBuffer-boolean-">
@@ -1148,7 +1148,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>publishSyncOnRingBuffer</h4>
-<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.769">publishSyncOnRingBuffer</a>(boolean&nbsp;forceSync)</pre>
+<pre>private&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.772">publishSyncOnRingBuffer</a>(boolean&nbsp;forceSync)</pre>
 </li>
 </ul>
 <a name="publishSyncOnRingBuffer-long-boolean-">
@@ -1157,7 +1157,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>publishSyncOnRingBuffer</h4>
-<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.774">publishSyncOnRingBuffer</a>(long&nbsp;sequence,
+<pre>protected&nbsp;<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/SyncFuture.html" title="class in org.apache.hadoop.hbase.regionserver.wal">SyncFuture</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.777">publishSyncOnRingBuffer</a>(long&nbsp;sequence,
                                              boolean&nbsp;forceSync)</pre>
 </li>
 </ul>
@@ -1167,7 +1167,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>publishSyncThenBlockOnCompletion</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.787">publishSyncThenBlockOnCompletion</a>(boolean&nbsp;forceSync)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.790">publishSyncThenBlockOnCompletion</a>(boolean&nbsp;forceSync)
                                        throws <a href="https://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>
@@ -1181,7 +1181,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getLogReplication</h4>
-<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.800">getLogReplication</a>()</pre>
+<pre>int&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.803">getLogReplication</a>()</pre>
 <div class="block">This method gets the datanode replication count for the current WAL.
  <p>
  If the pipeline isn't started yet or is empty, you will get the default replication factor.
@@ -1199,7 +1199,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doSync</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.813">doSync</a>(boolean&nbsp;forceSync)
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.816">doSync</a>(boolean&nbsp;forceSync)
                throws <a href="https://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>
@@ -1215,7 +1215,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>doSync</h4>
-<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.818">doSync</a>(long&nbsp;txid,
+<pre>protected&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.821">doSync</a>(long&nbsp;txid,
                       boolean&nbsp;forceSync)
                throws <a href="https://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>
@@ -1232,7 +1232,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>isLowReplicationRollEnabled</h4>
-<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.826">isLowReplicationRollEnabled</a>()</pre>
+<pre>boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.829">isLowReplicationRollEnabled</a>()</pre>
 </li>
 </ul>
 <a name="getPipeline--">
@@ -1241,7 +1241,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getPipeline</h4>
-<pre>org.apache.hadoop.hdfs.protocol.DatanodeInfo[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.1170">getPipeline</a>()</pre>
+<pre>org.apache.hadoop.hdfs.protocol.DatanodeInfo[]&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.1173">getPipeline</a>()</pre>
 <div class="block">This method gets the pipeline for the current WAL.</div>
 <dl>
 <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
@@ -1255,7 +1255,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockList">
 <li class="blockList">
 <h4>getWriter</h4>
-<pre><a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.1179">getWriter</a>()</pre>
+<pre><a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.1182">getWriter</a>()</pre>
 </li>
 </ul>
 <a name="setWriter-org.apache.hadoop.hbase.wal.WALProvider.Writer-">
@@ -1264,7 +1264,7 @@ extends <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/Abst
 <ul class="blockListLast">
 <li class="blockList">
 <h4>setWriter</h4>
-<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.1183">setWriter</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;writer)</pre>
+<pre>void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/wal/FSHLog.html#line.1186">setWriter</a>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.Writer.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.Writer</a>&nbsp;writer)</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/AbstractFSWAL.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/AbstractFSWAL.html
index 6a61c64..ca99471 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/AbstractFSWAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/class-use/AbstractFSWAL.html
@@ -121,7 +121,7 @@
 <tr class="altColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></span></code>
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </td>
 </tr>
 </tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
index c82ba0e..b408044 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-summary.html
@@ -179,7 +179,7 @@
 <tr class="rowColor">
 <td class="colFirst"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></td>
 <td class="colLast">
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </td>
 </tr>
 <tr class="rowColor">
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
index f3f2d6f..5654cdb 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-tree.html
@@ -248,10 +248,10 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/ProtobufLogReader.WALHdrResult.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">ProtobufLogReader.WALHdrResult</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/WALActionsListener.RollRequestReason.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">WALActionsListener.RollRequestReason</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/RingBufferTruck.Type.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">RingBufferTruck.Type</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.regionserver.wal.<a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CompressionContext.DictionaryIndex.html" title="enum in org.apache.hadoop.hbase.regionserver.wal"><span class="typeNameLink">CompressionContext.DictionaryIndex</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
index adac974..8490d0a 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/wal/package-use.html
@@ -348,7 +348,7 @@
 </tr>
 <tr class="altColor">
 <td class="colOne"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/class-use/FSHLog.html#org.apache.hadoop.hbase.wal">FSHLog</a>
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </td>
 </tr>
 <tr class="rowColor">
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html
index c5a2a8e..4e0a53f 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html
@@ -687,7 +687,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>dequeueCurrentLog</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.253">dequeueCurrentLog</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.252">dequeueCurrentLog</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>
@@ -701,7 +701,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>readNextEntryAndRecordReaderPosition</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.264">readNextEntryAndRecordReaderPosition</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.263">readNextEntryAndRecordReaderPosition</a>()
                                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/io/IOException.html?is-external=true" title="class or interface in java.io">IOException</a></pre>
 <div class="block">Returns whether the file is opened for writing.</div>
 <dl>
@@ -716,7 +716,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>closeReader</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.288">closeReader</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.287">closeReader</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>
@@ -730,7 +730,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>checkReader</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.296">checkReader</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.295">checkReader</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>
@@ -744,7 +744,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>openNextLog</h4>
-<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.304">openNextLog</a>()
+<pre>private&nbsp;boolean&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.303">openNextLog</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>
@@ -758,7 +758,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>getArchivedLog</h4>
-<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.320">getArchivedLog</a>(org.apache.hadoop.fs.Path&nbsp;path)
+<pre>private&nbsp;org.apache.hadoop.fs.Path&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.319">getArchivedLog</a>(org.apache.hadoop.fs.Path&nbsp;path)
                                           throws <a href="https://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>
@@ -772,7 +772,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>handleFileNotFound</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.345">handleFileNotFound</a>(org.apache.hadoop.fs.Path&nbsp;path,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.344">handleFileNotFound</a>(org.apache.hadoop.fs.Path&nbsp;path,
                                 <a href="https://docs.oracle.com/javase/8/docs/api/java/io/FileNotFoundException.html?is-external=true" title="class or interface in java.io">FileNotFoundException</a>&nbsp;fnfe)
                          throws <a href="https://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>
@@ -787,7 +787,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>openReader</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.355">openReader</a>(org.apache.hadoop.fs.Path&nbsp;path)
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.354">openReader</a>(org.apache.hadoop.fs.Path&nbsp;path)
                  throws <a href="https://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>
@@ -801,7 +801,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>recoverLease</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.390">recoverLease</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.389">recoverLease</a>(org.apache.hadoop.conf.Configuration&nbsp;conf,
                           org.apache.hadoop.fs.Path&nbsp;path)</pre>
 </li>
 </ul>
@@ -811,7 +811,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>resetReader</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.405">resetReader</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.404">resetReader</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>
@@ -825,7 +825,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockList">
 <li class="blockList">
 <h4>seek</h4>
-<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.423">seek</a>()
+<pre>private&nbsp;void&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.422">seek</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>
@@ -839,7 +839,7 @@ implements <a href="https://docs.oracle.com/javase/8/docs/api/java/io/Closeable.
 <ul class="blockListLast">
 <li class="blockList">
 <h4>currentTrailerSize</h4>
-<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.429">currentTrailerSize</a>()</pre>
+<pre>private&nbsp;long&nbsp;<a href="../../../../../../src-html/org/apache/hadoop/hbase/replication/regionserver/WALEntryStream.html#line.428">currentTrailerSize</a>()</pre>
 </li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALFileLengthProvider.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALFileLengthProvider.html
index 97e8f20..a7cc8ec 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALFileLengthProvider.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/class-use/WALFileLengthProvider.html
@@ -131,7 +131,7 @@
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></span></code>
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </td>
 </tr>
 </tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
index 05adce3..0f249cf 100644
--- a/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/replication/regionserver/package-tree.html
@@ -221,8 +221,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/ReplicationSourceShipper.WorkerState.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">ReplicationSourceShipper.WorkerState</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.replication.regionserver.<a href="../../../../../../org/apache/hadoop/hbase/replication/regionserver/MetricsReplicationSourceFactoryImpl.SourceHolder.html" title="enum in org.apache.hadoop.hbase.replication.regionserver"><span class="typeNameLink">MetricsReplicationSourceFactoryImpl.SourceHolder</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
index 3e7461f..e35605e 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/access/package-tree.html
@@ -162,12 +162,12 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.OperationType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">SnapshotScannerHDFSAclHelper.HDFSAclOperation.AclType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Action.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Action</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessControlFilter.Strategy.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessControlFilter.Strategy</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/Permission.Scope.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">Permission.Scope</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.access.<a href="../../../../../../org/apache/hadoop/hbase/security/access/AccessController.OpType.html" title="enum in org.apache.hadoop.hbase.security.access"><span class="typeNameLink">AccessController.OpType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
index a64c5b0..a17fb57 100644
--- a/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/security/package-tree.html
@@ -189,9 +189,9 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslUtil.QualityOfProtection.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslUtil.QualityOfProtection</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/SaslStatus.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">SaslStatus</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.security.<a href="../../../../../org/apache/hadoop/hbase/security/AuthMethod.html" title="enum in org.apache.hadoop.hbase.security"><span class="typeNameLink">AuthMethod</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
index a06d077..4c96d71 100644
--- a/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/thrift/package-tree.html
@@ -212,8 +212,8 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/MetricsThriftServerSourceFactoryImpl.FactoryStorage.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">MetricsThriftServerSourceFactoryImpl.FactoryStorage</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ThriftMetrics.ThriftServerType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ThriftMetrics.ThriftServerType</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.thrift.<a href="../../../../../org/apache/hadoop/hbase/thrift/ImplType.html" title="enum in org.apache.hadoop.hbase.thrift"><span class="typeNameLink">ImplType</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
index c5456b7..3c04d79 100644
--- a/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/util/package-tree.html
@@ -535,13 +535,13 @@
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PrettyPrinter.Unit.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PrettyPrinter.Unit</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Order.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Order</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.PureJavaComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.PureJavaComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/ChecksumType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">ChecksumType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/HbckErrorReporter.ERROR_CODE.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">HbckErrorReporter.ERROR_CODE</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/DNS.ServerType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">DNS.ServerType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/PoolMap.PoolType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">PoolMap.PoolType</span></a></li>
-<li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.LexicographicalComparerHolder.UnsafeComparer.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">Bytes.LexicographicalComparerHolder.UnsafeComparer</span></a> (implements org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/Bytes.Comparer.html" title="interface in org.apache.hadoop.hbase.util">Bytes.Comparer</a>&lt;T&gt;)</li>
 <li type="circle">org.apache.hadoop.hbase.util.<a href="../../../../../org/apache/hadoop/hbase/util/IdReadWriteLockWithObjectPool.ReferenceType.html" title="enum in org.apache.hadoop.hbase.util"><span class="typeNameLink">IdReadWriteLockWithObjectPool.ReferenceType</span></a></li>
 </ul>
 </li>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html
index 96aeda1..54a2c6f 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WAL.html
@@ -480,7 +480,7 @@
 <tr class="rowColor">
 <td class="colFirst"><code>class&nbsp;</code></td>
 <td class="colLast"><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/FSHLog.html" title="class in org.apache.hadoop.hbase.regionserver.wal">FSHLog</a></span></code>
-<div class="block">The default implementation of FSWAL.</div>
+<div class="block">The original implementation of FSWAL.</div>
 </td>
 </tr>
 </tbody>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.AsyncWriter.html b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.AsyncWriter.html
index 10af4e1..26abfcb 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.AsyncWriter.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/class-use/WALProvider.AsyncWriter.html
@@ -173,7 +173,8 @@
 <tbody>
 <tr class="altColor">
 <td class="colFirst"><code>protected long</code></td>
-<td class="colLast"><span class="typeNameLabel">AsyncFSWAL.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-">closeWriter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer)</code>&nbsp;</td>
+<td class="colLast"><span class="typeNameLabel">AsyncFSWAL.</span><code><span class="memberNameLink"><a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.html#closeWriter-org.apache.hadoop.hbase.wal.WALProvider.AsyncWriter-org.apache.hadoop.fs.Path-">closeWriter</a></span>(<a href="../../../../../../org/apache/hadoop/hbase/wal/WALProvider.AsyncWriter.html" title="interface in org.apache.hadoop.hbase.wal">WALProvider.AsyncWriter</a>&nbsp;writer,
+           org.apache.hadoop.fs.Path&nbsp;path)</code>&nbsp;</td>
 </tr>
 <tr class="rowColor">
 <td class="colFirst"><code>static <a href="../../../../../../org/apache/hadoop/hbase/regionserver/wal/CombinedAsyncWriter.html" title="class in org.apache.hadoop.hbase.regionserver.wal">CombinedAsyncWriter</a></code></td>
diff --git a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
index 791fd83..a04f920 100644
--- a/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
+++ b/devapidocs/org/apache/hadoop/hbase/wal/package-tree.html
@@ -198,8 +198,8 @@
 <ul>
 <li type="circle">java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true" title="class or interface in java.lang"><span class="typeNameLink">Enum</span></a>&lt;E&gt; (implements java.lang.<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html?is-external=true" title="class or interface in java.lang">Comparable</a>&lt;T&gt;, java.io.<a href="https://docs.oracle.com/javase/8/docs/api/java/io/Serializable.html?is-external=true [...]
 <ul>
-<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 <li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/WALFactory.Providers.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">WALFactory.Providers</span></a></li>
+<li type="circle">org.apache.hadoop.hbase.wal.<a href="../../../../../org/apache/hadoop/hbase/wal/RegionGroupingProvider.Strategies.html" title="enum in org.apache.hadoop.hbase.wal"><span class="typeNameLink">RegionGroupingProvider.Strategies</span></a></li>
 </ul>
 </li>
 </ul>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html
index 6e60548..d984db4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.WalProps.html
@@ -46,1360 +46,1380 @@
 <span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import java.util.OptionalLong;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CopyOnWriteArrayList;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ExecutionException;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutorService;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.Executors;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.lang3.mutable.MutableLong;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.FileStatus;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.FileSystem;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.fs.Path;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.PathFilter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.Abortable;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.Cell;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HConstants;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.TimeoutIOException;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.ServerCall;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.wal.WALPrettyPrinter;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.wal.WALProvider.WriterBase;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hdfs.protocol.DatanodeInfo;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.util.StringUtils;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.slf4j.Logger;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.slf4j.LoggerFactory;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>/**<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * Implementation of {@link WAL} to go against {@link FileSystem}; i.e. keep WALs in HDFS. Only one<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * WAL is ever being written at a time. When a WAL hits a configured maximum size, it is rolled.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * This is done internal to the implementation.<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * &lt;p&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * As data is flushed from the MemStore to other on-disk structures (files sorted by key, hfiles), a<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * WAL becomes obsolete. We can let go of all the log edits/entries for a given HRegion-sequence id.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * A bunch of work in the below is done keeping account of these region sequence ids -- what is<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * flushed out to hfiles, and what is yet in WAL and in memory only.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * &lt;p&gt;<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * It is only practical to delete entire files. Thus, we delete an entire on-disk file<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * &lt;code&gt;F&lt;/code&gt; when all of the edits in &lt;code&gt;F&lt;/code&gt; have a log-sequence-id that's older<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * (smaller) than the most-recent flush.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * &lt;p&gt;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * To read an WAL, call<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link WALFactory#createReader(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path)}. *<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * &lt;h2&gt;Failure Semantic&lt;/h2&gt; If an exception on append or sync, roll the WAL because the current WAL<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * is now a lame duck; any more appends or syncs will fail also with the same original exception. If<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * we have made successful appends to the WAL and we then are unable to sync them, our current<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * semantic is to return error to the client that the appends failed but also to abort the current<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * context, usually the hosting server. We need to replay the WALs. &lt;br&gt;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * TODO: Change this semantic. A roll of WAL may be sufficient as long as we have flagged client<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * that the append failed. &lt;br&gt;<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * TODO: replication may pick up these last edits though they have been marked as failed append<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * (Need to keep our own file lengths, not rely on HDFS).<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>@InterfaceAudience.Private<a name="line.118"></a>
-<span class="sourceLineNo">119</span>public abstract class AbstractFSWAL&lt;W extends WriterBase&gt; implements WAL {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(AbstractFSWAL.class);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private static final String SURVIVED_TOO_LONG_SEC_KEY = "hbase.regionserver.wal.too.old.sec";<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private static final int SURVIVED_TOO_LONG_SEC_DEFAULT = 900;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  /** Don't log blocking regions more frequently than this. */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private static final long SURVIVED_TOO_LONG_LOG_INTERVAL_NS = TimeUnit.MINUTES.toNanos(5);<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  protected static final String SLOW_SYNC_TIME_MS ="hbase.regionserver.wal.slowsync.ms";<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected static final int DEFAULT_SLOW_SYNC_TIME_MS = 100; // in ms<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  protected static final String ROLL_ON_SYNC_TIME_MS = "hbase.regionserver.wal.roll.on.sync.ms";<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  protected static final int DEFAULT_ROLL_ON_SYNC_TIME_MS = 10000; // in ms<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  protected static final String SLOW_SYNC_ROLL_THRESHOLD =<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    "hbase.regionserver.wal.slowsync.roll.threshold";<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_THRESHOLD = 100; // 100 slow sync warnings<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  protected static final String SLOW_SYNC_ROLL_INTERVAL_MS =<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    "hbase.regionserver.wal.slowsync.roll.interval.ms";<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS = 60 * 1000; // in ms, 1 minute<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  protected static final String WAL_SYNC_TIMEOUT_MS = "hbase.regionserver.wal.sync.timeout";<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  protected static final int DEFAULT_WAL_SYNC_TIMEOUT_MS = 5 * 60 * 1000; // in ms, 5min<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String WAL_ROLL_MULTIPLIER = "hbase.regionserver.logroll.multiplier";<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public static final String MAX_LOGS = "hbase.regionserver.maxlogs";<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public static final String RING_BUFFER_SLOT_COUNT =<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    "hbase.regionserver.wal.disruptor.event.count";<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * file system instance<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected final FileSystem fs;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * WAL directory, where all WAL files would be placed.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  protected final Path walDir;<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * dir path where old logs are kept.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  protected final Path walArchiveDir;<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * Matches just those wal files that belong to this wal instance.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  protected final PathFilter ourFiles;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * Prefix of a WAL file, usually the region server name it is hosted on.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  protected final String walFilePrefix;<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Suffix included on generated wal file names<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  protected final String walFileSuffix;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * Prefix used when checking for wal membership.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   */<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  protected final String prefixPathStr;<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected final WALCoprocessorHost coprocessorHost;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * conf object<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  protected final Configuration conf;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  protected final Abortable abortable;<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  /** Listeners that are called on WAL events. */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  protected final List&lt;WALActionsListener&gt; listeners = new CopyOnWriteArrayList&lt;&gt;();<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Class that does accounting of sequenceids in WAL subsystem. Holds oldest outstanding sequence<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * id as yet not flushed as well as the most recent edit sequence id appended to the WAL. Has<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * facility for answering questions such as "Is it safe to GC a WAL?".<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  protected final SequenceIdAccounting sequenceIdAccounting = new SequenceIdAccounting();<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /** The slow sync will be logged; the very slow sync will cause the WAL to be rolled. */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  protected final long slowSyncNs, rollOnSyncNs;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  protected final int slowSyncRollThreshold;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected final int slowSyncCheckInterval;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  protected final AtomicInteger slowSyncCount = new AtomicInteger();<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  private final long walSyncTimeoutNs;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private final long walTooOldNs;<a name="line.210"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.CopyOnWriteArrayList;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutionException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.concurrent.ExecutorService;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import java.util.concurrent.Executors;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import java.util.concurrent.TimeUnit;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.commons.lang3.mutable.MutableLong;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.conf.Configuration;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.FileStatus;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.fs.FileSystem;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.fs.PathFilter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.Abortable;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.Cell;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HConstants;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.TimeoutIOException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.ServerCall;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.wal.WALPrettyPrinter;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.wal.WALProvider.WriterBase;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hdfs.protocol.DatanodeInfo;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.util.StringUtils;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.slf4j.Logger;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.slf4j.LoggerFactory;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>/**<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * Implementation of {@link WAL} to go against {@link FileSystem}; i.e. keep WALs in HDFS. Only one<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * WAL is ever being written at a time. When a WAL hits a configured maximum size, it is rolled.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * This is done internal to the implementation.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * &lt;p&gt;<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * As data is flushed from the MemStore to other on-disk structures (files sorted by key, hfiles), a<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * WAL becomes obsolete. We can let go of all the log edits/entries for a given HRegion-sequence id.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * A bunch of work in the below is done keeping account of these region sequence ids -- what is<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * flushed out to hfiles, and what is yet in WAL and in memory only.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * &lt;p&gt;<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * It is only practical to delete entire files. Thus, we delete an entire on-disk file<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * &lt;code&gt;F&lt;/code&gt; when all of the edits in &lt;code&gt;F&lt;/code&gt; have a log-sequence-id that's older<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * (smaller) than the most-recent flush.<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * &lt;p&gt;<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * To read an WAL, call<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * {@link WALFactory#createReader(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path)}. *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;h2&gt;Failure Semantic&lt;/h2&gt; If an exception on append or sync, roll the WAL because the current WAL<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * is now a lame duck; any more appends or syncs will fail also with the same original exception. If<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * we have made successful appends to the WAL and we then are unable to sync them, our current<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * semantic is to return error to the client that the appends failed but also to abort the current<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * context, usually the hosting server. We need to replay the WALs. &lt;br&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * TODO: Change this semantic. A roll of WAL may be sufficient as long as we have flagged client<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * that the append failed. &lt;br&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * TODO: replication may pick up these last edits though they have been marked as failed append<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * (Need to keep our own file lengths, not rely on HDFS).<a name="line.117"></a>
+<span class="sourceLineNo">118</span> */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>@InterfaceAudience.Private<a name="line.119"></a>
+<span class="sourceLineNo">120</span>public abstract class AbstractFSWAL&lt;W extends WriterBase&gt; implements WAL {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static final Logger LOG = LoggerFactory.getLogger(AbstractFSWAL.class);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static final String SURVIVED_TOO_LONG_SEC_KEY = "hbase.regionserver.wal.too.old.sec";<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private static final int SURVIVED_TOO_LONG_SEC_DEFAULT = 900;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  /** Don't log blocking regions more frequently than this. */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private static final long SURVIVED_TOO_LONG_LOG_INTERVAL_NS = TimeUnit.MINUTES.toNanos(5);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  protected static final String SLOW_SYNC_TIME_MS ="hbase.regionserver.wal.slowsync.ms";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  protected static final int DEFAULT_SLOW_SYNC_TIME_MS = 100; // in ms<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  protected static final String ROLL_ON_SYNC_TIME_MS = "hbase.regionserver.wal.roll.on.sync.ms";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  protected static final int DEFAULT_ROLL_ON_SYNC_TIME_MS = 10000; // in ms<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  protected static final String SLOW_SYNC_ROLL_THRESHOLD =<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    "hbase.regionserver.wal.slowsync.roll.threshold";<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_THRESHOLD = 100; // 100 slow sync warnings<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  protected static final String SLOW_SYNC_ROLL_INTERVAL_MS =<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    "hbase.regionserver.wal.slowsync.roll.interval.ms";<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS = 60 * 1000; // in ms, 1 minute<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  protected static final String WAL_SYNC_TIMEOUT_MS = "hbase.regionserver.wal.sync.timeout";<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  protected static final int DEFAULT_WAL_SYNC_TIMEOUT_MS = 5 * 60 * 1000; // in ms, 5min<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public static final String WAL_ROLL_MULTIPLIER = "hbase.regionserver.logroll.multiplier";<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String MAX_LOGS = "hbase.regionserver.maxlogs";<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public static final String RING_BUFFER_SLOT_COUNT =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    "hbase.regionserver.wal.disruptor.event.count";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * file system instance<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  protected final FileSystem fs;<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  /**<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * WAL directory, where all WAL files would be placed.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  protected final Path walDir;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * dir path where old logs are kept.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  protected final Path walArchiveDir;<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * Matches just those wal files that belong to this wal instance.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected final PathFilter ourFiles;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Prefix of a WAL file, usually the region server name it is hosted on.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  protected final String walFilePrefix;<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Suffix included on generated wal file names<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  protected final String walFileSuffix;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * Prefix used when checking for wal membership.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  protected final String prefixPathStr;<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  protected final WALCoprocessorHost coprocessorHost;<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * conf object<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  protected final Configuration conf;<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  protected final Abortable abortable;<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  /** Listeners that are called on WAL events. */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  protected final List&lt;WALActionsListener&gt; listeners = new CopyOnWriteArrayList&lt;&gt;();<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  /** Tracks the logs in the process of being closed. */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  protected final Map&lt;String, W&gt; inflightWALClosures = new ConcurrentHashMap&lt;&gt;();<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * Class that does accounting of sequenceids in WAL subsystem. Holds oldest outstanding sequence<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * id as yet not flushed as well as the most recent edit sequence id appended to the WAL. Has<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * facility for answering questions such as "Is it safe to GC a WAL?".<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  protected final SequenceIdAccounting sequenceIdAccounting = new SequenceIdAccounting();<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  /** The slow sync will be logged; the very slow sync will cause the WAL to be rolled. */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  protected final long slowSyncNs, rollOnSyncNs;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected final int slowSyncRollThreshold;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  protected final int slowSyncCheckInterval;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  protected final AtomicInteger slowSyncCount = new AtomicInteger();<a name="line.210"></a>
 <span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  // If &gt; than this size, roll the log.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  protected final long logrollsize;<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Block size to use writing files.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  protected final long blocksize;<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  /*<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * If more than this many logs, force flush of oldest region to oldest edit goes to disk. If too<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * many and we crash, then will take forever replaying. Keep the number of logs tidy.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  protected final int maxLogs;<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  protected final boolean useHsync;<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  /**<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * This lock makes sure only one log roll runs at a time. Should not be taken while any other lock<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * is held. We don't just use synchronized because that results in bogus and tedious findbugs<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * warning when it thinks synchronized controls writer thread safety. It is held when we are<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * actually rolling the log. It is checked when we are looking to see if we should roll the log or<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * not.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  protected final ReentrantLock rollWriterLock = new ReentrantLock(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  // The timestamp (in ms) when the log file was created.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected final AtomicLong filenum = new AtomicLong(-1);<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // Number of transactions in the current Wal.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  protected final AtomicInteger numEntries = new AtomicInteger(0);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The highest known outstanding unsync'd WALEdit transaction id. Usually, we use a queue to pass<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * WALEdit to background consumer thread, and the transaction id is the sequence number of the<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * corresponding entry in queue.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  protected volatile long highestUnsyncedTxid = -1;<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * Updated to the transaction id of the last successful sync call. This can be less than<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * {@link #highestUnsyncedTxid} for case where we have an append where a sync has not yet come in<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * for it.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  protected final AtomicLong highestSyncedTxid = new AtomicLong(0);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * The total size of wal<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  protected final AtomicLong totalLogSize = new AtomicLong(0);<a name="line.260"></a>
+<span class="sourceLineNo">212</span>  private final long walSyncTimeoutNs;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  private final long walTooOldNs;<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // If &gt; than this size, roll the log.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  protected final long logrollsize;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Block size to use writing files.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  protected final long blocksize;<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /*<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * If more than this many logs, force flush of oldest region to oldest edit goes to disk. If too<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * many and we crash, then will take forever replaying. Keep the number of logs tidy.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  protected final int maxLogs;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>  protected final boolean useHsync;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * This lock makes sure only one log roll runs at a time. Should not be taken while any other lock<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * is held. We don't just use synchronized because that results in bogus and tedious findbugs<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * warning when it thinks synchronized controls writer thread safety. It is held when we are<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * actually rolling the log. It is checked when we are looking to see if we should roll the log or<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * not.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  protected final ReentrantLock rollWriterLock = new ReentrantLock(true);<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  // The timestamp (in ms) when the log file was created.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  protected final AtomicLong filenum = new AtomicLong(-1);<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // Number of transactions in the current Wal.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  protected final AtomicInteger numEntries = new AtomicInteger(0);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * The highest known outstanding unsync'd WALEdit transaction id. Usually, we use a queue to pass<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * WALEdit to background consumer thread, and the transaction id is the sequence number of the<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * corresponding entry in queue.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  protected volatile long highestUnsyncedTxid = -1;<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * Updated to the transaction id of the last successful sync call. This can be less than<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * {@link #highestUnsyncedTxid} for case where we have an append where a sync has not yet come in<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * for it.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  protected final AtomicLong highestSyncedTxid = new AtomicLong(0);<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
 <span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * Current log file.<a name="line.262"></a>
+<span class="sourceLineNo">262</span>   * The total size of wal<a name="line.262"></a>
 <span class="sourceLineNo">263</span>   */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  volatile W writer;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  // Last time to check low replication on hlog's pipeline<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private volatile long lastTimeCheckLowReplication = EnvironmentEdgeManager.currentTime();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  // Last time we asked to roll the log due to a slow sync<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private volatile long lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  protected volatile boolean closed = false;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  protected final AtomicBoolean shutdown = new AtomicBoolean(false);<a name="line.274"></a>
+<span class="sourceLineNo">264</span>  protected final AtomicLong totalLogSize = new AtomicLong(0);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * Current log file.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  volatile W writer;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  // Last time to check low replication on hlog's pipeline<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private volatile long lastTimeCheckLowReplication = EnvironmentEdgeManager.currentTime();<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  // Last time we asked to roll the log due to a slow sync<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  private volatile long lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.274"></a>
 <span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private long nextLogTooOldNs = System.nanoTime();<a name="line.276"></a>
+<span class="sourceLineNo">276</span>  protected volatile boolean closed = false;<a name="line.276"></a>
 <span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * WAL Comparator; it compares the timestamp (log filenum), present in the log file name. Throws<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * an IllegalArgumentException if used to compare paths from different wals.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  final Comparator&lt;Path&gt; LOG_NAME_COMPARATOR =<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    (o1, o2) -&gt; Long.compare(getFileNumFromFileName(o1), getFileNumFromFileName(o2));<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private static final class WalProps {<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>     * Map the encoded region name to the highest sequence id.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * &lt;p/&gt;Contains all the regions it has an entry for.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    public final Map&lt;byte[], Long&gt; encodedName2HighestSequenceId;<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>     * The log file size. Notice that the size may not be accurate if we do asynchronous close in<a name="line.294"></a>
-<span class="sourceLineNo">295</span>     * sub classes.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>     */<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public final long logSize;<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    /**<a name="line.299"></a>
-<span class="sourceLineNo">300</span>     * The nanoTime of the log rolling, used to determine the time interval that has passed since.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>     */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    public final long rollTimeNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    public WalProps(Map&lt;byte[], Long&gt; encodedName2HighestSequenceId, long logSize) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.encodedName2HighestSequenceId = encodedName2HighestSequenceId;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.logSize = logSize;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.rollTimeNs = System.nanoTime();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * Map of WAL log file to properties. The map is sorted by the log file creation timestamp<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * (contained in the log file name).<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  protected ConcurrentNavigableMap&lt;Path, WalProps&gt; walFile2Props =<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    new ConcurrentSkipListMap&lt;&gt;(LOG_NAME_COMPARATOR);<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * Map of {@link SyncFuture}s owned by Thread objects. Used so we reuse SyncFutures.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * Thread local is used so JVM can GC the terminated thread for us. See HBASE-21228<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final ThreadLocal&lt;SyncFuture&gt; cachedSyncFutures;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * The class name of the runtime implementation, used as prefix for logging/tracing.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * &lt;p&gt;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * Performance testing shows getClass().getSimpleName() might be a bottleneck so we store it here,<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * refer to HBASE-17676 for more details<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * &lt;/p&gt;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  protected final String implClassName;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  protected final AtomicBoolean rollRequested = new AtomicBoolean(false);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final ExecutorService logArchiveExecutor = Executors.newSingleThreadExecutor(<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    new ThreadFactoryBuilder().setDaemon(true).setNameFormat("WAL-Archiver-%d").build());<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private final int archiveRetries;<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public long getFilenum() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    return this.filenum.get();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">278</span>  protected final AtomicBoolean shutdown = new AtomicBoolean(false);<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  private long nextLogTooOldNs = System.nanoTime();<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * WAL Comparator; it compares the timestamp (log filenum), present in the log file name. Throws<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * an IllegalArgumentException if used to compare paths from different wals.<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  final Comparator&lt;Path&gt; LOG_NAME_COMPARATOR =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    (o1, o2) -&gt; Long.compare(getFileNumFromFileName(o1), getFileNumFromFileName(o2));<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  private static final class WalProps {<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>    /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>     * Map the encoded region name to the highest sequence id.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>     * &lt;p/&gt;Contains all the regions it has an entry for.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>     */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    public final Map&lt;byte[], Long&gt; encodedName2HighestSequenceId;<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * The log file size. Notice that the size may not be accurate if we do asynchronous close in<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     * sub classes.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public final long logSize;<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * The nanoTime of the log rolling, used to determine the time interval that has passed since.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public final long rollTimeNs;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    public WalProps(Map&lt;byte[], Long&gt; encodedName2HighestSequenceId, long logSize) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      this.encodedName2HighestSequenceId = encodedName2HighestSequenceId;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      this.logSize = logSize;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      this.rollTimeNs = System.nanoTime();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * Map of WAL log file to properties. The map is sorted by the log file creation timestamp<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * (contained in the log file name).<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  protected ConcurrentNavigableMap&lt;Path, WalProps&gt; walFile2Props =<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    new ConcurrentSkipListMap&lt;&gt;(LOG_NAME_COMPARATOR);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>  /**<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Map of {@link SyncFuture}s owned by Thread objects. Used so we reuse SyncFutures.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * Thread local is used so JVM can GC the terminated thread for us. See HBASE-21228<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * &lt;p&gt;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private final ThreadLocal&lt;SyncFuture&gt; cachedSyncFutures;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * The class name of the runtime implementation, used as prefix for logging/tracing.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * &lt;p&gt;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Performance testing shows getClass().getSimpleName() might be a bottleneck so we store it here,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * refer to HBASE-17676 for more details<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * &lt;/p&gt;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  protected final String implClassName;<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  protected final AtomicBoolean rollRequested = new AtomicBoolean(false);<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  private final ExecutorService logArchiveExecutor = Executors.newSingleThreadExecutor(<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    new ThreadFactoryBuilder().setDaemon(true).setNameFormat("WAL-Archiver-%d").build());<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private final int archiveRetries;<a name="line.343"></a>
 <span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * A log file has a creation timestamp (in ms) in its file name ({@link #filenum}. This helper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * method returns the creation timestamp from a given log file. It extracts the timestamp assuming<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * the filename is created with the {@link #computeFilename(long filenum)} method.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return timestamp, as in the log file name.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  protected long getFileNumFromFileName(Path fileName) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    checkNotNull(fileName, "file name can't be null");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    if (!ourFiles.accept(fileName)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      throw new IllegalArgumentException(<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          "The log file " + fileName + " doesn't belong to this WAL. (" + toString() + ")");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    final String fileNameString = fileName.toString();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    String chompedPath = fileNameString.substring(prefixPathStr.length(),<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      (fileNameString.length() - walFileSuffix.length()));<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return Long.parseLong(chompedPath);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private int calculateMaxLogFiles(Configuration conf, long logRollSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    Pair&lt;Long, MemoryType&gt; globalMemstoreSize = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return (int) ((globalMemstoreSize.getFirst() * 2) / logRollSize);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  // must be power of 2<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  protected final int getPreallocatedEventCount() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    // Preallocate objects to use on the ring buffer. The way that appends and syncs work, we will<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    // be stuck and make no progress if the buffer is filled with appends only and there is no<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    // sync. If no sync, then the handlers will be outstanding just waiting on sync completion<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // before they return.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    int preallocatedEventCount =<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      this.conf.getInt(RING_BUFFER_SLOT_COUNT, 1024 * 16);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    checkArgument(preallocatedEventCount &gt;= 0, RING_BUFFER_SLOT_COUNT + " must &gt; 0");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    int floor = Integer.highestOneBit(preallocatedEventCount);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (floor == preallocatedEventCount) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      return floor;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // max capacity is 1 &lt;&lt; 30<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    if (floor &gt;= 1 &lt;&lt; 29) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      return 1 &lt;&lt; 30;<a name="line.383"></a>
+<span class="sourceLineNo">345</span>  public long getFilenum() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return this.filenum.get();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * A log file has a creation timestamp (in ms) in its file name ({@link #filenum}. This helper<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * method returns the creation timestamp from a given log file. It extracts the timestamp assuming<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * the filename is created with the {@link #computeFilename(long filenum)} method.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * @return timestamp, as in the log file name.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  protected long getFileNumFromFileName(Path fileName) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    checkNotNull(fileName, "file name can't be null");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (!ourFiles.accept(fileName)) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      throw new IllegalArgumentException(<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          "The log file " + fileName + " doesn't belong to this WAL. (" + toString() + ")");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    final String fileNameString = fileName.toString();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    String chompedPath = fileNameString.substring(prefixPathStr.length(),<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      (fileNameString.length() - walFileSuffix.length()));<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return Long.parseLong(chompedPath);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  private int calculateMaxLogFiles(Configuration conf, long logRollSize) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    Pair&lt;Long, MemoryType&gt; globalMemstoreSize = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (int) ((globalMemstoreSize.getFirst() * 2) / logRollSize);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  // must be power of 2<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  protected final int getPreallocatedEventCount() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Preallocate objects to use on the ring buffer. The way that appends and syncs work, we will<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    // be stuck and make no progress if the buffer is filled with appends only and there is no<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    // sync. If no sync, then the handlers will be outstanding just waiting on sync completion<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // before they return.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    int preallocatedEventCount =<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      this.conf.getInt(RING_BUFFER_SLOT_COUNT, 1024 * 16);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    checkArgument(preallocatedEventCount &gt;= 0, RING_BUFFER_SLOT_COUNT + " must &gt; 0");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    int floor = Integer.highestOneBit(preallocatedEventCount);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (floor == preallocatedEventCount) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return floor;<a name="line.383"></a>
 <span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return floor &lt;&lt; 1;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  protected AbstractFSWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      final String archiveDir, final Configuration conf, final List&lt;WALActionsListener&gt; listeners,<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      throws FailedLogCloseException, IOException {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    this(fs, null, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  protected AbstractFSWAL(final FileSystem fs, final Abortable abortable, final Path rootDir,<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      final String logDir, final String archiveDir, final Configuration conf,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      final List&lt;WALActionsListener&gt; listeners, final boolean failIfWALExists, final String prefix,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      final String suffix)<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      throws FailedLogCloseException, IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.fs = fs;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.walDir = new Path(rootDir, logDir);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    this.walArchiveDir = new Path(rootDir, archiveDir);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    this.conf = conf;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    this.abortable = abortable;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>    if (!fs.exists(walDir) &amp;&amp; !fs.mkdirs(walDir)) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      throw new IOException("Unable to mkdir " + walDir);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">385</span>    // max capacity is 1 &lt;&lt; 30<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    if (floor &gt;= 1 &lt;&lt; 29) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return 1 &lt;&lt; 30;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return floor &lt;&lt; 1;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  protected AbstractFSWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      final String archiveDir, final Configuration conf, final List&lt;WALActionsListener&gt; listeners,<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      throws FailedLogCloseException, IOException {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    this(fs, null, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected AbstractFSWAL(final FileSystem fs, final Abortable abortable, final Path rootDir,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      final String logDir, final String archiveDir, final Configuration conf,<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      final List&lt;WALActionsListener&gt; listeners, final boolean failIfWALExists, final String prefix,<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      final String suffix)<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      throws FailedLogCloseException, IOException {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    this.fs = fs;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    this.walDir = new Path(rootDir, logDir);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    this.walArchiveDir = new Path(rootDir, archiveDir);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    this.conf = conf;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    this.abortable = abortable;<a name="line.408"></a>
 <span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (!fs.exists(this.walArchiveDir)) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      if (!fs.mkdirs(this.walArchiveDir)) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throw new IOException("Unable to mkdir " + this.walArchiveDir);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // If prefix is null||empty then just name it wal<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    this.walFilePrefix =<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      prefix == null || prefix.isEmpty() ? "wal" : URLEncoder.encode(prefix, "UTF8");<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // we only correctly differentiate suffices when numeric ones start with '.'<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    if (suffix != null &amp;&amp; !(suffix.isEmpty()) &amp;&amp; !(suffix.startsWith(WAL_FILE_NAME_DELIMITER))) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throw new IllegalArgumentException("WAL suffix must start with '" + WAL_FILE_NAME_DELIMITER +<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        "' but instead was '" + suffix + "'");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // Now that it exists, set the storage policy for the entire directory of wal files related to<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // this FSHLog instance<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    String storagePolicy =<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    CommonFSUtils.setStoragePolicy(fs, this.walDir, storagePolicy);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    this.walFileSuffix = (suffix == null) ? "" : URLEncoder.encode(suffix, "UTF8");<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    this.prefixPathStr = new Path(walDir, walFilePrefix + WAL_FILE_NAME_DELIMITER).toString();<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    this.ourFiles = new PathFilter() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      public boolean accept(final Path fileName) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // The path should start with dir/&lt;prefix&gt; and end with our suffix<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        final String fileNameString = fileName.toString();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        if (!fileNameString.startsWith(prefixPathStr)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          return false;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        if (walFileSuffix.isEmpty()) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          // in the case of the null suffix, we need to ensure the filename ends with a timestamp.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          return org.apache.commons.lang3.StringUtils<a name="line.442"></a>
-<span class="sourceLineNo">443</span>              .isNumeric(fileNameString.substring(prefixPathStr.length()));<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        } else if (!fileNameString.endsWith(walFileSuffix)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          return false;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        return true;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    };<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (failIfWALExists) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      final FileStatus[] walFiles = CommonFSUtils.listStatus(fs, walDir, ourFiles);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      if (null != walFiles &amp;&amp; 0 != walFiles.length) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        throw new IOException("Target WAL already exists within directory " + walDir);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // Register listeners. TODO: Should this exist anymore? We have CPs?<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (listeners != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      for (WALActionsListener i : listeners) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        registerWALActionsListener(i);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    this.coprocessorHost = new WALCoprocessorHost(this, conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>    // Schedule a WAL roll when the WAL is 50% of the HDFS block size. Scheduling at 50% of block<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // size should make it so WAL rolls before we get to the end-of-block (Block transitions cost<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    // some latency). In hbase-1 we did this differently. We scheduled a roll when we hit 95% of<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    // the block size but experience from the field has it that this was not enough time for the<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // roll to happen before end-of-block. So the new accounting makes WALs of about the same<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    // size as those made in hbase-1 (to prevent surprise), we now have default block size as<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    // 2 times the DFS default: i.e. 2 * DFS default block size rolling at 50% full will generally<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // make similar size logs to 1 * DFS default block size rolling at 95% full. See HBASE-19148.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    this.blocksize = WALUtil.getWALBlockSize(this.conf, this.fs, this.walDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    float multiplier = conf.getFloat(WAL_ROLL_MULTIPLIER, 0.5f);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    this.logrollsize = (long) (this.blocksize * multiplier);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    this.maxLogs = conf.getInt(MAX_LOGS, Math.max(32, calculateMaxLogFiles(conf, logrollsize)));<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>    LOG.info("WAL configuration: blocksize=" + StringUtils.byteDesc(blocksize) + ", rollsize=" +<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      StringUtils.byteDesc(this.logrollsize) + ", prefix=" + this.walFilePrefix + ", suffix=" +<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      walFileSuffix + ", logDir=" + this.walDir + ", archiveDir=" + this.walArchiveDir +<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      ", maxLogs=" + this.maxLogs);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    this.slowSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(SLOW_SYNC_TIME_MS,<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      DEFAULT_SLOW_SYNC_TIME_MS));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    this.rollOnSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(ROLL_ON_SYNC_TIME_MS,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      DEFAULT_ROLL_ON_SYNC_TIME_MS));<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.slowSyncRollThreshold = conf.getInt(SLOW_SYNC_ROLL_THRESHOLD,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      DEFAULT_SLOW_SYNC_ROLL_THRESHOLD);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    this.slowSyncCheckInterval = conf.getInt(SLOW_SYNC_ROLL_INTERVAL_MS,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    this.walSyncTimeoutNs = TimeUnit.MILLISECONDS.toNanos(conf.getLong(WAL_SYNC_TIMEOUT_MS,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      DEFAULT_WAL_SYNC_TIMEOUT_MS));<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    this.cachedSyncFutures = new ThreadLocal&lt;SyncFuture&gt;() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      protected SyncFuture initialValue() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return new SyncFuture();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    };<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    this.implClassName = getClass().getSimpleName();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    this.walTooOldNs = TimeUnit.SECONDS.toNanos(conf.getInt(<a name="line.500"></a>
-<span class="sourceLineNo">501</span>            SURVIVED_TOO_LONG_SEC_KEY, SURVIVED_TOO_LONG_SEC_DEFAULT));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    this.useHsync = conf.getBoolean(HRegion.WAL_HSYNC_CONF_KEY, HRegion.DEFAULT_WAL_HSYNC);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    archiveRetries = this.conf.getInt("hbase.regionserver.walroll.archive.retries", 0);<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>  /**<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * Used to initialize the WAL. Usually just call rollWriter to create the first log writer.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   */<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  public void init() throws IOException {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    rollWriter();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @Override<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public void registerWALActionsListener(WALActionsListener listener) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    this.listeners.add(listener);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  @Override<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  public boolean unregisterWALActionsListener(WALActionsListener listener) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.listeners.remove(listener);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  public WALCoprocessorHost getCoprocessorHost() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    return coprocessorHost;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public Long startCacheFlush(byte[] encodedRegionName, Set&lt;byte[]&gt; families) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, families);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  public Long startCacheFlush(byte[] encodedRegionName, Map&lt;byte[], Long&gt; familyToSeq) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, familyToSeq);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  @Override<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  public void completeCacheFlush(byte[] encodedRegionName, long maxFlushedSeqId) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    this.sequenceIdAccounting.completeCacheFlush(encodedRegionName, maxFlushedSeqId);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  @Override<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public void abortCacheFlush(byte[] encodedRegionName) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    this.sequenceIdAccounting.abortCacheFlush(encodedRegionName);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    // Used by tests. Deprecated as too subtle for general usage.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>  @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // This method is used by tests and for figuring if we should flush or not because our<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // sequenceids are too old. It is also used reporting the master our oldest sequenceid for use<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // figuring what edits can be skipped during log recovery. getEarliestMemStoreSequenceId<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    // from this.sequenceIdAccounting is looking first in flushingOldestStoreSequenceIds, the<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // currently flushing sequence ids, and if anything found there, it is returning these. This is<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    // the right thing to do for the reporting oldest sequenceids to master; we won't skip edits if<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // we crash during the flush. For figuring what to flush, we might get requeued if our sequence<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    // id is old even though we are currently flushing. This may mean we do too much flushing.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName, familyName);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  }<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>  @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  public Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriter() throws FailedLogCloseException, IOException {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return rollWriter(false);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  public final void sync() throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    sync(useHsync);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public final void sync(long txid) throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    sync(txid, useHsync);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public final void sync(boolean forceSync) throws IOException {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    TraceUtil.trace(() -&gt; {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      doSync(forceSync);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return null;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  public final void sync(long txid, boolean forceSync) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    TraceUtil.trace(() -&gt; {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      doSync(txid, forceSync);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return null;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  protected abstract void doSync(boolean forceSync) throws IOException;<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  protected abstract void doSync(long txid, boolean forceSync) throws IOException;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * This is a convenience method that computes a new filename with a given file-number.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param filenum to use<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @return Path<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   */<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  protected Path computeFilename(final long filenum) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (filenum &lt; 0) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      throw new RuntimeException("WAL file number can't be &lt; 0");<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    String child = walFilePrefix + WAL_FILE_NAME_DELIMITER + filenum + walFileSuffix;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    return new Path(walDir, child);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  /**<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * This is a convenience method that computes a new filename with a given using the current WAL<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * file-number<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * @return Path<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   */<a name="line.619"></a>
-<span class="sourceLineNo">620</span>  public Path getCurrentFileName() {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    return computeFilename(this.filenum.get());<a name="line.621"></a>
-<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>  /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * retrieve the next path to use for writing. Increments the internal filenum.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  private Path getNewPath() throws IOException {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    this.filenum.set(System.currentTimeMillis());<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Path newPath = getCurrentFileName();<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    while (fs.exists(newPath)) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      this.filenum.incrementAndGet();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      newPath = getCurrentFileName();<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return newPath;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  Path getOldPath() {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    long currentFilenum = this.filenum.get();<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    Path oldPath = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    if (currentFilenum &gt; 0) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      // ComputeFilename will take care of meta wal filename<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      oldPath = computeFilename(currentFilenum);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    } // I presume if currentFilenum is &lt;= 0, this is first file and null for oldPath if fine?<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return oldPath;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Tell listeners about pre log roll.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  private void tellListenersAboutPreLogRoll(final Path oldPath, final Path newPath)<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      throws IOException {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    coprocessorHost.preWALRoll(oldPath, newPath);<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>    if (!this.listeners.isEmpty()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      for (WALActionsListener i : this.listeners) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        i.preLogRoll(oldPath, newPath);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      }<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Tell listeners about post log roll.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  private void tellListenersAboutPostLogRoll(final Path oldPath, final Path newPath)<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      throws IOException {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (!this.listeners.isEmpty()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      for (WALActionsListener i : this.listeners) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        i.postLogRoll(oldPath, newPath);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    coprocessorHost.postWALRoll(oldPath, newPath);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  // public only until class moves to o.a.h.h.wal<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  /** @return the number of rolled log files */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  public int getNumRolledLogFiles() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    return walFile2Props.size();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>  }<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // public only until class moves to o.a.h.h.wal<a name="line.681"></a>
-<span class="sourceLineNo">682</span>  /** @return the number of log files in use */<a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public int getNumLogFiles() {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // +1 for current use log<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return getNumRolledLogFiles() + 1;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * If the number of un-archived WAL files ('live' WALs) is greater than maximum allowed,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * check the first (oldest) WAL, and return those regions which should be flushed so that<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * it can be let-go/'archived'.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @return stores of regions (encodedRegionNames) to flush in order to archive oldest WAL file.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  Map&lt;byte[], List&lt;byte[]&gt;&gt; findRegionsToForceFlush() throws IOException {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    Map&lt;byte[], List&lt;byte[]&gt;&gt; regions = null;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    int logCount = getNumRolledLogFiles();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (logCount &gt; this.maxLogs &amp;&amp; logCount &gt; 0) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      Map.Entry&lt;Path, WalProps&gt; firstWALEntry = this.walFile2Props.firstEntry();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      regions =<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        this.sequenceIdAccounting.findLower(firstWALEntry.getValue().encodedName2HighestSequenceId);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    }<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    if (regions != null) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      List&lt;String&gt; listForPrint = new ArrayList&lt;&gt;();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      for (Map.Entry&lt;byte[], List&lt;byte[]&gt;&gt; r : regions.entrySet()) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        StringBuilder families = new StringBuilder();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        for (int i = 0; i &lt; r.getValue().size(); i++) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          if (i &gt; 0) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>            families.append(",");<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          families.append(Bytes.toString(r.getValue().get(i)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        listForPrint.add(Bytes.toStringBinary(r.getKey()) + "[" + families.toString() + "]");<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      LOG.info("Too many WALs; count=" + logCount + ", max=" + this.maxLogs +<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        "; forcing (partial) flush of " + regions.size() + " region(s): " +<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        StringUtils.join(",", listForPrint));<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    return regions;<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  /**<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * Archive old logs. A WAL is eligible for archiving if all its WALEdits have been flushed.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   */<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  private void cleanOldLogs() throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    List&lt;Pair&lt;Path, Long&gt;&gt; logsToArchive = null;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    long now = System.nanoTime();<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    boolean mayLogTooOld = nextLogTooOldNs &lt;= now;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ArrayList&lt;byte[]&gt; regionsBlockingWal = null;<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    // For each log file, look at its Map of regions to highest sequence id; if all sequence ids<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // are older than what is currently in memory, the WAL can be GC'd.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    for (Map.Entry&lt;Path, WalProps&gt; e : this.walFile2Props.entrySet()) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      Path log = e.getKey();<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      ArrayList&lt;byte[]&gt; regionsBlockingThisWal = null;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      long ageNs = now - e.getValue().rollTimeNs;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      if (ageNs &gt; walTooOldNs) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        if (mayLogTooOld &amp;&amp; regionsBlockingWal == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          regionsBlockingWal = new ArrayList&lt;&gt;();<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        regionsBlockingThisWal = regionsBlockingWal;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Map&lt;byte[], Long&gt; sequenceNums = e.getValue().encodedName2HighestSequenceId;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      if (this.sequenceIdAccounting.areAllLower(sequenceNums, regionsBlockingThisWal)) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        if (logsToArchive == null) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>          logsToArchive = new ArrayList&lt;&gt;();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        logsToArchive.add(Pair.newPair(log, e.getValue().logSize));<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isTraceEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.trace("WAL file ready for archiving " + log);<a name="line.748"></a>
+<span class="sourceLineNo">410</span>    if (!fs.exists(walDir) &amp;&amp; !fs.mkdirs(walDir)) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      throw new IOException("Unable to mkdir " + walDir);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (!fs.exists(this.walArchiveDir)) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      if (!fs.mkdirs(this.walArchiveDir)) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throw new IOException("Unable to mkdir " + this.walArchiveDir);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    // If prefix is null||empty then just name it wal<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    this.walFilePrefix =<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      prefix == null || prefix.isEmpty() ? "wal" : URLEncoder.encode(prefix, "UTF8");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    // we only correctly differentiate suffices when numeric ones start with '.'<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    if (suffix != null &amp;&amp; !(suffix.isEmpty()) &amp;&amp; !(suffix.startsWith(WAL_FILE_NAME_DELIMITER))) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      throw new IllegalArgumentException("WAL suffix must start with '" + WAL_FILE_NAME_DELIMITER +<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        "' but instead was '" + suffix + "'");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Now that it exists, set the storage policy for the entire directory of wal files related to<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    // this FSHLog instance<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    String storagePolicy =<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    CommonFSUtils.setStoragePolicy(fs, this.walDir, storagePolicy);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    this.walFileSuffix = (suffix == null) ? "" : URLEncoder.encode(suffix, "UTF8");<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    this.prefixPathStr = new Path(walDir, walFilePrefix + WAL_FILE_NAME_DELIMITER).toString();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    this.ourFiles = new PathFilter() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      @Override<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      public boolean accept(final Path fileName) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        // The path should start with dir/&lt;prefix&gt; and end with our suffix<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        final String fileNameString = fileName.toString();<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        if (!fileNameString.startsWith(prefixPathStr)) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>          return false;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        if (walFileSuffix.isEmpty()) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          // in the case of the null suffix, we need to ensure the filename ends with a timestamp.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          return org.apache.commons.lang3.StringUtils<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              .isNumeric(fileNameString.substring(prefixPathStr.length()));<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        } else if (!fileNameString.endsWith(walFileSuffix)) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          return false;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        return true;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    };<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>    if (failIfWALExists) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      final FileStatus[] walFiles = CommonFSUtils.listStatus(fs, walDir, ourFiles);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      if (null != walFiles &amp;&amp; 0 != walFiles.length) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        throw new IOException("Target WAL already exists within directory " + walDir);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    // Register listeners. TODO: Should this exist anymore? We have CPs?<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    if (listeners != null) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      for (WALActionsListener i : listeners) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        registerWALActionsListener(i);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    this.coprocessorHost = new WALCoprocessorHost(this, conf);<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>    // Schedule a WAL roll when the WAL is 50% of the HDFS block size. Scheduling at 50% of block<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    // size should make it so WAL rolls before we get to the end-of-block (Block transitions cost<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    // some latency). In hbase-1 we did this differently. We scheduled a roll when we hit 95% of<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    // the block size but experience from the field has it that this was not enough time for the<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    // roll to happen before end-of-block. So the new accounting makes WALs of about the same<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    // size as those made in hbase-1 (to prevent surprise), we now have default block size as<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    // 2 times the DFS default: i.e. 2 * DFS default block size rolling at 50% full will generally<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    // make similar size logs to 1 * DFS default block size rolling at 95% full. See HBASE-19148.<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    this.blocksize = WALUtil.getWALBlockSize(this.conf, this.fs, this.walDir);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    float multiplier = conf.getFloat(WAL_ROLL_MULTIPLIER, 0.5f);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    this.logrollsize = (long) (this.blocksize * multiplier);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    this.maxLogs = conf.getInt(MAX_LOGS, Math.max(32, calculateMaxLogFiles(conf, logrollsize)));<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("WAL configuration: blocksize=" + StringUtils.byteDesc(blocksize) + ", rollsize=" +<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      StringUtils.byteDesc(this.logrollsize) + ", prefix=" + this.walFilePrefix + ", suffix=" +<a name="line.484"></a>
+<span class="sourceLineNo">485</span>      walFileSuffix + ", logDir=" + this.walDir + ", archiveDir=" + this.walArchiveDir +<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      ", maxLogs=" + this.maxLogs);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    this.slowSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(SLOW_SYNC_TIME_MS,<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      DEFAULT_SLOW_SYNC_TIME_MS));<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    this.rollOnSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(ROLL_ON_SYNC_TIME_MS,<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      DEFAULT_ROLL_ON_SYNC_TIME_MS));<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    this.slowSyncRollThreshold = conf.getInt(SLOW_SYNC_ROLL_THRESHOLD,<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      DEFAULT_SLOW_SYNC_ROLL_THRESHOLD);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    this.slowSyncCheckInterval = conf.getInt(SLOW_SYNC_ROLL_INTERVAL_MS,<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    this.walSyncTimeoutNs = TimeUnit.MILLISECONDS.toNanos(conf.getLong(WAL_SYNC_TIMEOUT_MS,<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      DEFAULT_WAL_SYNC_TIMEOUT_MS));<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    this.cachedSyncFutures = new ThreadLocal&lt;SyncFuture&gt;() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      @Override<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      protected SyncFuture initialValue() {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        return new SyncFuture();<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    };<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    this.implClassName = getClass().getSimpleName();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    this.walTooOldNs = TimeUnit.SECONDS.toNanos(conf.getInt(<a name="line.504"></a>
+<span class="sourceLineNo">505</span>            SURVIVED_TOO_LONG_SEC_KEY, SURVIVED_TOO_LONG_SEC_DEFAULT));<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    this.useHsync = conf.getBoolean(HRegion.WAL_HSYNC_CONF_KEY, HRegion.DEFAULT_WAL_HSYNC);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    archiveRetries = this.conf.getInt("hbase.regionserver.walroll.archive.retries", 0);<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * Used to initialize the WAL. Usually just call rollWriter to create the first log writer.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  public void init() throws IOException {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    rollWriter();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  @Override<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public void registerWALActionsListener(WALActionsListener listener) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    this.listeners.add(listener);<a name="line.520"></a>
+<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
+<span class="sourceLineNo">524</span>  public boolean unregisterWALActionsListener(WALActionsListener listener) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return this.listeners.remove(listener);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @Override<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  public WALCoprocessorHost getCoprocessorHost() {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    return coprocessorHost;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>  @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Long startCacheFlush(byte[] encodedRegionName, Set&lt;byte[]&gt; families) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, families);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  @Override<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Long startCacheFlush(byte[] encodedRegionName, Map&lt;byte[], Long&gt; familyToSeq) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, familyToSeq);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>  @Override<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  public void completeCacheFlush(byte[] encodedRegionName, long maxFlushedSeqId) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    this.sequenceIdAccounting.completeCacheFlush(encodedRegionName, maxFlushedSeqId);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>  }<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>  @Override<a name="line.548"></a>
+<span class="sourceLineNo">549</span>  public void abortCacheFlush(byte[] encodedRegionName) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    this.sequenceIdAccounting.abortCacheFlush(encodedRegionName);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>  @Override<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // Used by tests. Deprecated as too subtle for general usage.<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>  @Override<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // This method is used by tests and for figuring if we should flush or not because our<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    // sequenceids are too old. It is also used reporting the master our oldest sequenceid for use<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    // figuring what edits can be skipped during log recovery. getEarliestMemStoreSequenceId<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    // from this.sequenceIdAccounting is looking first in flushingOldestStoreSequenceIds, the<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    // currently flushing sequence ids, and if anything found there, it is returning these. This is<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    // the right thing to do for the reporting oldest sequenceids to master; we won't skip edits if<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // we crash during the flush. For figuring what to flush, we might get requeued if our sequence<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    // id is old even though we are currently flushing. This may mean we do too much flushing.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName, familyName);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span>  @Override<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  public Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriter() throws FailedLogCloseException, IOException {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    return rollWriter(false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span>  @Override<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  public final void sync() throws IOException {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    sync(useHsync);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>  @Override<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  public final void sync(long txid) throws IOException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    sync(txid, useHsync);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  @Override<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  public final void sync(boolean forceSync) throws IOException {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    TraceUtil.trace(() -&gt; {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      doSync(forceSync);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      return null;<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>  @Override<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public final void sync(long txid, boolean forceSync) throws IOException {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    TraceUtil.trace(() -&gt; {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      doSync(txid, forceSync);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      return null;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.600"></a>
+<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>  protected abstract void doSync(boolean forceSync) throws IOException;<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  protected abstract void doSync(long txid, boolean forceSync) throws IOException;<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * This is a convenience method that computes a new filename with a given file-number.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @param filenum to use<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * @return Path<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   */<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  protected Path computeFilename(final long filenum) {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    if (filenum &lt; 0) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      throw new RuntimeException("WAL file number can't be &lt; 0");<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    String child = walFilePrefix + WAL_FILE_NAME_DELIMITER + filenum + walFileSuffix;<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return new Path(walDir, child);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * This is a convenience method that computes a new filename with a given using the current WAL<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * file-number<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @return Path<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public Path getCurrentFileName() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return computeFilename(this.filenum.get());<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * retrieve the next path to use for writing. Increments the internal filenum.<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
+<span class="sourceLineNo">631</span>  private Path getNewPath() throws IOException {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    this.filenum.set(System.currentTimeMillis());<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    Path newPath = getCurrentFileName();<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    while (fs.exists(newPath)) {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      this.filenum.incrementAndGet();<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      newPath = getCurrentFileName();<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    return newPath;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  Path getOldPath() {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    long currentFilenum = this.filenum.get();<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    Path oldPath = null;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    if (currentFilenum &gt; 0) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // ComputeFilename will take care of meta wal filename<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      oldPath = computeFilename(currentFilenum);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    } // I presume if currentFilenum is &lt;= 0, this is first file and null for oldPath if fine?<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return oldPath;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * Tell listeners about pre log roll.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   */<a name="line.653"></a>
+<span class="sourceLineNo">654</span>  private void tellListenersAboutPreLogRoll(final Path oldPath, final Path newPath)<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      throws IOException {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    coprocessorHost.preWALRoll(oldPath, newPath);<a name="line.656"></a>
+<span class="sourceLineNo">657</span><a name="line.657"></a>
+<span class="sourceLineNo">658</span>    if (!this.listeners.isEmpty()) {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      for (WALActionsListener i : this.listeners) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        i.preLogRoll(oldPath, newPath);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>  /**<a name="line.665"></a>
+<span class="sourceLineNo">666</span>   * Tell listeners about post log roll.<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   */<a name="line.667"></a>
+<span class="sourceLineNo">668</span>  private void tellListenersAboutPostLogRoll(final Path oldPath, final Path newPath)<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>    if (!this.listeners.isEmpty()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      for (WALActionsListener i : this.listeners) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        i.postLogRoll(oldPath, newPath);<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      }<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
+<span class="sourceLineNo">675</span><a name="line.675"></a>
+<span class="sourceLineNo">676</span>    coprocessorHost.postWALRoll(oldPath, newPath);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  // public only until class moves to o.a.h.h.wal<a name="line.679"></a>
+<span class="sourceLineNo">680</span>  /** @return the number of rolled log files */<a name="line.680"></a>
+<span class="sourceLineNo">681</span>  public int getNumRolledLogFiles() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    return walFile2Props.size();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  }<a name="line.683"></a>
+<span class="sourceLineNo">684</span><a name="line.684"></a>
+<span class="sourceLineNo">685</span>  // public only until class moves to o.a.h.h.wal<a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /** @return the number of log files in use */<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  public int getNumLogFiles() {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>    // +1 for current use log<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    return getNumRolledLogFiles() + 1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  /**<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * If the number of un-archived WAL files ('live' WALs) is greater than maximum allowed,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   * check the first (oldest) WAL, and return those regions which should be flushed so that<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   * it can be let-go/'archived'.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>   * @return stores of regions (encodedRegionNames) to flush in order to archive oldest WAL file.<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   */<a name="line.697"></a>
+<span class="sourceLineNo">698</span>  Map&lt;byte[], List&lt;byte[]&gt;&gt; findRegionsToForceFlush() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    Map&lt;byte[], List&lt;byte[]&gt;&gt; regions = null;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    int logCount = getNumRolledLogFiles();<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    if (logCount &gt; this.maxLogs &amp;&amp; logCount &gt; 0) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      Map.Entry&lt;Path, WalProps&gt; firstWALEntry = this.walFile2Props.firstEntry();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      regions =<a name="line.703"></a>
+<span class="sourceLineNo">704</span>        this.sequenceIdAccounting.findLower(firstWALEntry.getValue().encodedName2HighestSequenceId);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (regions != null) {<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      List&lt;String&gt; listForPrint = new ArrayList&lt;&gt;();<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      for (Map.Entry&lt;byte[], List&lt;byte[]&gt;&gt; r : regions.entrySet()) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        StringBuilder families = new StringBuilder();<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        for (int i = 0; i &lt; r.getValue().size(); i++) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          if (i &gt; 0) {<a name="line.711"></a>
+<span class="sourceLineNo">712</span>            families.append(",");<a name="line.712"></a>
+<span class="sourceLineNo">713</span>          }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>          families.append(Bytes.toString(r.getValue().get(i)));<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        }<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        listForPrint.add(Bytes.toStringBinary(r.getKey()) + "[" + families.toString() + "]");<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      LOG.info("Too many WALs; count=" + logCount + ", max=" + this.maxLogs +<a name="line.718"></a>
+<span class="sourceLineNo">719</span>        "; forcing (partial) flush of " + regions.size() + " region(s): " +<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        StringUtils.join(",", listForPrint));<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    return regions;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>  }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * Archive old logs. A WAL is eligible for archiving if all its WALEdits have been flushed.<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   */<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  private void cleanOldLogs() throws IOException {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    List&lt;Pair&lt;Path, Long&gt;&gt; logsToArchive = null;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    long now = System.nanoTime();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    boolean mayLogTooOld = nextLogTooOldNs &lt;= now;<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    ArrayList&lt;byte[]&gt; regionsBlockingWal = null;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    // For each log file, look at its Map of regions to highest sequence id; if all sequence ids<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    // are older than what is currently in memory, the WAL can be GC'd.<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    for (Map.Entry&lt;Path, WalProps&gt; e : this.walFile2Props.entrySet()) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      Path log = e.getKey();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      ArrayList&lt;byte[]&gt; regionsBlockingThisWal = null;<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      long ageNs = now - e.getValue().rollTimeNs;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      if (ageNs &gt; walTooOldNs) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        if (mayLogTooOld &amp;&amp; regionsBlockingWal == null) {<a name="line.740"></a>
+<span class="sourceLineNo">741</span>          regionsBlockingWal = new ArrayList&lt;&gt;();<a name="line.741"></a>
+<span class="sourceLineNo">742</span>        }<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        regionsBlockingThisWal = regionsBlockingWal;<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      }<a name="line.744"></a>
+<span class="sourceLineNo">745</span>      Map&lt;byte[], Long&gt; sequenceNums = e.getValue().encodedName2HighestSequenceId;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      if (this.sequenceIdAccounting.areAllLower(sequenceNums, regionsBlockingThisWal)) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        if (logsToArchive == null) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>          logsToArchive = new ArrayList&lt;&gt;();<a name="line.748"></a>
 <span class="sourceLineNo">749</span>        }<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      } else if (regionsBlockingThisWal != null) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        StringBuilder sb = new StringBuilder(log.toString()).append(" has not been archived for ")<a name="line.751"></a>
-<span class="sourceLineNo">752</span>          .append(TimeUnit.NANOSECONDS.toSeconds(ageNs)).append(" seconds; blocked by: ");<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        boolean isFirst = true;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        for (byte[] region : regionsBlockingThisWal) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>          if (!isFirst) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>            sb.append("; ");<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>          isFirst = false;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>          sb.append(Bytes.toString(region));<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        LOG.warn(sb.toString());<a name="line.761"></a>
-<span class="sourceLineNo">762</span>        nextLogTooOldNs = now + SURVIVED_TOO_LONG_LOG_INTERVAL_NS;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>        regionsBlockingThisWal.clear();<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
-<span class="sourceLineNo">766</span><a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (logsToArchive != null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      final List&lt;Pair&lt;Path, Long&gt;&gt; localLogsToArchive = logsToArchive;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      // make it async<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      for (Pair&lt;Path, Long&gt; log : localLogsToArchive) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>        logArchiveExecutor.execute(() -&gt; {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          archive(log);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        });<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        this.walFile2Props.remove(log.getFirst());<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      }<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  }<a name="line.777"></a>
-<span class="sourceLineNo">778</span><a name="line.778"></a>
-<span class="sourceLineNo">779</span>  protected void archive(final Pair&lt;Path, Long&gt; log) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    int retry = 1;<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    while (true) {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      try {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        archiveLogFile(log.getFirst());<a name="line.783"></a>
-<span class="sourceLineNo">784</span>        totalLogSize.addAndGet(-log.getSecond());<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        // successful<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        break;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      } catch (Throwable e) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        if (retry &gt; archiveRetries) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>          LOG.error("Failed log archiving for the log {},", log.getFirst(), e);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          if (this.abortable != null) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>            this.abortable.abort("Failed log archiving", e);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            break;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        } else {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>          LOG.error("Log archiving failed for the log {} - attempt {}", log.getFirst(), retry,<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            e);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>        retry++;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      }<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>  /*<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * only public so WALSplitter can use.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @return archived location of a WAL file with the given path p<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   */<a name="line.806"></a>
-<span class="sourceLineNo">807</span>  public static Path getWALArchivePath(Path archiveDir, Path p) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    return new Path(archiveDir, p.getName());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>  protected void archiveLogFile(final Path p) throws IOException {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    Path newPath = getWALArchivePath(this.walArchiveDir, p);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // Tell our listeners that a log is going to be archived.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    if (!this.listeners.isEmpty()) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>      for (WALActionsListener i : this.listeners) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        i.preLogArchive(p, newPath);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    LOG.info("Archiving " + p + " to " + newPath);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    if (!CommonFSUtils.renameAndSetModifyTime(this.fs, p, newPath)) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      throw new IOException("Unable to rename " + p + " to " + newPath);<a name="line.821"></a>
+<span class="sourceLineNo">750</span>        logsToArchive.add(Pair.newPair(log, e.getValue().logSize));<a name="line.750"></a>
+<span class="sourceLineNo">751</span>        if (LOG.isTraceEnabled()) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>          LOG.trace("WAL file ready for archiving " + log);<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        }<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      } else if (regionsBlockingThisWal != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        StringBuilder sb = new StringBuilder(log.toString()).append(" has not been archived for ")<a name="line.755"></a>
+<span class="sourceLineNo">756</span>          .append(TimeUnit.NANOSECONDS.toSeconds(ageNs)).append(" seconds; blocked by: ");<a name="line.756"></a>
+<span class="sourceLineNo">757</span>        boolean isFirst = true;<a name="line.757"></a>
+<span class="sourceLineNo">758</span>        for (byte[] region : regionsBlockingThisWal) {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>          if (!isFirst) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>            sb.append("; ");<a name="line.760"></a>
+<span class="sourceLineNo">761</span>          }<a name="line.761"></a>
+<span class="sourceLineNo">762</span>          isFirst = false;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>          sb.append(Bytes.toString(region));<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        }<a name="line.764"></a>
+<span class="sourceLineNo">765</span>        LOG.warn(sb.toString());<a name="line.765"></a>
+<span class="sourceLineNo">766</span>        nextLogTooOldNs = now + SURVIVED_TOO_LONG_LOG_INTERVAL_NS;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>        regionsBlockingThisWal.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span>      }<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
+<span class="sourceLineNo">770</span><a name="line.770"></a>
+<span class="sourceLineNo">771</span>    if (logsToArchive != null) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>      final List&lt;Pair&lt;Path, Long&gt;&gt; localLogsToArchive = logsToArchive;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      // make it async<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      for (Pair&lt;Path, Long&gt; log : localLogsToArchive) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>        logArchiveExecutor.execute(() -&gt; {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>          archive(log);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        });<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        this.walFile2Props.remove(log.getFirst());<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  }<a name="line.781"></a>
+<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">783</span>  protected void archive(final Pair&lt;Path, Long&gt; log) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    int retry = 1;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    while (true) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      try {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        archiveLogFile(log.getFirst());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>        totalLogSize.addAndGet(-log.getSecond());<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        // successful<a name="line.789"></a>
+<span class="sourceLineNo">790</span>        break;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      } catch (Throwable e) {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>        if (retry &gt; archiveRetries) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          LOG.error("Failed log archiving for the log {},", log.getFirst(), e);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>          if (this.abortable != null) {<a name="line.794"></a>
+<span class="sourceLineNo">795</span>            this.abortable.abort("Failed log archiving", e);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>            break;<a name="line.796"></a>
+<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        } else {<a name="line.798"></a>
+<span class="sourceLineNo">799</span>          LOG.error("Log archiving failed for the log {} - attempt {}", log.getFirst(), retry,<a name="line.799"></a>
+<span class="sourceLineNo">800</span>            e);<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        }<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        retry++;<a name="line.802"></a>
+<span class="sourceLineNo">803</span>      }<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    }<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /*<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * only public so WALSplitter can use.<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   * @return archived location of a WAL file with the given path p<a name="line.809"></a>
+<span class="sourceLineNo">810</span>   */<a name="line.810"></a>
+<span class="sourceLineNo">811</span>  public static Path getWALArchivePath(Path archiveDir, Path p) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    return new Path(archiveDir, p.getName());<a name="line.812"></a>
+<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>  protected void archiveLogFile(final Path p) throws IOException {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    Path newPath = getWALArchivePath(this.walArchiveDir, p);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    // Tell our listeners that a log is going to be archived.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    if (!this.listeners.isEmpty()) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      for (WALActionsListener i : this.listeners) {<a name="line.819"></a>
+<span class="sourceLineNo">820</span>        i.preLogArchive(p, newPath);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      }<a name="line.821"></a>
 <span class="sourceLineNo">822</span>    }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // Tell our listeners that a log has been archived.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    if (!this.listeners.isEmpty()) {<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      for (WALActionsListener i : this.listeners) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>        i.postLogArchive(p, newPath);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  protected final void logRollAndSetupWalProps(Path oldPath, Path newPath, long oldFileLen) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    int oldNumEntries = this.numEntries.getAndSet(0);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    String newPathString = newPath != null ? CommonFSUtils.getPath(newPath) : null;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    if (oldPath != null) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>      this.walFile2Props.put(oldPath,<a name="line.835"></a>
-<span class="sourceLineNo">836</span>        new WalProps(this.sequenceIdAccounting.resetHighest(), oldFileLen));<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      this.totalLogSize.addAndGet(oldFileLen);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      LOG.info("Rolled WAL {} with entries={}, filesize={}; new WAL {}",<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        CommonFSUtils.getPath(oldPath), oldNumEntries, StringUtils.byteDesc(oldFileLen),<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        newPathString);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    } else {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      LOG.info("New WAL {}", newPathString);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
-<span class="sourceLineNo">844</span>  }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>  private Span createSpan(String name) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    return TraceUtil.createSpan(name).setAttribute(TraceUtil.WAL_IMPL, implClassName);<a name="line.847"></a>
+<span class="sourceLineNo">823</span>    LOG.info("Archiving " + p + " to " + newPath);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    if (!CommonFSUtils.renameAndSetModifyTime(this.fs, p, newPath)) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>      throw new IOException("Unable to rename " + p + " to " + newPath);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    // Tell our listeners that a log has been archived.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    if (!this.listeners.isEmpty()) {<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      for (WALActionsListener i : this.listeners) {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>        i.postLogArchive(p, newPath);<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      }<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>  }<a name="line.833"></a>
+<span class="sourceLineNo">834</span><a name="line.834"></a>
+<span class="sourceLineNo">835</span>  protected final void logRollAndSetupWalProps(Path oldPath, Path newPath, long oldFileLen) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    int oldNumEntries = this.numEntries.getAndSet(0);<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    String newPathString = newPath != null ? CommonFSUtils.getPath(newPath) : null;<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    if (oldPath != null) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      this.walFile2Props.put(oldPath,<a name="line.839"></a>
+<span class="sourceLineNo">840</span>        new WalProps(this.sequenceIdAccounting.resetHighest(), oldFileLen));<a name="line.840"></a>
+<span class="sourceLineNo">841</span>      this.totalLogSize.addAndGet(oldFileLen);<a name="line.841"></a>
+<span class="sourceLineNo">842</span>      LOG.info("Rolled WAL {} with entries={}, filesize={}; new WAL {}",<a name="line.842"></a>
+<span class="sourceLineNo">843</span>        CommonFSUtils.getPath(oldPath), oldNumEntries, StringUtils.byteDesc(oldFileLen),<a name="line.843"></a>
+<span class="sourceLineNo">844</span>        newPathString);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    } else {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      LOG.info("New WAL {}", newPathString);<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
 <span class="sourceLineNo">848</span>  }<a name="line.848"></a>
 <span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>  /**<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * Cleans up current writer closing it and then puts in place the passed in {@code nextWriter}.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * &lt;p/&gt;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   * &lt;ul&gt;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>   * &lt;li&gt;In the case of creating a new WAL, oldPath will be null.&lt;/li&gt;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * &lt;li&gt;In the case of rolling over from one file to the next, none of the parameters will be null.<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * &lt;/li&gt;<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * &lt;li&gt;In the case of closing out this FSHLog with no further use newPath and nextWriter will be<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * null.&lt;/li&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;/ul&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * @param oldPath may be null<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param newPath may be null<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param nextWriter may be null<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return the passed in &lt;code&gt;newPath&lt;/code&gt;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * @throws IOException if there is a problem flushing or closing the underlying FS<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   */<a name="line.865"></a>
-<span class="sourceLineNo">866</span>  Path replaceWriter(Path oldPath, Path newPath, W nextWriter) throws IOException {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    return TraceUtil.trace(() -&gt; {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      doReplaceWriter(oldPath, newPath, nextWriter);<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      return newPath;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    }, () -&gt; createSpan("WAL.replaceWriter"));<a name="line.870"></a>
-<span class="sourceLineNo">871</span>  }<a name="line.871"></a>
-<span class="sourceLineNo">872</span><a name="line.872"></a>
-<span class="sourceLineNo">873</span>  protected final void blockOnSync(SyncFuture syncFuture) throws IOException {<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    // Now we have published the ringbuffer, halt the current thread until we get an answer back.<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    try {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>      if (syncFuture != null) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        if (closed) {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>          throw new IOException("WAL has been closed");<a name="line.878"></a>
-<span class="sourceLineNo">879</span>        } else {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>          syncFuture.get(walSyncTimeoutNs);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>        }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    } catch (TimeoutIOException tioe) {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      // SyncFuture reuse by thread, if TimeoutIOException happens, ringbuffer<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      // still refer to it, so if this thread use it next time may get a wrong<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      // result.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      this.cachedSyncFutures.remove();<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      throw tioe;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    } catch (InterruptedException ie) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      LOG.warn("Interrupted", ie);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      throw convertInterruptedExceptionToIOException(ie);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    } catch (ExecutionException e) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      throw ensureIOException(e.getCause());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    }<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  }<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>  private static IOException ensureIOException(final Throwable t) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    return (t instanceof IOException) ? (IOException) t : new IOException(t);<a name="line.898"></a>
+<span class="sourceLineNo">850</span>  private Span createSpan(String name) {<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    return TraceUtil.createSpan(name).setAttribute(TraceUtil.WAL_IMPL, implClassName);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * Cleans up current writer closing it and then puts in place the passed in {@code nextWriter}.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   * &lt;p/&gt;<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * &lt;ul&gt;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * &lt;li&gt;In the case of creating a new WAL, oldPath will be null.&lt;/li&gt;<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * &lt;li&gt;In the case of rolling over from one file to the next, none of the parameters will be null.<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * &lt;/li&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * &lt;li&gt;In the case of closing out this FSHLog with no further use newPath and nextWriter will be<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   * null.&lt;/li&gt;<a name="line.862"></a>
+<span class="sourceLineNo">863</span>   * &lt;/ul&gt;<a name="line.863"></a>
+<span class="sourceLineNo">864</span>   * @param oldPath may be null<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * @param newPath may be null<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * @param nextWriter may be null<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * @return the passed in &lt;code&gt;newPath&lt;/code&gt;<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * @throws IOException if there is a problem flushing or closing the underlying FS<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   */<a name="line.869"></a>
+<span class="sourceLineNo">870</span>  Path replaceWriter(Path oldPath, Path newPath, W nextWriter) throws IOException {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>    return TraceUtil.trace(() -&gt; {<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      doReplaceWriter(oldPath, newPath, nextWriter);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      return newPath;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }, () -&gt; createSpan("WAL.replaceWriter"));<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  protected final void blockOnSync(SyncFuture syncFuture) throws IOException {<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    // Now we have published the ringbuffer, halt the current thread until we get an answer back.<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    try {<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      if (syncFuture != null) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>        if (closed) {<a name="line.881"></a>
+<span class="sourceLineNo">882</span>          throw new IOException("WAL has been closed");<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        } else {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>          syncFuture.get(walSyncTimeoutNs);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>        }<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      }<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    } catch (TimeoutIOException tioe) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      // SyncFuture reuse by thread, if TimeoutIOException happens, ringbuffer<a name="line.888"></a>
+<span class="sourceLineNo">889</span>      // still refer to it, so if this thread use it next time may get a wrong<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      // result.<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      this.cachedSyncFutures.remove();<a name="line.891"></a>
+<span class="sourceLineNo">892</span>      throw tioe;<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    } catch (InterruptedException ie) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      LOG.warn("Interrupted", ie);<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      throw convertInterruptedExceptionToIOException(ie);<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    } catch (ExecutionException e) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      throw ensureIOException(e.getCause());<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
 <span class="sourceLineNo">899</span>  }<a name="line.899"></a>
 <span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>  private IOException convertInterruptedExceptionToIOException(final InterruptedException ie) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    Thread.currentThread().interrupt();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    IOException ioe = new InterruptedIOException();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    ioe.initCause(ie);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    return ioe;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>  }<a name="line.906"></a>
-<span class="sourceLineNo">907</span><a name="line.907"></a>
-<span class="sourceLineNo">908</span>  private Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriterInternal(boolean force) throws IOException {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    rollWriterLock.lock();<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    try {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      if (this.closed) {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>        throw new WALClosedException("WAL has been closed");<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      // Return if nothing to flush.<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      if (!force &amp;&amp; this.writer != null &amp;&amp; this.numEntries.get() &lt;= 0) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>        return null;<a name="line.916"></a>
+<span class="sourceLineNo">901</span>  private static IOException ensureIOException(final Throwable t) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    return (t instanceof IOException) ? (IOException) t : new IOException(t);<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  }<a name="line.903"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>  private IOException convertInterruptedExceptionToIOException(final InterruptedException ie) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    Thread.currentThread().interrupt();<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    IOException ioe = new InterruptedIOException();<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    ioe.initCause(ie);<a name="line.908"></a>
+<span class="sourceLineNo">909</span>    return ioe;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>  }<a name="line.910"></a>
+<span class="sourceLineNo">911</span><a name="line.911"></a>
+<span class="sourceLineNo">912</span>  private Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriterInternal(boolean force) throws IOException {<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    rollWriterLock.lock();<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    try {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>      if (this.closed) {<a name="line.915"></a>
+<span class="sourceLineNo">916</span>        throw new WALClosedException("WAL has been closed");<a name="line.916"></a>
 <span class="sourceLineNo">917</span>      }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      Map&lt;byte[], List&lt;byte[]&gt;&gt; regionsToFlush = null;<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      try {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>        Path oldPath = getOldPath();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        Path newPath = getNewPath();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>        // Any exception from here on is catastrophic, non-recoverable so we currently abort.<a name="line.922"></a>
-<span class="sourceLineNo">923</span>        W nextWriter = this.createWriterInstance(newPath);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>        tellListenersAboutPreLogRoll(oldPath, newPath);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>        // NewPath could be equal to oldPath if replaceWriter fails.<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        newPath = replaceWriter(oldPath, newPath, nextWriter);<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        tellListenersAboutPostLogRoll(oldPath, newPath);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        if (LOG.isDebugEnabled()) {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>          LOG.debug("Create new " + implClassName + " writer with pipeline: " +<a name="line.929"></a>
-<span class="sourceLineNo">930</span>            Arrays.toString(getPipeline()));<a name="line.930"></a>
-<span class="sourceLineNo">931</span>        }<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        // We got a new writer, so reset the slow sync count<a name="line.932"></a>
-<span class="sourceLineNo">933</span>        lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.933"></a>
-<span class="sourceLineNo">934</span>        slowSyncCount.set(0);<a name="line.934"></a>
-<span class="sourceLineNo">935</span>        // Can we delete any of the old log files?<a name="line.935"></a>
-<span class="sourceLineNo">936</span>        if (getNumRolledLogFiles() &gt; 0) {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>          cleanOldLogs();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionsToFlush = findRegionsToForceFlush();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>        }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        // If the underlying FileSystem can't do what we ask, treat as IO failure so<a name="line.941"></a>
-<span class="sourceLineNo">942</span>        // we'll abort.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>        throw new IOException(<a name="line.943"></a>
-<span class="sourceLineNo">944</span>          "Underlying FileSystem can't meet stream requirements. See RS log " + "for details.",<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          exception);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      return regionsToFlush;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    } finally {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      rollWriterLock.unlock();<a name="line.949"></a>
-<span class="sourceLineNo">950</span>    }<a name="line.950"></a>
-<span class="sourceLineNo">951</span>  }<a name="line.951"></a>
-<span class="sourceLineNo">952</span><a name="line.952"></a>
-<span class="sourceLineNo">953</span>  @Override<a name="line.953"></a>
-<span class="sourceLineNo">954</span>  public Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriter(boolean force) throws IOException {<a name="line.954"></a>
-<span class="sourceLineNo">955</span>    return TraceUtil.trace(() -&gt; rollWriterInternal(force), () -&gt; createSpan("WAL.rollWriter"));<a name="line.955"></a>
-<span class="sourceLineNo">956</span>  }<a name="line.956"></a>
-<span class="sourceLineNo">957</span><a name="line.957"></a>
-<span class="sourceLineNo">958</span>  // public only until class moves to o.a.h.h.wal<a name="line.958"></a>
-<span class="sourceLineNo">959</span>  /** @return the size of log files in use */<a name="line.959"></a>
-<span class="sourceLineNo">960</span>  public long getLogFileSize() {<a name="line.960"></a>
-<span class="sourceLineNo">961</span>    return this.totalLogSize.get();<a name="line.961"></a>
-<span class="sourceLineNo">962</span>  }<a name="line.962"></a>
-<span class="sourceLineNo">963</span><a name="line.963"></a>
-<span class="sourceLineNo">964</span>  // public only until class moves to o.a.h.h.wal<a name="line.964"></a>
-<span class="sourceLineNo">965</span>  public void requestLogRoll() {<a name="line.965"></a>
-<span class="sourceLineNo">966</span>    requestLogRoll(ERROR);<a name="line.966"></a>
-<span class="sourceLineNo">967</span>  }<a name="line.967"></a>
-<span class="sourceLineNo">968</span><a name="line.968"></a>
-<span class="sourceLineNo">969</span>  /**<a name="line.969"></a>
-<span class="sourceLineNo">970</span>   * Get the backing files associated with this WAL.<a name="line.970"></a>
-<span class="sourceLineNo">971</span>   * @return may be null if there are no files.<a name="line.971"></a>
-<span class="sourceLineNo">972</span>   */<a name="line.972"></a>
-<span class="sourceLineNo">973</span>  FileStatus[] getFiles() throws IOException {<a name="line.973"></a>
-<span class="sourceLineNo">974</span>    return CommonFSUtils.listStatus(fs, walDir, ourFiles);<a name="line.974"></a>
-<span class="sourceLineNo">975</span>  }<a name="line.975"></a>
-<span class="sourceLineNo">976</span><a name="line.976"></a>
-<span class="sourceLineNo">977</span>  @Override<a name="line.977"></a>
-<span class="sourceLineNo">978</span>  public void shutdown() throws IOException {<a name="line.978"></a>
-<span class="sourceLineNo">979</span>    if (!shutdown.compareAndSet(false, true)) {<a name="line.979"></a>
-<span class="sourceLineNo">980</span>      return;<a name="line.980"></a>
-<span class="sourceLineNo">981</span>    }<a name="line.981"></a>
-<span class="sourceLineNo">982</span>    closed = true;<a name="line.982"></a>
-<span class="sourceLineNo">983</span>    // Tell our listeners that the log is closing<a name="line.983"></a>
-<span class="sourceLineNo">984</span>    if (!this.listeners.isEmpty()) {<a name="line.984"></a>
-<span class="sourceLineNo">985</span>      for (WALActionsListener i : this.listeners) {<a name="line.985"></a>
-<span class="sourceLineNo">986</span>        i.logCloseRequested();<a name="line.986"></a>
-<span class="sourceLineNo">987</span>      }<a name="line.987"></a>
-<span class="sourceLineNo">988</span>    }<a name="line.988"></a>
-<span class="sourceLineNo">989</span>    rollWriterLock.lock();<a name="line.989"></a>
-<span class="sourceLineNo">990</span>    try {<a name="line.990"></a>
-<span class="sourceLineNo">991</span>      doShutdown();<a name="line.991"></a>
-<span class="sourceLineNo">992</span>      if (logArchiveExecutor != null) {<a name="line.992"></a>
-<span class="sourceLineNo">993</span>        logArchiveExecutor.shutdownNow();<a name="line.993"></a>
-<span class="sourceLineNo">994</span>      }<a name="line.994"></a>
-<span class="sourceLineNo">995</span>    } finally {<a name="line.995"></a>
-<span class="sourceLineNo">996</span>      rollWriterLock.unlock();<a name="line.996"></a>
-<span class="sourceLineNo">997</span>    }<a name="line.997"></a>
-<span class="sourceLineNo">998</span>  }<a name="line.998"></a>
-<span class="sourceLineNo">999</span><a name="line.999"></a>
-<span class="sourceLineNo">1000</span>  @Override<a name="line.1000"></a>
-<span class="sourceLineNo">1001</span>  public void close() throws IOException {<a name="line.1001"></a>
-<span class="sourceLineNo">1002</span>    shutdown();<a name="line.1002"></a>
-<span class="sourceLineNo">1003</span>    final FileStatus[] files = getFiles();<a name="line.1003"></a>
-<span class="sourceLineNo">1004</span>    if (null != files &amp;&amp; 0 != files.length) {<a name="line.1004"></a>
-<span class="sourceLineNo">1005</span>      for (FileStatus file : files) {<a name="line.1005"></a>
-<span class="sourceLineNo">1006</span>        Path p = getWALArchivePath(this.walArchiveDir, file.getPath());<a name="line.1006"></a>
-<span class="sourceLineNo">1007</span>        // Tell our listeners that a log is going to be archived.<a name="line.1007"></a>
-<span class="sourceLineNo">1008</span>        if (!this.listeners.isEmpty()) {<a name="line.1008"></a>
-<span class="sourceLineNo">1009</span>          for (WALActionsListener i : this.listeners) {<a name="line.1009"></a>
-<span class="sourceLineNo">1010</span>            i.preLogArchive(file.getPath(), p);<a name="line.1010"></a>
-<span class="sourceLineNo">1011</span>          }<a name="line.1011"></a>
-<span class="sourceLineNo">1012</span>        }<a name="line.1012"></a>
-<span class="sourceLineNo">1013</span><a name="line.1013"></a>
-<span class="sourceLineNo">1014</span>        if (!CommonFSUtils.renameAndSetModifyTime(fs, file.getPath(), p)) {<a name="line.1014"></a>
-<span class="sourceLineNo">1015</span>          throw new IOException("Unable to rename " + file.getPath() + " to " + p);<a name="line.1015"></a>
+<span class="sourceLineNo">918</span>      // Return if nothing to flush.<a name="line.918"></a>
+<span class="sourceLineNo">919</span>      if (!force &amp;&amp; this.writer != null &amp;&amp; this.numEntries.get() &lt;= 0) {<a name="line.919"></a>
+<span class="sourceLineNo">920</span>        return null;<a name="line.920"></a>
+<span class="sourceLineNo">921</span>      }<a name="line.921"></a>
+<span class="sourceLineNo">922</span>      Map&lt;byte[], List&lt;byte[]&gt;&gt; regionsToFlush = null;<a name="line.922"></a>
+<span class="sourceLineNo">923</span>      try {<a name="line.923"></a>
+<span class="sourceLineNo">924</span>        Path oldPath = getOldPath();<a name="line.924"></a>
+<span class="sourceLineNo">925</span>        Path newPath = getNewPath();<a name="line.925"></a>
+<span class="sourceLineNo">926</span>        // Any exception from here on is catastrophic, non-recoverable so we currently abort.<a name="line.926"></a>
+<span class="sourceLineNo">927</span>        W nextWriter = this.createWriterInstance(newPath);<a name="line.927"></a>
+<span class="sourceLineNo">928</span>        tellListenersAboutPreLogRoll(oldPath, newPath);<a name="line.928"></a>
+<span class="sourceLineNo">929</span>        // NewPath could be equal to oldPath if replaceWriter fails.<a name="line.929"></a>
+<span class="sourceLineNo">930</span>        newPath = replaceWriter(oldPath, newPath, nextWriter);<a name="line.930"></a>
+<span class="sourceLineNo">931</span>        tellListenersAboutPostLogRoll(oldPath, newPath);<a name="line.931"></a>
+<span class="sourceLineNo">932</span>        if (LOG.isDebugEnabled()) {<a name="line.932"></a>
+<span class="sourceLineNo">933</span>          LOG.debug("Create new " + implClassName + " writer with pipeline: " +<a name="line.933"></a>
+<span class="sourceLineNo">934</span>            Arrays.toString(getPipeline()));<a name="line.934"></a>
+<span class="sourceLineNo">935</span>        }<a name="line.935"></a>
+<span class="sourceLineNo">936</span>        // We got a new writer, so reset the slow sync count<a name="line.936"></a>
+<span class="sourceLineNo">937</span>        lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.937"></a>
+<span class="sourceLineNo">938</span>        slowSyncCount.set(0);<a name="line.938"></a>
+<span class="sourceLineNo">939</span>        // Can we delete any of the old log files?<a name="line.939"></a>
+<span class="sourceLineNo">940</span>        if (getNumRolledLogFiles() &gt; 0) {<a name="line.940"></a>
+<span class="sourceLineNo">941</span>          cleanOldLogs();<a name="line.941"></a>
+<span class="sourceLineNo">942</span>          regionsToFlush = findRegionsToForceFlush();<a name="line.942"></a>
+<span class="sourceLineNo">943</span>        }<a name="line.943"></a>
+<span class="sourceLineNo">944</span>      } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.944"></a>
+<span class="sourceLineNo">945</span>        // If the underlying FileSystem can't do what we ask, treat as IO failure so<a name="line.945"></a>
+<span class="sourceLineNo">946</span>        // we'll abort.<a name="line.946"></a>
+<span class="sourceLineNo">947</span>        throw new IOException(<a name="line.947"></a>
+<span class="sourceLineNo">948</span>          "Underlying FileSystem can't meet stream requirements. See RS log " + "for details.",<a name="line.948"></a>
+<span class="sourceLineNo">949</span>          exception);<a name="line.949"></a>
+<span class="sourceLineNo">950</span>      }<a name="line.950"></a>
+<span class="sourceLineNo">951</span>      return regionsToFlush;<a name="line.951"></a>
+<span class="sourceLineNo">952</span>    } finally {<a name="line.952"></a>
+<span class="sourceLineNo">953</span>      rollWriterLock.unlock();<a name="line.953"></a>
+<span class="sourceLineNo">954</span>    }<a name="line.954"></a>
+<span class="sourceLineNo">955</span>  }<a name="line.955"></a>
+<span class="sourceLineNo">956</span><a name="line.956"></a>
+<span class="sourceLineNo">957</span>  @Override<a name="line.957"></a>
+<span class="sourceLineNo">958</span>  public Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriter(boolean force) throws IOException {<a name="line.958"></a>
+<span class="sourceLineNo">959</span>    return TraceUtil.trace(() -&gt; rollWriterInternal(force), () -&gt; createSpan("WAL.rollWriter"));<a name="line.959"></a>
+<span class="sourceLineNo">960</span>  }<a name="line.960"></a>
+<span class="sourceLineNo">961</span><a name="line.961"></a>
+<span class="sourceLineNo">962</span>  // public only until class moves to o.a.h.h.wal<a name="line.962"></a>
+<span class="sourceLineNo">963</span>  /** @return the size of log files in use */<a name="line.963"></a>
+<span class="sourceLineNo">964</span>  public long getLogFileSize() {<a name="line.964"></a>
+<span class="sourceLineNo">965</span>    return this.totalLogSize.get();<a name="line.965"></a>
+<span class="sourceLineNo">966</span>  }<a name="line.966"></a>
+<span class="sourceLineNo">967</span><a name="line.967"></a>
+<span class="sourceLineNo">968</span>  // public only until class moves to o.a.h.h.wal<a name="line.968"></a>
+<span class="sourceLineNo">969</span>  public void requestLogRoll() {<a name="line.969"></a>
+<span class="sourceLineNo">970</span>    requestLogRoll(ERROR);<a name="line.970"></a>
+<span class="sourceLineNo">971</span>  }<a name="line.971"></a>
+<span class="sourceLineNo">972</span><a name="line.972"></a>
+<span class="sourceLineNo">973</span>  /**<a name="line.973"></a>
+<span class="sourceLineNo">974</span>   * Get the backing files associated with this WAL.<a name="line.974"></a>
+<span class="sourceLineNo">975</span>   * @return may be null if there are no files.<a name="line.975"></a>
+<span class="sourceLineNo">976</span>   */<a name="line.976"></a>
+<span class="sourceLineNo">977</span>  FileStatus[] getFiles() throws IOException {<a name="line.977"></a>
+<span class="sourceLineNo">978</span>    return CommonFSUtils.listStatus(fs, walDir, ourFiles);<a name="line.978"></a>
+<span class="sourceLineNo">979</span>  }<a name="line.979"></a>
+<span class="sourceLineNo">980</span><a name="line.980"></a>
+<span class="sourceLineNo">981</span>  @Override<a name="line.981"></a>
+<span class="sourceLineNo">982</span>  public void shutdown() throws IOException {<a name="line.982"></a>
+<span class="sourceLineNo">983</span>    if (!shutdown.compareAndSet(false, true)) {<a name="line.983"></a>
+<span class="sourceLineNo">984</span>      return;<a name="line.984"></a>
+<span class="sourceLineNo">985</span>    }<a name="line.985"></a>
+<span class="sourceLineNo">986</span>    closed = true;<a name="line.986"></a>
+<span class="sourceLineNo">987</span>    // Tell our listeners that the log is closing<a name="line.987"></a>
+<span class="sourceLineNo">988</span>    if (!this.listeners.isEmpty()) {<a name="line.988"></a>
+<span class="sourceLineNo">989</span>      for (WALActionsListener i : this.listeners) {<a name="line.989"></a>
+<span class="sourceLineNo">990</span>        i.logCloseRequested();<a name="line.990"></a>
+<span class="sourceLineNo">991</span>      }<a name="line.991"></a>
+<span class="sourceLineNo">992</span>    }<a name="line.992"></a>
+<span class="sourceLineNo">993</span>    rollWriterLock.lock();<a name="line.993"></a>
+<span class="sourceLineNo">994</span>    try {<a name="line.994"></a>
+<span class="sourceLineNo">995</span>      doShutdown();<a name="line.995"></a>
+<span class="sourceLineNo">996</span>      if (logArchiveExecutor != null) {<a name="line.996"></a>
+<span class="sourceLineNo">997</span>        logArchiveExecutor.shutdownNow();<a name="line.997"></a>
+<span class="sourceLineNo">998</span>      }<a name="line.998"></a>
+<span class="sourceLineNo">999</span>    } finally {<a name="line.999"></a>
+<span class="sourceLineNo">1000</span>      rollWriterLock.unlock();<a name="line.1000"></a>
+<span class="sourceLineNo">1001</span>    }<a name="line.1001"></a>
+<span class="sourceLineNo">1002</span>  }<a name="line.1002"></a>
+<span class="sourceLineNo">1003</span><a name="line.1003"></a>
+<span class="sourceLineNo">1004</span>  @Override<a name="line.1004"></a>
+<span class="sourceLineNo">1005</span>  public void close() throws IOException {<a name="line.1005"></a>
+<span class="sourceLineNo">1006</span>    shutdown();<a name="line.1006"></a>
+<span class="sourceLineNo">1007</span>    final FileStatus[] files = getFiles();<a name="line.1007"></a>
+<span class="sourceLineNo">1008</span>    if (null != files &amp;&amp; 0 != files.length) {<a name="line.1008"></a>
+<span class="sourceLineNo">1009</span>      for (FileStatus file : files) {<a name="line.1009"></a>
+<span class="sourceLineNo">1010</span>        Path p = getWALArchivePath(this.walArchiveDir, file.getPath());<a name="line.1010"></a>
+<span class="sourceLineNo">1011</span>        // Tell our listeners that a log is going to be archived.<a name="line.1011"></a>
+<span class="sourceLineNo">1012</span>        if (!this.listeners.isEmpty()) {<a name="line.1012"></a>
+<span class="sourceLineNo">1013</span>          for (WALActionsListener i : this.listeners) {<a name="line.1013"></a>
+<span class="sourceLineNo">1014</span>            i.preLogArchive(file.getPath(), p);<a name="line.1014"></a>
+<span class="sourceLineNo">1015</span>          }<a name="line.1015"></a>
 <span class="sourceLineNo">1016</span>        }<a name="line.1016"></a>
-<span class="sourceLineNo">1017</span>        // Tell our listeners that a log was archived.<a name="line.1017"></a>
-<span class="sourceLineNo">1018</span>        if (!this.listeners.isEmpty()) {<a name="line.1018"></a>
-<span class="sourceLineNo">1019</span>          for (WALActionsListener i : this.listeners) {<a name="line.1019"></a>
-<span class="sourceLineNo">1020</span>            i.postLogArchive(file.getPath(), p);<a name="line.1020"></a>
-<span class="sourceLineNo">1021</span>          }<a name="line.1021"></a>
-<span class="sourceLineNo">1022</span>        }<a name="line.1022"></a>
-<span class="sourceLineNo">1023</span>      }<a name="line.1023"></a>
-<span class="sourceLineNo">1024</span>      LOG.debug(<a name="line.1024"></a>
-<span class="sourceLineNo">1025</span>        "Moved " + files.length + " WAL file(s) to " + CommonFSUtils.getPath(this.walArchiveDir));<a name="line.1025"></a>
-<span class="sourceLineNo">1026</span>    }<a name="line.1026"></a>
-<span class="sourceLineNo">1027</span>    LOG.info("Closed WAL: " + toString());<a name="line.1027"></a>
-<span class="sourceLineNo">1028</span>  }<a name="line.1028"></a>
-<span class="sourceLineNo">1029</span><a name="line.1029"></a>
-<span class="sourceLineNo">1030</span>  /**<a name="line.1030"></a>
-<span class="sourceLineNo">1031</span>   * updates the sequence number of a specific store. depending on the flag: replaces current seq<a name="line.1031"></a>
-<span class="sourceLineNo">1032</span>   * number if the given seq id is bigger, or even if it is lower than existing one<a name="line.1032"></a>
-<span class="sourceLineNo">1033</span>   */<a name="line.1033"></a>
-<span class="sourceLineNo">1034</span>  @Override<a name="line.1034"></a>
-<span class="sourceLineNo">1035</span>  public void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.1035"></a>
-<span class="sourceLineNo">1036</span>      boolean onlyIfGreater) {<a name="line.1036"></a>
-<span class="sourceLineNo">1037</span>    sequenceIdAccounting.updateStore(encodedRegionName, familyName, sequenceid, onlyIfGreater);<a name="line.1037"></a>
-<span class="sourceLineNo">1038</span>  }<a name="line.1038"></a>
-<span class="sourceLineNo">1039</span><a name="line.1039"></a>
-<span class="sourceLineNo">1040</span>  protected final SyncFuture getSyncFuture(long sequence, boolean forceSync) {<a name="line.1040"></a>
-<span class="sourceLineNo">1041</span>    return cachedSyncFutures.get().reset(sequence).setForceSync(forceSync);<a name="line.1041"></a>
-<span class="sourceLineNo">1042</span>  }<a name="line.1042"></a>
-<span class="sourceLineNo">1043</span><a name="line.1043"></a>
-<span class="sourceLineNo">1044</span>  protected boolean isLogRollRequested() {<a name="line.1044"></a>
-<span class="sourceLineNo">1045</span>    return rollRequested.get();<a name="line.1045"></a>
-<span class="sourceLineNo">1046</span>  }<a name="line.1046"></a>
-<span class="sourceLineNo">1047</span><a name="line.1047"></a>
-<span class="sourceLineNo">1048</span>  protected final void requestLogRoll(final WALActionsListener.RollRequestReason reason) {<a name="line.1048"></a>
-<span class="sourceLineNo">1049</span>    // If we have already requested a roll, don't do it again<a name="line.1049"></a>
-<span class="sourceLineNo">1050</span>    // And only set rollRequested to true when there is a registered listener<a name="line.1050"></a>
-<span class="sourceLineNo">1051</span>    if (!this.listeners.isEmpty() &amp;&amp; rollRequested.compareAndSet(false, true)) {<a name="line.1051"></a>
-<span class="sourceLineNo">1052</span>      for (WALActionsListener i : this.listeners) {<a name="line.1052"></a>
-<span class="sourceLineNo">1053</span>        i.logRollRequested(reason);<a name="line.1053"></a>
-<span class="sourceLineNo">1054</span>      }<a name="line.1054"></a>
-<span class="sourceLineNo">1055</span>    }<a name="line.1055"></a>
-<span class="sourceLineNo">1056</span>  }<a name="line.1056"></a>
-<span class="sourceLineNo">1057</span><a name="line.1057"></a>
-<span class="sourceLineNo">1058</span>  long getUnflushedEntriesCount() {<a name="line.1058"></a>
-<span class="sourceLineNo">1059</span>    long highestSynced = this.highestSyncedTxid.get();<a name="line.1059"></a>
-<span class="sourceLineNo">1060</span>    long highestUnsynced = this.highestUnsyncedTxid;<a name="line.1060"></a>
-<span class="sourceLineNo">1061</span>    return highestSynced &gt;= highestUnsynced ? 0 : highestUnsynced - highestSynced;<a name="line.1061"></a>
-<span class="sourceLineNo">1062</span>  }<a name="line.1062"></a>
-<span class="sourceLineNo">1063</span><a name="line.1063"></a>
-<span class="sourceLineNo">1064</span>  boolean isUnflushedEntries() {<a name="line.1064"></a>
-<span class="sourceLineNo">1065</span>    return getUnflushedEntriesCount() &gt; 0;<a name="line.1065"></a>
-<span class="sourceLineNo">1066</span>  }<a name="line.1066"></a>
-<span class="sourceLineNo">1067</span><a name="line.1067"></a>
-<span class="sourceLineNo">1068</span>  /**<a name="line.1068"></a>
-<span class="sourceLineNo">1069</span>   * Exposed for testing only. Use to tricks like halt the ring buffer appending.<a name="line.1069"></a>
-<span class="sourceLineNo">1070</span>   */<a name="line.1070"></a>
-<span class="sourceLineNo">1071</span>  protected void atHeadOfRingBufferEventHandlerAppend() {<a name="line.1071"></a>
-<span class="sourceLineNo">1072</span>    // Noop<a name="line.1072"></a>
+<span class="sourceLineNo">1017</span><a name="line.1017"></a>
+<span class="sourceLineNo">1018</span>        if (!CommonFSUtils.renameAndSetModifyTime(fs, file.getPath(), p)) {<a name="line.1018"></a>
+<span class="sourceLineNo">1019</span>          throw new IOException("Unable to rename " + file.getPath() + " to " + p);<a name="line.1019"></a>
+<span class="sourceLineNo">1020</span>        }<a name="line.1020"></a>
+<span class="sourceLineNo">1021</span>        // Tell our listeners that a log was archived.<a name="line.1021"></a>
+<span class="sourceLineNo">1022</span>        if (!this.listeners.isEmpty()) {<a name="line.1022"></a>
+<span class="sourceLineNo">1023</span>          for (WALActionsListener i : this.listeners) {<a name="line.1023"></a>
+<span class="sourceLineNo">1024</span>            i.postLogArchive(file.getPath(), p);<a name="line.1024"></a>
+<span class="sourceLineNo">1025</span>          }<a name="line.1025"></a>
+<span class="sourceLineNo">1026</span>        }<a name="line.1026"></a>
+<span class="sourceLineNo">1027</span>      }<a name="line.1027"></a>
+<span class="sourceLineNo">1028</span>      LOG.debug(<a name="line.1028"></a>
+<span class="sourceLineNo">1029</span>        "Moved " + files.length + " WAL file(s) to " + CommonFSUtils.getPath(this.walArchiveDir));<a name="line.1029"></a>
+<span class="sourceLineNo">1030</span>    }<a name="line.1030"></a>
+<span class="sourceLineNo">1031</span>    LOG.info("Closed WAL: " + toString());<a name="line.1031"></a>
+<span class="sourceLineNo">1032</span>  }<a name="line.1032"></a>
+<span class="sourceLineNo">1033</span><a name="line.1033"></a>
+<span class="sourceLineNo">1034</span>  /**<a name="line.1034"></a>
+<span class="sourceLineNo">1035</span>   * @return number of WALs currently in the process of closing.<a name="line.1035"></a>
+<span class="sourceLineNo">1036</span>   */<a name="line.1036"></a>
+<span class="sourceLineNo">1037</span>  public int getInflightWALCloseCount() {<a name="line.1037"></a>
+<span class="sourceLineNo">1038</span>    return inflightWALClosures.size();<a name="line.1038"></a>
+<span class="sourceLineNo">1039</span>  }<a name="line.1039"></a>
+<span class="sourceLineNo">1040</span><a name="line.1040"></a>
+<span class="sourceLineNo">1041</span>  /**<a name="line.1041"></a>
+<span class="sourceLineNo">1042</span>   * updates the sequence number of a specific store. depending on the flag: replaces current seq<a name="line.1042"></a>
+<span class="sourceLineNo">1043</span>   * number if the given seq id is bigger, or even if it is lower than existing one<a name="line.1043"></a>
+<span class="sourceLineNo">1044</span>   */<a name="line.1044"></a>
+<span class="sourceLineNo">1045</span>  @Override<a name="line.1045"></a>
+<span class="sourceLineNo">1046</span>  public void updateStore(byte[] encodedRegionName, byte[] familyName, Long sequenceid,<a name="line.1046"></a>
+<span class="sourceLineNo">1047</span>      boolean onlyIfGreater) {<a name="line.1047"></a>
+<span class="sourceLineNo">1048</span>    sequenceIdAccounting.updateStore(encodedRegionName, familyName, sequenceid, onlyIfGreater);<a name="line.1048"></a>
+<span class="sourceLineNo">1049</span>  }<a name="line.1049"></a>
+<span class="sourceLineNo">1050</span><a name="line.1050"></a>
+<span class="sourceLineNo">1051</span>  protected final SyncFuture getSyncFuture(long sequence, boolean forceSync) {<a name="line.1051"></a>
+<span class="sourceLineNo">1052</span>    return cachedSyncFutures.get().reset(sequence).setForceSync(forceSync);<a name="line.1052"></a>
+<span class="sourceLineNo">1053</span>  }<a name="line.1053"></a>
+<span class="sourceLineNo">1054</span><a name="line.1054"></a>
+<span class="sourceLineNo">1055</span>  protected boolean isLogRollRequested() {<a name="line.1055"></a>
+<span class="sourceLineNo">1056</span>    return rollRequested.get();<a name="line.1056"></a>
+<span class="sourceLineNo">1057</span>  }<a name="line.1057"></a>
+<span class="sourceLineNo">1058</span><a name="line.1058"></a>
+<span class="sourceLineNo">1059</span>  protected final void requestLogRoll(final WALActionsListener.RollRequestReason reason) {<a name="line.1059"></a>
+<span class="sourceLineNo">1060</span>    // If we have already requested a roll, don't do it again<a name="line.1060"></a>
+<span class="sourceLineNo">1061</span>    // And only set rollRequested to true when there is a registered listener<a name="line.1061"></a>
+<span class="sourceLineNo">1062</span>    if (!this.listeners.isEmpty() &amp;&amp; rollRequested.compareAndSet(false, true)) {<a name="line.1062"></a>
+<span class="sourceLineNo">1063</span>      for (WALActionsListener i : this.listeners) {<a name="line.1063"></a>
+<span class="sourceLineNo">1064</span>        i.logRollRequested(reason);<a name="line.1064"></a>
+<span class="sourceLineNo">1065</span>      }<a name="line.1065"></a>
+<span class="sourceLineNo">1066</span>    }<a name="line.1066"></a>
+<span class="sourceLineNo">1067</span>  }<a name="line.1067"></a>
+<span class="sourceLineNo">1068</span><a name="line.1068"></a>
+<span class="sourceLineNo">1069</span>  long getUnflushedEntriesCount() {<a name="line.1069"></a>
+<span class="sourceLineNo">1070</span>    long highestSynced = this.highestSyncedTxid.get();<a name="line.1070"></a>
+<span class="sourceLineNo">1071</span>    long highestUnsynced = this.highestUnsyncedTxid;<a name="line.1071"></a>
+<span class="sourceLineNo">1072</span>    return highestSynced &gt;= highestUnsynced ? 0 : highestUnsynced - highestSynced;<a name="line.1072"></a>
 <span class="sourceLineNo">1073</span>  }<a name="line.1073"></a>
 <span class="sourceLineNo">1074</span><a name="line.1074"></a>
-<span class="sourceLineNo">1075</span>  protected final boolean appendEntry(W writer, FSWALEntry entry) throws IOException {<a name="line.1075"></a>
-<span class="sourceLineNo">1076</span>    // TODO: WORK ON MAKING THIS APPEND FASTER. DOING WAY TOO MUCH WORK WITH CPs, PBing, etc.<a name="line.1076"></a>
-<span class="sourceLineNo">1077</span>    atHeadOfRingBufferEventHandlerAppend();<a name="line.1077"></a>
-<span class="sourceLineNo">1078</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.1078"></a>
-<span class="sourceLineNo">1079</span>    byte[] encodedRegionName = entry.getKey().getEncodedRegionName();<a name="line.1079"></a>
-<span class="sourceLineNo">1080</span>    long regionSequenceId = entry.getKey().getSequenceId();<a name="line.1080"></a>
-<span class="sourceLineNo">1081</span><a name="line.1081"></a>
-<span class="sourceLineNo">1082</span>    // Edits are empty, there is nothing to append. Maybe empty when we are looking for a<a name="line.1082"></a>
-<span class="sourceLineNo">1083</span>    // region sequence id only, a region edit/sequence id that is not associated with an actual<a name="line.1083"></a>
-<span class="sourceLineNo">1084</span>    // edit. It has to go through all the rigmarole to be sure we have the right ordering.<a name="line.1084"></a>
-<span class="sourceLineNo">1085</span>    if (entry.getEdit().isEmpty()) {<a name="line.1085"></a>
-<span class="sourceLineNo">1086</span>      return false;<a name="line.1086"></a>
-<span class="sourceLineNo">1087</span>    }<a name="line.1087"></a>
-<span class="sourceLineNo">1088</span><a name="line.1088"></a>
-<span class="sourceLineNo">1089</span>    // Coprocessor hook.<a name="line.1089"></a>
-<span class="sourceLineNo">1090</span>    coprocessorHost.preWALWrite(entry.getRegionInfo(), entry.getKey(), entry.getEdit());<a name="line.1090"></a>
-<span class="sourceLineNo">1091</span>    if (!listeners.isEmpty()) {<a name="line.1091"></a>
-<span class="sourceLineNo">1092</span>      for (WALActionsListener i : listeners) {<a name="line.1092"></a>
-<span class="sourceLineNo">1093</span>        i.visitLogEntryBeforeWrite(entry.getKey(), entry.getEdit());<a name="line.1093"></a>
-<span class="sourceLineNo">1094</span>      }<a name="line.1094"></a>
-<span class="sourceLineNo">1095</span>    }<a name="line.1095"></a>
-<span class="sourceLineNo">1096</span>    doAppend(writer, entry);<a name="line.1096"></a>
-<span class="sourceLineNo">1097</span>    assert highestUnsyncedTxid &lt; entry.getTxid();<a name="line.1097"></a>
-<span class="sourceLineNo">1098</span>    highestUnsyncedTxid = entry.getTxid();<a name="line.1098"></a>
-<span class="sourceLineNo">1099</span>    if (entry.isCloseRegion()) {<a name="line.1099"></a>
-<span class="sourceLineNo">1100</span>      // let's clean all the records of this region<a name="line.1100"></a>
-<span class="sourceLineNo">1101</span>      sequenceIdAccounting.onRegionClose(encodedRegionName);<a name="line.1101"></a>
-<span class="sourceLineNo">1102</span>    } else {<a name="line.1102"></a>
-<span class="sourceLineNo">1103</span>      sequenceIdAccounting.update(encodedRegionName, entry.getFamilyNames(), regionSequenceId,<a name="line.1103"></a>
-<span class="sourceLineNo">1104</span>        entry.isInMemStore());<a name="line.1104"></a>
-<span class="sourceLineNo">1105</span>    }<a name="line.1105"></a>
-<span class="sourceLineNo">1106</span>    coprocessorHost.postWALWrite(entry.getRegionInfo(), entry.getKey(), entry.getEdit());<a name="line.1106"></a>
-<span class="sourceLineNo">1107</span>    // Update metrics.<a name="line.1107"></a>
-<span class="sourceLineNo">1108</span>    postAppend(entry, EnvironmentEdgeManager.currentTime() - start);<a name="line.1108"></a>
-<span class="sourceLineNo">1109</span>    numEntries.incrementAndGet();<a name="line.1109"></a>
-<span class="sourceLineNo">1110</span>    return true;<a name="line.1110"></a>
-<span class="sourceLineNo">1111</span>  }<a name="line.1111"></a>
-<span class="sourceLineNo">1112</span><a name="line.1112"></a>
-<span class="sourceLineNo">1113</span>  private long postAppend(final Entry e, final long elapsedTime) throws IOException {<a name="line.1113"></a>
-<span class="sourceLineNo">1114</span>    long len = 0;<a name="line.1114"></a>
-<span class="sourceLineNo">1115</span>    if (!listeners.isEmpty()) {<a name="line.1115"></a>
-<span class="sourceLineNo">1116</span>      for (Cell cell : e.getEdit().getCells()) {<a name="line.1116"></a>
-<span class="sourceLineNo">1117</span>        len += PrivateCellUtil.estimatedSerializedSizeOf(cell);<a name="line.1117"></a>
-<span class="sourceLineNo">1118</span>      }<a name="line.1118"></a>
-<span class="sourceLineNo">1119</span>      for (WALActionsListener listener : listeners) {<a name="line.1119"></a>
-<span class="sourceLineNo">1120</span>        listener.postAppend(len, elapsedTime, e.getKey(), e.getEdit());<a name="line.1120"></a>
-<span class="sourceLineNo">1121</span>      }<a name="line.1121"></a>
-<span class="sourceLineNo">1122</span>    }<a name="line.1122"></a>
-<span class="sourceLineNo">1123</span>    return len;<a name="line.1123"></a>
-<span class="sourceLineNo">1124</span>  }<a name="line.1124"></a>
-<span class="sourceLineNo">1125</span><a name="line.1125"></a>
-<span class="sourceLineNo">1126</span>  protected final void postSync(long timeInNanos, int handlerSyncs) {<a name="line.1126"></a>
-<span class="sourceLineNo">1127</span>    if (timeInNanos &gt; this.slowSyncNs) {<a name="line.1127"></a>
-<span class="sourceLineNo">1128</span>      String msg = new StringBuilder().append("Slow sync cost: ")<a name="line.1128"></a>
-<span class="sourceLineNo">1129</span>          .append(TimeUnit.NANOSECONDS.toMillis(timeInNanos))<a name="line.1129"></a>
-<span class="sourceLineNo">1130</span>          .append(" ms, current pipeline: ")<a name="line.1130"></a>
-<span class="sourceLineNo">1131</span>          .append(Arrays.toString(getPipeline())).toString();<a name="line.1131"></a>
-<span class="sourceLineNo">1132</span>      LOG.info(msg);<a name="line.1132"></a>
-<span class="sourceLineNo">1133</span>      if (timeInNanos &gt; this.rollOnSyncNs) {<a name="line.1133"></a>
-<span class="sourceLineNo">1134</span>        // A single sync took too long.<a name="line.1134"></a>
-<span class="sourceLineNo">1135</span>        // Elsewhere in checkSlowSync, called from checkLogRoll, we will look at cumulative<a name="line.1135"></a>
-<span class="sourceLineNo">1136</span>        // effects. Here we have a single data point that indicates we should take immediate<a name="line.1136"></a>
-<span class="sourceLineNo">1137</span>        // action, so do so.<a name="line.1137"></a>
-<span class="sourceLineNo">1138</span>        LOG.warn("Requesting log roll because we exceeded slow sync threshold; time=" +<a name="line.1138"></a>
-<span class="sourceLineNo">1139</span>          TimeUnit.NANOSECONDS.toMillis(timeInNanos) + " ms, threshold=" +<a name="line.1139"></a>
-<span class="sourceLineNo">1140</span>          TimeUnit.NANOSECONDS.toMillis(rollOnSyncNs) + " ms, current pipeline: " +<a name="line.1140"></a>
-<span class="sourceLineNo">1141</span>          Arrays.toString(getPipeline()));<a name="line.1141"></a>
-<span class="sourceLineNo">1142</span>        requestLogRoll(SLOW_SYNC);<a name="line.1142"></a>
-<span class="sourceLineNo">1143</span>      }<a name="line.1143"></a>
-<span class="sourceLineNo">1144</span>      slowSyncCount.incrementAndGet(); // it's fine to unconditionally increment this<a name="line.1144"></a>
-<span class="sourceLineNo">1145</span>    }<a name="line.1145"></a>
-<span class="sourceLineNo">1146</span>    if (!listeners.isEmpty()) {<a name="line.1146"></a>
-<span class="sourceLineNo">1147</span>      for (WALActionsListener listener : listeners) {<a name="line.1147"></a>
-<span class="sourceLineNo">1148</span>        listener.postSync(timeInNanos, handlerSyncs);<a name="line.1148"></a>
-<span class="sourceLineNo">1149</span>      }<a name="line.1149"></a>
-<span class="sourceLineNo">1150</span>    }<a name="line.1150"></a>
-<span class="sourceLineNo">1151</span>  }<a name="line.1151"></a>
-<span class="sourceLineNo">1152</span><a name="line.1152"></a>
-<span class="sourceLineNo">1153</span>  protected final long stampSequenceIdAndPublishToRingBuffer(RegionInfo hri, WALKeyImpl key,<a name="line.1153"></a>
-<span class="sourceLineNo">1154</span>    WALEdit edits, boolean inMemstore, RingBuffer&lt;RingBufferTruck&gt; ringBuffer) throws IOException {<a name="line.1154"></a>
-<span class="sourceLineNo">1155</span>    if (this.closed) {<a name="line.1155"></a>
-<span class="sourceLineNo">1156</span>      throw new IOException(<a name="line.1156"></a>
-<span class="sourceLineNo">1157</span>        "Cannot append; log is closed, regionName = " + hri.getRegionNameAsString());<a name="line.1157"></a>
-<span class="sourceLineNo">1158</span>    }<a name="line.1158"></a>
-<span class="sourceLineNo">1159</span>    MutableLong txidHolder = new MutableLong();<a name="line.1159"></a>
-<span class="sourceLineNo">1160</span>    MultiVersionConcurrencyControl.WriteEntry we = key.getMvcc().begin(() -&gt; {<a name="line.1160"></a>
-<span class="sourceLineNo">1161</span>      txidHolder.setValue(ringBuffer.next());<a name="line.1161"></a>
-<span class="sourceLineNo">1162</span>    });<a name="line.1162"></a>
-<span class="sourceLineNo">1163</span>    long txid = txidHolder.longValue();<a name="line.1163"></a>
-<span class="sourceLineNo">1164</span>    ServerCall&lt;?&gt; rpcCall = RpcServer.getCurrentCall().filter(c -&gt; c instanceof ServerCall)<a name="line.1164"></a>
-<span class="sourceLineNo">1165</span>      .filter(c -&gt; c.getCellScanner() != null).map(c -&gt; (ServerCall) c).orElse(null);<a name="line.1165"></a>
-<span class="sourceLineNo">1166</span>    try {<a name="line.1166"></a>
-<span class="sourceLineNo">1167</span>      FSWALEntry entry = new FSWALEntry(txid, key, edits, hri, inMemstore, rpcCall);<a name="line.1167"></a>
-<span class="sourceLineNo">1168</span>      entry.stampRegionSequenceId(we);<a name="line.1168"></a>
-<span class="sourceLineNo">1169</span>      ringBuffer.get(txid).load(entry);<a name="line.1169"></a>
-<span class="sourceLineNo">1170</span>    } finally {<a name="line.1170"></a>
-<span class="sourceLineNo">1171</span>      ringBuffer.publish(txid);<a name="line.1171"></a>
-<span class="sourceLineNo">1172</span>    }<a name="line.1172"></a>
-<span class="sourceLineNo">1173</span>    return txid;<a name="line.1173"></a>
-<span class="sourceLineNo">1174</span>  }<a name="line.1174"></a>
-<span class="sourceLineNo">1175</span><a name="line.1175"></a>
-<span class="sourceLineNo">1176</span>  @Override<a name="line.1176"></a>
-<span class="sourceLineNo">1177</span>  public String toString() {<a name="line.1177"></a>
-<span class="sourceLineNo">1178</span>    return implClassName + " " + walFilePrefix + ":" + walFileSuffix + "(num " + filenum + ")";<a name="line.1178"></a>
-<span class="sourceLineNo">1179</span>  }<a name="line.1179"></a>
-<span class="sourceLineNo">1180</span><a name="line.1180"></a>
-<span class="sourceLineNo">1181</span>  /**<a name="line.1181"></a>
-<span class="sourceLineNo">1182</span>   * if the given {@code path} is being written currently, then return its length.<a name="line.1182"></a>
-<span class="sourceLineNo">1183</span>   * &lt;p&gt;<a name="line.1183"></a>
-<span class="sourceLineNo">1184</span>   * This is used by replication to prevent replicating unacked log entries. See<a name="line.1184"></a>
-<span class="sourceLineNo">1185</span>   * https://issues.apache.org/jira/browse/HBASE-14004 for more details.<a name="line.1185"></a>
-<span class="sourceLineNo">1186</span>   */<a name="line.1186"></a>
+<span class="sourceLineNo">1075</span>  boolean isUnflushedEntries() {<a name="line.1075"></a>
+<span class="sourceLineNo">1076</span>    return getUnflushedEntriesCount() &gt; 0;<a name="line.1076"></a>
+<span class="sourceLineNo">1077</span>  }<a name="line.1077"></a>
+<span class="sourceLineNo">1078</span><a name="line.1078"></a>
+<span class="sourceLineNo">1079</span>  /**<a name="line.1079"></a>
+<span class="sourceLineNo">1080</span>   * Exposed for testing only. Use to tricks like halt the ring buffer appending.<a name="line.1080"></a>
+<span class="sourceLineNo">1081</span>   */<a name="line.1081"></a>
+<span class="sourceLineNo">1082</span>  protected void atHeadOfRingBufferEventHandlerAppend() {<a name="line.1082"></a>
+<span class="sourceLineNo">1083</span>    // Noop<a name="line.1083"></a>
+<span class="sourceLineNo">1084</span>  }<a name="line.1084"></a>
+<span class="sourceLineNo">1085</span><a name="line.1085"></a>
+<span class="sourceLineNo">1086</span>  protected final boolean appendEntry(W writer, FSWALEntry entry) throws IOException {<a name="line.1086"></a>
+<span class="sourceLineNo">1087</span>    // TODO: WORK ON MAKING THIS APPEND FASTER. DOING WAY TOO MUCH WORK WITH CPs, PBing, etc.<a name="line.1087"></a>
+<span class="sourceLineNo">1088</span>    atHeadOfRingBufferEventHandlerAppend();<a name="line.1088"></a>
+<span class="sourceLineNo">1089</span>    long start = EnvironmentEdgeManager.currentTime();<a name="line.1089"></a>
+<span class="sourceLineNo">1090</span>    byte[] encodedRegionName = entry.getKey().getEncodedRegionName();<a name="line.1090"></a>
+<span class="sourceLineNo">1091</span>    long regionSequenceId = entry.getKey().getSequenceId();<a name="line.1091"></a>
+<span class="sourceLineNo">1092</span><a name="line.1092"></a>
+<span class="sourceLineNo">1093</span>    // Edits are empty, there is nothing to append. Maybe empty when we are looking for a<a name="line.1093"></a>
+<span class="sourceLineNo">1094</span>    // region sequence id only, a region edit/sequence id that is not associated with an actual<a name="line.1094"></a>
+<span class="sourceLineNo">1095</span>    // edit. It has to go through all the rigmarole to be sure we have the right ordering.<a name="line.1095"></a>
+<span class="sourceLineNo">1096</span>    if (entry.getEdit().isEmpty()) {<a name="line.1096"></a>
+<span class="sourceLineNo">1097</span>      return false;<a name="line.1097"></a>
+<span class="sourceLineNo">1098</span>    }<a name="line.1098"></a>
+<span class="sourceLineNo">1099</span><a name="line.1099"></a>
+<span class="sourceLineNo">1100</span>    // Coprocessor hook.<a name="line.1100"></a>
+<span class="sourceLineNo">1101</span>    coprocessorHost.preWALWrite(entry.getRegionInfo(), entry.getKey(), entry.getEdit());<a name="line.1101"></a>
+<span class="sourceLineNo">1102</span>    if (!listeners.isEmpty()) {<a name="line.1102"></a>
+<span class="sourceLineNo">1103</span>      for (WALActionsListener i : listeners) {<a name="line.1103"></a>
+<span class="sourceLineNo">1104</span>        i.visitLogEntryBeforeWrite(entry.getKey(), entry.getEdit());<a name="line.1104"></a>
+<span class="sourceLineNo">1105</span>      }<a name="line.1105"></a>
+<span class="sourceLineNo">1106</span>    }<a name="line.1106"></a>
+<span class="sourceLineNo">1107</span>    doAppend(writer, entry);<a name="line.1107"></a>
+<span class="sourceLineNo">1108</span>    assert highestUnsyncedTxid &lt; entry.getTxid();<a name="line.1108"></a>
+<span class="sourceLineNo">1109</span>    highestUnsyncedTxid = entry.getTxid();<a name="line.1109"></a>
+<span class="sourceLineNo">1110</span>    if (entry.isCloseRegion()) {<a name="line.1110"></a>
+<span class="sourceLineNo">1111</span>      // let's clean all the records of this region<a name="line.1111"></a>
+<span class="sourceLineNo">1112</span>      sequenceIdAccounting.onRegionClose(encodedRegionName);<a name="line.1112"></a>
+<span class="sourceLineNo">1113</span>    } else {<a name="line.1113"></a>
+<span class="sourceLineNo">1114</span>      sequenceIdAccounting.update(encodedRegionName, entry.getFamilyNames(), regionSequenceId,<a name="line.1114"></a>
+<span class="sourceLineNo">1115</span>        entry.isInMemStore());<a name="line.1115"></a>
+<span class="sourceLineNo">1116</span>    }<a name="line.1116"></a>
+<span class="sourceLineNo">1117</span>    coprocessorHost.postWALWrite(entry.getRegionInfo(), entry.getKey(), entry.getEdit());<a name="line.1117"></a>
+<span class="sourceLineNo">1118</span>    // Update metrics.<a name="line.1118"></a>
+<span class="sourceLineNo">1119</span>    postAppend(entry, EnvironmentEdgeManager.currentTime() - start);<a name="line.1119"></a>
+<span class="sourceLineNo">1120</span>    numEntries.incrementAndGet();<a name="line.1120"></a>
+<span class="sourceLineNo">1121</span>    return true;<a name="line.1121"></a>
+<span class="sourceLineNo">1122</span>  }<a name="line.1122"></a>
+<span class="sourceLineNo">1123</span><a name="line.1123"></a>
+<span class="sourceLineNo">1124</span>  private long postAppend(final Entry e, final long elapsedTime) throws IOException {<a name="line.1124"></a>
+<span class="sourceLineNo">1125</span>    long len = 0;<a name="line.1125"></a>
+<span class="sourceLineNo">1126</span>    if (!listeners.isEmpty()) {<a name="line.1126"></a>
+<span class="sourceLineNo">1127</span>      for (Cell cell : e.getEdit().getCells()) {<a name="line.1127"></a>
+<span class="sourceLineNo">1128</span>        len += PrivateCellUtil.estimatedSerializedSizeOf(cell);<a name="line.1128"></a>
+<span class="sourceLineNo">1129</span>      }<a name="line.1129"></a>
+<span class="sourceLineNo">1130</span>      for (WALActionsListener listener : listeners) {<a name="line.1130"></a>
+<span class="sourceLineNo">1131</span>        listener.postAppend(len, elapsedTime, e.getKey(), e.getEdit());<a name="line.1131"></a>
+<span class="sourceLineNo">1132</span>      }<a name="line.1132"></a>
+<span class="sourceLineNo">1133</span>    }<a name="line.1133"></a>
+<span class="sourceLineNo">1134</span>    return len;<a name="line.1134"></a>
+<span class="sourceLineNo">1135</span>  }<a name="line.1135"></a>
+<span class="sourceLineNo">1136</span><a name="line.1136"></a>
+<span class="sourceLineNo">1137</span>  protected final void postSync(long timeInNanos, int handlerSyncs) {<a name="line.1137"></a>
+<span class="sourceLineNo">1138</span>    if (timeInNanos &gt; this.slowSyncNs) {<a name="line.1138"></a>
+<span class="sourceLineNo">1139</span>      String msg = new StringBuilder().append("Slow sync cost: ")<a name="line.1139"></a>
+<span class="sourceLineNo">1140</span>          .append(TimeUnit.NANOSECONDS.toMillis(timeInNanos))<a name="line.1140"></a>
+<span class="sourceLineNo">1141</span>          .append(" ms, current pipeline: ")<a name="line.1141"></a>
+<span class="sourceLineNo">1142</span>          .append(Arrays.toString(getPipeline())).toString();<a name="line.1142"></a>
+<span class="sourceLineNo">1143</span>      LOG.info(msg);<a name="line.1143"></a>
+<span class="sourceLineNo">1144</span>      if (timeInNanos &gt; this.rollOnSyncNs) {<a name="line.1144"></a>
+<span class="sourceLineNo">1145</span>        // A single sync took too long.<a name="line.1145"></a>
+<span class="sourceLineNo">1146</span>        // Elsewhere in checkSlowSync, called from checkLogRoll, we will look at cumulative<a name="line.1146"></a>
+<span class="sourceLineNo">1147</span>        // effects. Here we have a single data point that indicates we should take immediate<a name="line.1147"></a>
+<span class="sourceLineNo">1148</span>        // action, so do so.<a name="line.1148"></a>
+<span class="sourceLineNo">1149</span>        LOG.warn("Requesting log roll because we exceeded slow sync threshold; time=" +<a name="line.1149"></a>
+<span class="sourceLineNo">1150</span>          TimeUnit.NANOSECONDS.toMillis(timeInNanos) + " ms, threshold=" +<a name="line.1150"></a>
+<span class="sourceLineNo">1151</span>          TimeUnit.NANOSECONDS.toMillis(rollOnSyncNs) + " ms, current pipeline: " +<a name="line.1151"></a>
+<span class="sourceLineNo">1152</span>          Arrays.toString(getPipeline()));<a name="line.1152"></a>
+<span class="sourceLineNo">1153</span>        requestLogRoll(SLOW_SYNC);<a name="line.1153"></a>
+<span class="sourceLineNo">1154</span>      }<a name="line.1154"></a>
+<span class="sourceLineNo">1155</span>      slowSyncCount.incrementAndGet(); // it's fine to unconditionally increment this<a name="line.1155"></a>
+<span class="sourceLineNo">1156</span>    }<a name="line.1156"></a>
+<span class="sourceLineNo">1157</span>    if (!listeners.isEmpty()) {<a name="line.1157"></a>
+<span class="sourceLineNo">1158</span>      for (WALActionsListener listener : listeners) {<a name="line.1158"></a>
+<span class="sourceLineNo">1159</span>        listener.postSync(timeInNanos, handlerSyncs);<a name="line.1159"></a>
+<span class="sourceLineNo">1160</span>      }<a name="line.1160"></a>
+<span class="sourceLineNo">1161</span>    }<a name="line.1161"></a>
+<span class="sourceLineNo">1162</span>  }<a name="line.1162"></a>
+<span class="sourceLineNo">1163</span><a name="line.1163"></a>
+<span class="sourceLineNo">1164</span>  protected final long stampSequenceIdAndPublishToRingBuffer(RegionInfo hri, WALKeyImpl key,<a name="line.1164"></a>
+<span class="sourceLineNo">1165</span>    WALEdit edits, boolean inMemstore, RingBuffer&lt;RingBufferTruck&gt; ringBuffer) throws IOException {<a name="line.1165"></a>
+<span class="sourceLineNo">1166</span>    if (this.closed) {<a name="line.1166"></a>
+<span class="sourceLineNo">1167</span>      throw new IOException(<a name="line.1167"></a>
+<span class="sourceLineNo">1168</span>        "Cannot append; log is closed, regionName = " + hri.getRegionNameAsString());<a name="line.1168"></a>
+<span class="sourceLineNo">1169</span>    }<a name="line.1169"></a>
+<span class="sourceLineNo">1170</span>    MutableLong txidHolder = new MutableLong();<a name="line.1170"></a>
+<span class="sourceLineNo">1171</span>    MultiVersionConcurrencyControl.WriteEntry we = key.getMvcc().begin(() -&gt; {<a name="line.1171"></a>
+<span class="sourceLineNo">1172</span>      txidHolder.setValue(ringBuffer.next());<a name="line.1172"></a>
+<span class="sourceLineNo">1173</span>    });<a name="line.1173"></a>
+<span class="sourceLineNo">1174</span>    long txid = txidHolder.longValue();<a name="line.1174"></a>
+<span class="sourceLineNo">1175</span>    ServerCall&lt;?&gt; rpcCall = RpcServer.getCurrentCall().filter(c -&gt; c instanceof ServerCall)<a name="line.1175"></a>
+<span class="sourceLineNo">1176</span>      .filter(c -&gt; c.getCellScanner() != null).map(c -&gt; (ServerCall) c).orElse(null);<a name="line.1176"></a>
+<span class="sourceLineNo">1177</span>    try {<a name="line.1177"></a>
+<span class="sourceLineNo">1178</span>      FSWALEntry entry = new FSWALEntry(txid, key, edits, hri, inMemstore, rpcCall);<a name="line.1178"></a>
+<span class="sourceLineNo">1179</span>      entry.stampRegionSequenceId(we);<a name="line.1179"></a>
+<span class="sourceLineNo">1180</span>      ringBuffer.get(txid).load(entry);<a name="line.1180"></a>
+<span class="sourceLineNo">1181</span>    } finally {<a name="line.1181"></a>
+<span class="sourceLineNo">1182</span>      ringBuffer.publish(txid);<a name="line.1182"></a>
+<span class="sourceLineNo">1183</span>    }<a name="line.1183"></a>
+<span class="sourceLineNo">1184</span>    return txid;<a name="line.1184"></a>
+<span class="sourceLineNo">1185</span>  }<a name="line.1185"></a>
+<span class="sourceLineNo">1186</span><a name="line.1186"></a>
 <span class="sourceLineNo">1187</span>  @Override<a name="line.1187"></a>
-<span class="sourceLineNo">1188</span>  public OptionalLong getLogFileSizeIfBeingWritten(Path path) {<a name="line.1188"></a>
-<span class="sourceLineNo">1189</span>    rollWriterLock.lock();<a name="line.1189"></a>
-<span class="sourceLineNo">1190</span>    try {<a name="line.1190"></a>
-<span class="sourceLineNo">1191</span>      Path currentPath = getOldPath();<a name="line.1191"></a>
-<span class="sourceLineNo">1192</span>      if (path.equals(currentPath)) {<a name="line.1192"></a>
-<span class="sourceLineNo">1193</span>        W writer = this.writer;<a name="line.1193"></a>
-<span class="sourceLineNo">1194</span>        return writer != null ? OptionalLong.of(writer.getSyncedLength()) : OptionalLong.empty();<a name="line.1194"></a>
-<span class="sourceLineNo">1195</span>      } else {<a name="line.1195"></a>
-<span class="sourceLineNo">1196</span>        return OptionalLong.empty();<a name="line.1196"></a>
-<span class="sourceLineNo">1197</span>      }<a name="line.1197"></a>
-<span class="sourceLineNo">1198</span>    } finally {<a name="line.1198"></a>
-<span class="sourceLineNo">1199</span>      rollWriterLock.unlock();<a name="line.1199"></a>
-<span class="sourceLineNo">1200</span>    }<a name="line.1200"></a>
-<span class="sourceLineNo">1201</span>  }<a name="line.1201"></a>
-<span class="sourceLineNo">1202</span><a name="line.1202"></a>
-<span class="sourceLineNo">1203</span>  @Override<a name="line.1203"></a>
-<span class="sourceLineNo">1204</span>  public long appendData(RegionInfo info, WALKeyImpl key, WALEdit edits) throws IOException {<a name="line.1204"></a>
-<span class="sourceLineNo">1205</span>    return TraceUtil.trace(() -&gt; append(info, key, edits, true),<a name="line.1205"></a>
-<span class="sourceLineNo">1206</span>      () -&gt; createSpan("WAL.appendData"));<a name="line.1206"></a>
-<span class="sourceLineNo">1207</span>  }<a name="line.1207"></a>
-<span class="sourceLineNo">1208</span><a name="line.1208"></a>
-<span class="sourceLineNo">1209</span>  @Override<a name="line.1209"></a>
-<span class="sourceLineNo">1210</span>  public long appendMarker(RegionInfo info, WALKeyImpl key, WALEdit edits) throws IOException {<a name="line.1210"></a>
-<span class="sourceLineNo">1211</span>    return TraceUtil.trace(() -&gt; append(info, key, edits, false),<a name="line.1211"></a>
-<span class="sourceLineNo">1212</span>      () -&gt; createSpan("WAL.appendMarker"));<a name="line.1212"></a>
-<span class="sourceLineNo">1213</span>  }<a name="line.1213"></a>
-<span class="sourceLineNo">1214</span><a name="line.1214"></a>
-<span class="sourceLineNo">1215</span>  /**<a name="line.1215"></a>
-<span class="sourceLineNo">1216</span>   * Append a set of edits to the WAL.<a name="line.1216"></a>
-<span class="sourceLineNo">1217</span>   * &lt;p/&gt;<a name="line.1217"></a>
-<span class="sourceLineNo">1218</span>   * The WAL is not flushed/sync'd after this transaction completes BUT on return this edit must<a name="line.1218"></a>
-<span class="sourceLineNo">1219</span>   * have its region edit/sequence id assigned else it messes up our unification of mvcc and<a name="line.1219"></a>
-<span class="sourceLineNo">1220</span>   * sequenceid. On return &lt;code&gt;key&lt;/code&gt; will have the region edit/sequence id filled in.<a name="line.1220"></a>
-<span class="sourceLineNo">1221</span>   * &lt;p/&gt;<a name="line.1221"></a>
-<span class="sourceLineNo">1222</span>   * NOTE: This append, at a time that is usually after this call returns, starts an mvcc<a name="line.1222"></a>
-<span class="sourceLineNo">1223</span>   * transaction by calling 'begin' wherein which we assign this update a sequenceid. At assignment<a name="line.1223"></a>
-<span class="sourceLineNo">1224</span>   * time, we stamp all the passed in Cells inside WALEdit with their sequenceId. You must<a name="line.1224"></a>
-<span class="sourceLineNo">1225</span>   * 'complete' the transaction this mvcc transaction by calling<a name="line.1225"></a>
-<span class="sourceLineNo">1226</span>   * MultiVersionConcurrencyControl#complete(...) or a variant otherwise mvcc will get stuck. Do it<a name="line.1226"></a>
-<span class="sourceLineNo">1227</span>   * in the finally of a try/finally block within which this append lives and any subsequent<a name="line.1227"></a>
-<span class="sourceLineNo">1228</span>   * operations like sync or update of memstore, etc. Get the WriteEntry to pass mvcc out of the<a name="line.1228"></a>
-<span class="sourceLineNo">1229</span>   * passed in WALKey &lt;code&gt;walKey&lt;/code&gt; parameter. Be warned that the WriteEntry is not<a name="line.1229"></a>
-<span class="sourceLineNo">1230</span>   * immediately available on return from this method. It WILL be available subsequent to a sync of<a name="line.1230"></a>
-<span class="sourceLineNo">1231</span>   * this append; otherwise, you will just have to wait on the WriteEntry to get filled in.<a name="line.1231"></a>
-<span class="sourceLineNo">1232</span>   * @param info the regioninfo associated with append<a name="line.1232"></a>
-<span class="sourceLineNo">1233</span>   * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.1233"></a>
-<span class="sourceLineNo">1234</span>   * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.1234"></a>
-<span class="sourceLineNo">1235</span>   *          sequence id that is after all currently appended edits.<a name="line.1235"></a>
-<span class="sourceLineNo">1236</span>   * @param inMemstore Always true except for case where we are writing a region event meta<a name="line.1236"></a>
-<span class="sourceLineNo">1237</span>   *          marker edit, for example, a compaction completion record into the WAL or noting a<a name="line.1237"></a>
-<span class="sourceLineNo">1238</span>   *          Region Open event. In these cases the entry is just so we can finish an unfinished<a name="line.1238"></a>
-<span class="sourceLineNo">1239</span>   *          compaction after a crash when the new Server reads the WAL on recovery, etc. These<a name="line.1239"></a>
-<span class="sourceLineNo">1240</span>   *          transition event 'Markers' do not go via the memstore. When memstore is false,<a name="line.1240"></a>
-<span class="sourceLineNo">1241</span>   *          we presume a Marker event edit.<a name="line.1241"></a>
-<span class="sourceLineNo">1242</span>   * @return Returns a 'transaction id' and &lt;code&gt;key&lt;/code&gt; will have the region edit/sequence id<a name="line.1242"></a>
-<span class="sourceLineNo">1243</span>   *         in it.<a name="line.1243"></a>
-<span class="sourceLineNo">1244</span>   */<a name="line.1244"></a>
-<span class="sourceLineNo">1245</span>  protected abstract long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore)<a name="line.1245"></a>
-<span class="sourceLineNo">1246</span>      throws IOException;<a name="line.1246"></a>
-<span class="sourceLineNo">1247</span><a name="line.1247"></a>
-<span class="sourceLineNo">1248</span>  protected abstract void doAppend(W writer, FSWALEntry entry) throws IOException;<a name="line.1248"></a>
-<span class="sourceLineNo">1249</span><a name="line.1249"></a>
-<span class="sourceLineNo">1250</span>  protected abstract W createWriterInstance(Path path)<a name="line.1250"></a>
-<span class="sourceLineNo">1251</span>      throws IOException, CommonFSUtils.StreamLacksCapabilityException;<a name="line.1251"></a>
-<span class="sourceLineNo">1252</span><a name="line.1252"></a>
-<span class="sourceLineNo">1253</span>  /**<a name="line.1253"></a>
-<span class="sourceLineNo">1254</span>   * Notice that you need to clear the {@link #rollRequested} flag in this method, as the new writer<a name="line.1254"></a>
-<span class="sourceLineNo">1255</span>   * will begin to work before returning from this method. If we clear the flag after returning from<a name="line.1255"></a>
-<span class="sourceLineNo">1256</span>   * this call, we may miss a roll request. The implementation class should choose a proper place to<a name="line.1256"></a>
-<span class="sourceLineNo">1257</span>   * clear the {@link #rollRequested} flag so we do not miss a roll request, typically before you<a name="line.1257"></a>
-<span class="sourceLineNo">1258</span>   * start writing to the new writer.<a name="line.1258"></a>
-<span class="sourceLineNo">1259</span>   */<a name="line.1259"></a>
-<span class="sourceLineNo">1260</span>  protected abstract void doReplaceWriter(Path oldPath, Path newPath, W nextWriter)<a name="line.1260"></a>
-<span class="sourceLineNo">1261</span>      throws IOException;<a name="line.1261"></a>
-<span class="sourceLineNo">1262</span><a name="line.1262"></a>
-<span class="sourceLineNo">1263</span>  protected abstract void doShutdown() throws IOException;<a name="line.1263"></a>
-<span class="sourceLineNo">1264</span><a name="line.1264"></a>
-<span class="sourceLineNo">1265</span>  protected abstract boolean doCheckLogLowReplication();<a name="line.1265"></a>
-<span class="sourceLineNo">1266</span><a name="line.1266"></a>
-<span class="sourceLineNo">1267</span>  /**<a name="line.1267"></a>
-<span class="sourceLineNo">1268</span>   * @return true if we exceeded the slow sync roll threshold over the last check<a name="line.1268"></a>
-<span class="sourceLineNo">1269</span>   *              interval<a name="line.1269"></a>
-<span class="sourceLineNo">1270</span>   */<a name="line.1270"></a>
-<span class="sourceLineNo">1271</span>  protected boolean doCheckSlowSync() {<a name="line.1271"></a>
-<span class="sourceLineNo">1272</span>    boolean result = false;<a name="line.1272"></a>
-<span class="sourceLineNo">1273</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1273"></a>
-<span class="sourceLineNo">1274</span>    long elapsedTime = now - lastTimeCheckSlowSync;<a name="line.1274"></a>
-<span class="sourceLineNo">1275</span>    if (elapsedTime &gt;= slowSyncCheckInterval) {<a name="line.1275"></a>
-<span class="sourceLineNo">1276</span>      if (slowSyncCount.get() &gt;= slowSyncRollThreshold) {<a name="line.1276"></a>
-<span class="sourceLineNo">1277</span>        if (elapsedTime &gt;= (2 * slowSyncCheckInterval)) {<a name="line.1277"></a>
-<span class="sourceLineNo">1278</span>          // If two or more slowSyncCheckInterval have elapsed this is a corner case<a name="line.1278"></a>
-<span class="sourceLineNo">1279</span>          // where a train of slow syncs almost triggered us but then there was a long<a name="line.1279"></a>
-<span class="sourceLineNo">1280</span>          // interval from then until the one more that pushed us over. If so, we<a name="line.1280"></a>
-<span class="sourceLineNo">1281</span>          // should do nothing and let the count reset.<a name="line.1281"></a>
-<span class="sourceLineNo">1282</span>          if (LOG.isDebugEnabled()) {<a name="line.1282"></a>
-<span class="sourceLineNo">1283</span>            LOG.debug("checkSlowSync triggered but we decided to ignore it; " +<a name="line.1283"></a>
-<span class="sourceLineNo">1284</span>                "count=" + slowSyncCount.get() + ", threshold=" + slowSyncRollThreshold +<a name="line.1284"></a>
-<span class="sourceLineNo">1285</span>                ", elapsedTime=" + elapsedTime +  " ms, slowSyncCheckInterval=" +<a name="line.1285"></a>
-<span class="sourceLineNo">1286</span>                slowSyncCheckInterval + " ms");<a name="line.1286"></a>
-<span class="sourceLineNo">1287</span>          }<a name="line.1287"></a>
-<span class="sourceLineNo">1288</span>          // Fall through to count reset below<a name="line.1288"></a>
-<span class="sourceLineNo">1289</span>        } else {<a name="line.1289"></a>
-<span class="sourceLineNo">1290</span>          LOG.warn("Requesting log roll because we exceeded slow sync threshold; count=" +<a name="line.1290"></a>
-<span class="sourceLineNo">1291</span>            slowSyncCount.get() + ", threshold=" + slowSyncRollThreshold +<a name="line.1291"></a>
-<span class="sourceLineNo">1292</span>            ", current pipeline: " + Arrays.toString(getPipeline()));<a name="line.1292"></a>
-<span class="sourceLineNo">1293</span>          result = true;<a name="line.1293"></a>
-<span class="sourceLineNo">1294</span>        }<a name="line.1294"></a>
-<span class="sourceLineNo">1295</span>      }<a name="line.1295"></a>
-<span class="sourceLineNo">1296</span>      lastTimeCheckSlowSync = now;<a name="line.1296"></a>
-<span class="sourceLineNo">1297</span>      slowSyncCount.set(0);<a name="line.1297"></a>
-<span class="sourceLineNo">1298</span>    }<a name="line.1298"></a>
-<span class="sourceLineNo">1299</span>    return result;<a name="line.1299"></a>
-<span class="sourceLineNo">1300</span>  }<a name="line.1300"></a>
-<span class="sourceLineNo">1301</span><a name="line.1301"></a>
-<span class="sourceLineNo">1302</span>  public void checkLogLowReplication(long checkInterval) {<a name="line.1302"></a>
-<span class="sourceLineNo">1303</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1303"></a>
-<span class="sourceLineNo">1304</span>    if (now - lastTimeCheckLowReplication &lt; checkInterval) {<a name="line.1304"></a>
-<span class="sourceLineNo">1305</span>      return;<a name="line.1305"></a>
-<span class="sourceLineNo">1306</span>    }<a name="line.1306"></a>
-<span class="sourceLineNo">1307</span>    // Will return immediately if we are in the middle of a WAL log roll currently.<a name="line.1307"></a>
-<span class="sourceLineNo">1308</span>    if (!rollWriterLock.tryLock()) {<a name="line.1308"></a>
-<span class="sourceLineNo">1309</span>      return;<a name="line.1309"></a>
-<span class="sourceLineNo">1310</span>    }<a name="line.1310"></a>
-<span class="sourceLineNo">1311</span>    try {<a name="line.1311"></a>
-<span class="sourceLineNo">1312</span>      lastTimeCheckLowReplication = now;<a name="line.1312"></a>
-<span class="sourceLineNo">1313</span>      if (doCheckLogLowReplication()) {<a name="line.1313"></a>
-<span class="sourceLineNo">1314</span>        requestLogRoll(LOW_REPLICATION);<a name="line.1314"></a>
+<span class="sourceLineNo">1188</span>  public String toString() {<a name="line.1188"></a>
+<span class="sourceLineNo">1189</span>    return implClassName + " " + walFilePrefix + ":" + walFileSuffix + "(num " + filenum + ")";<a name="line.1189"></a>
+<span class="sourceLineNo">1190</span>  }<a name="line.1190"></a>
+<span class="sourceLineNo">1191</span><a name="line.1191"></a>
+<span class="sourceLineNo">1192</span>  /**<a name="line.1192"></a>
+<span class="sourceLineNo">1193</span>   * if the given {@code path} is being written currently, then return its length.<a name="line.1193"></a>
+<span class="sourceLineNo">1194</span>   * &lt;p&gt;<a name="line.1194"></a>
+<span class="sourceLineNo">1195</span>   * This is used by replication to prevent replicating unacked log entries. See<a name="line.1195"></a>
+<span class="sourceLineNo">1196</span>   * https://issues.apache.org/jira/browse/HBASE-14004 for more details.<a name="line.1196"></a>
+<span class="sourceLineNo">1197</span>   */<a name="line.1197"></a>
+<span class="sourceLineNo">1198</span>  @Override<a name="line.1198"></a>
+<span class="sourceLineNo">1199</span>  public OptionalLong getLogFileSizeIfBeingWritten(Path path) {<a name="line.1199"></a>
+<span class="sourceLineNo">1200</span>    rollWriterLock.lock();<a name="line.1200"></a>
+<span class="sourceLineNo">1201</span>    try {<a name="line.1201"></a>
+<span class="sourceLineNo">1202</span>      Path currentPath = getOldPath();<a name="line.1202"></a>
+<span class="sourceLineNo">1203</span>      if (path.equals(currentPath)) {<a name="line.1203"></a>
+<span class="sourceLineNo">1204</span>        // Currently active path.<a name="line.1204"></a>
+<span class="sourceLineNo">1205</span>        W writer = this.writer;<a name="line.1205"></a>
+<span class="sourceLineNo">1206</span>        return writer != null ? OptionalLong.of(writer.getSyncedLength()) : OptionalLong.empty();<a name="line.1206"></a>
+<span class="sourceLineNo">1207</span>      } else {<a name="line.1207"></a>
+<span class="sourceLineNo">1208</span>        W temp = inflightWALClosures.get(path.getName());<a name="line.1208"></a>
+<span class="sourceLineNo">1209</span>        if (temp != null) {<a name="line.1209"></a>
+<span class="sourceLineNo">1210</span>          // In the process of being closed, trailer bytes may or may not be flushed.<a name="line.1210"></a>
+<span class="sourceLineNo">1211</span>          // Ensuring that we read all the bytes in a file is critical for correctness of tailing<a name="line.1211"></a>
+<span class="sourceLineNo">1212</span>          // use cases like replication, see HBASE-25924/HBASE-25932.<a name="line.1212"></a>
+<span class="sourceLineNo">1213</span>          return OptionalLong.of(temp.getSyncedLength());<a name="line.1213"></a>
+<span class="sourceLineNo">1214</span>        }<a name="line.1214"></a>
+<span class="sourceLineNo">1215</span>        // Log rolled successfully.<a name="line.1215"></a>
+<span class="sourceLineNo">1216</span>        return OptionalLong.empty();<a name="line.1216"></a>
+<span class="sourceLineNo">1217</span>      }<a name="line.1217"></a>
+<span class="sourceLineNo">1218</span>    } finally {<a name="line.1218"></a>
+<span class="sourceLineNo">1219</span>      rollWriterLock.unlock();<a name="line.1219"></a>
+<span class="sourceLineNo">1220</span>    }<a name="line.1220"></a>
+<span class="sourceLineNo">1221</span>  }<a name="line.1221"></a>
+<span class="sourceLineNo">1222</span><a name="line.1222"></a>
+<span class="sourceLineNo">1223</span>  @Override<a name="line.1223"></a>
+<span class="sourceLineNo">1224</span>  public long appendData(RegionInfo info, WALKeyImpl key, WALEdit edits) throws IOException {<a name="line.1224"></a>
+<span class="sourceLineNo">1225</span>    return TraceUtil.trace(() -&gt; append(info, key, edits, true),<a name="line.1225"></a>
+<span class="sourceLineNo">1226</span>      () -&gt; createSpan("WAL.appendData"));<a name="line.1226"></a>
+<span class="sourceLineNo">1227</span>  }<a name="line.1227"></a>
+<span class="sourceLineNo">1228</span><a name="line.1228"></a>
+<span class="sourceLineNo">1229</span>  @Override<a name="line.1229"></a>
+<span class="sourceLineNo">1230</span>  public long appendMarker(RegionInfo info, WALKeyImpl key, WALEdit edits) throws IOException {<a name="line.1230"></a>
+<span class="sourceLineNo">1231</span>    return TraceUtil.trace(() -&gt; append(info, key, edits, false),<a name="line.1231"></a>
+<span class="sourceLineNo">1232</span>      () -&gt; createSpan("WAL.appendMarker"));<a name="line.1232"></a>
+<span class="sourceLineNo">1233</span>  }<a name="line.1233"></a>
+<span class="sourceLineNo">1234</span><a name="line.1234"></a>
+<span class="sourceLineNo">1235</span>  /**<a name="line.1235"></a>
+<span class="sourceLineNo">1236</span>   * Append a set of edits to the WAL.<a name="line.1236"></a>
+<span class="sourceLineNo">1237</span>   * &lt;p/&gt;<a name="line.1237"></a>
+<span class="sourceLineNo">1238</span>   * The WAL is not flushed/sync'd after this transaction completes BUT on return this edit must<a name="line.1238"></a>
+<span class="sourceLineNo">1239</span>   * have its region edit/sequence id assigned else it messes up our unification of mvcc and<a name="line.1239"></a>
+<span class="sourceLineNo">1240</span>   * sequenceid. On return &lt;code&gt;key&lt;/code&gt; will have the region edit/sequence id filled in.<a name="line.1240"></a>
+<span class="sourceLineNo">1241</span>   * &lt;p/&gt;<a name="line.1241"></a>
+<span class="sourceLineNo">1242</span>   * NOTE: This append, at a time that is usually after this call returns, starts an mvcc<a name="line.1242"></a>
+<span class="sourceLineNo">1243</span>   * transaction by calling 'begin' wherein which we assign this update a sequenceid. At assignment<a name="line.1243"></a>
+<span class="sourceLineNo">1244</span>   * time, we stamp all the passed in Cells inside WALEdit with their sequenceId. You must<a name="line.1244"></a>
+<span class="sourceLineNo">1245</span>   * 'complete' the transaction this mvcc transaction by calling<a name="line.1245"></a>
+<span class="sourceLineNo">1246</span>   * MultiVersionConcurrencyControl#complete(...) or a variant otherwise mvcc will get stuck. Do it<a name="line.1246"></a>
+<span class="sourceLineNo">1247</span>   * in the finally of a try/finally block within which this append lives and any subsequent<a name="line.1247"></a>
+<span class="sourceLineNo">1248</span>   * operations like sync or update of memstore, etc. Get the WriteEntry to pass mvcc out of the<a name="line.1248"></a>
+<span class="sourceLineNo">1249</span>   * passed in WALKey &lt;code&gt;walKey&lt;/code&gt; parameter. Be warned that the WriteEntry is not<a name="line.1249"></a>
+<span class="sourceLineNo">1250</span>   * immediately available on return from this method. It WILL be available subsequent to a sync of<a name="line.1250"></a>
+<span class="sourceLineNo">1251</span>   * this append; otherwise, you will just have to wait on the WriteEntry to get filled in.<a name="line.1251"></a>
+<span class="sourceLineNo">1252</span>   * @param info the regioninfo associated with append<a name="line.1252"></a>
+<span class="sourceLineNo">1253</span>   * @param key Modified by this call; we add to it this edits region edit/sequence id.<a name="line.1253"></a>
+<span class="sourceLineNo">1254</span>   * @param edits Edits to append. MAY CONTAIN NO EDITS for case where we want to get an edit<a name="line.1254"></a>
+<span class="sourceLineNo">1255</span>   *          sequence id that is after all currently appended edits.<a name="line.1255"></a>
+<span class="sourceLineNo">1256</span>   * @param inMemstore Always true except for case where we are writing a region event meta<a name="line.1256"></a>
+<span class="sourceLineNo">1257</span>   *          marker edit, for example, a compaction completion record into the WAL or noting a<a name="line.1257"></a>
+<span class="sourceLineNo">1258</span>   *          Region Open event. In these cases the entry is just so we can finish an unfinished<a name="line.1258"></a>
+<span class="sourceLineNo">1259</span>   *          compaction after a crash when the new Server reads the WAL on recovery, etc. These<a name="line.1259"></a>
+<span class="sourceLineNo">1260</span>   *          transition event 'Markers' do not go via the memstore. When memstore is false,<a name="line.1260"></a>
+<span class="sourceLineNo">1261</span>   *          we presume a Marker event edit.<a name="line.1261"></a>
+<span class="sourceLineNo">1262</span>   * @return Returns a 'transaction id' and &lt;code&gt;key&lt;/code&gt; will have the region edit/sequence id<a name="line.1262"></a>
+<span class="sourceLineNo">1263</span>   *         in it.<a name="line.1263"></a>
+<span class="sourceLineNo">1264</span>   */<a name="line.1264"></a>
+<span class="sourceLineNo">1265</span>  protected abstract long append(RegionInfo info, WALKeyImpl key, WALEdit edits, boolean inMemstore)<a name="line.1265"></a>
+<span class="sourceLineNo">1266</span>      throws IOException;<a name="line.1266"></a>
+<span class="sourceLineNo">1267</span><a name="line.1267"></a>
+<span class="sourceLineNo">1268</span>  protected abstract void doAppend(W writer, FSWALEntry entry) throws IOException;<a name="line.1268"></a>
+<span class="sourceLineNo">1269</span><a name="line.1269"></a>
+<span class="sourceLineNo">1270</span>  protected abstract W createWriterInstance(Path path)<a name="line.1270"></a>
+<span class="sourceLineNo">1271</span>      throws IOException, CommonFSUtils.StreamLacksCapabilityException;<a name="line.1271"></a>
+<span class="sourceLineNo">1272</span><a name="line.1272"></a>
+<span class="sourceLineNo">1273</span>  /**<a name="line.1273"></a>
+<span class="sourceLineNo">1274</span>   * Notice that you need to clear the {@link #rollRequested} flag in this method, as the new writer<a name="line.1274"></a>
+<span class="sourceLineNo">1275</span>   * will begin to work before returning from this method. If we clear the flag after returning from<a name="line.1275"></a>
+<span class="sourceLineNo">1276</span>   * this call, we may miss a roll request. The implementation class should choose a proper place to<a name="line.1276"></a>
+<span class="sourceLineNo">1277</span>   * clear the {@link #rollRequested} flag so we do not miss a roll request, typically before you<a name="line.1277"></a>
+<span class="sourceLineNo">1278</span>   * start writing to the new writer.<a name="line.1278"></a>
+<span class="sourceLineNo">1279</span>   */<a name="line.1279"></a>
+<span class="sourceLineNo">1280</span>  protected abstract void doReplaceWriter(Path oldPath, Path newPath, W nextWriter)<a name="line.1280"></a>
+<span class="sourceLineNo">1281</span>      throws IOException;<a name="line.1281"></a>
+<span class="sourceLineNo">1282</span><a name="line.1282"></a>
+<span class="sourceLineNo">1283</span>  protected abstract void doShutdown() throws IOException;<a name="line.1283"></a>
+<span class="sourceLineNo">1284</span><a name="line.1284"></a>
+<span class="sourceLineNo">1285</span>  protected abstract boolean doCheckLogLowReplication();<a name="line.1285"></a>
+<span class="sourceLineNo">1286</span><a name="line.1286"></a>
+<span class="sourceLineNo">1287</span>  /**<a name="line.1287"></a>
+<span class="sourceLineNo">1288</span>   * @return true if we exceeded the slow sync roll threshold over the last check<a name="line.1288"></a>
+<span class="sourceLineNo">1289</span>   *              interval<a name="line.1289"></a>
+<span class="sourceLineNo">1290</span>   */<a name="line.1290"></a>
+<span class="sourceLineNo">1291</span>  protected boolean doCheckSlowSync() {<a name="line.1291"></a>
+<span class="sourceLineNo">1292</span>    boolean result = false;<a name="line.1292"></a>
+<span class="sourceLineNo">1293</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1293"></a>
+<span class="sourceLineNo">1294</span>    long elapsedTime = now - lastTimeCheckSlowSync;<a name="line.1294"></a>
+<span class="sourceLineNo">1295</span>    if (elapsedTime &gt;= slowSyncCheckInterval) {<a name="line.1295"></a>
+<span class="sourceLineNo">1296</span>      if (slowSyncCount.get() &gt;= slowSyncRollThreshold) {<a name="line.1296"></a>
+<span class="sourceLineNo">1297</span>        if (elapsedTime &gt;= (2 * slowSyncCheckInterval)) {<a name="line.1297"></a>
+<span class="sourceLineNo">1298</span>          // If two or more slowSyncCheckInterval have elapsed this is a corner case<a name="line.1298"></a>
+<span class="sourceLineNo">1299</span>          // where a train of slow syncs almost triggered us but then there was a long<a name="line.1299"></a>
+<span class="sourceLineNo">1300</span>          // interval from then until the one more that pushed us over. If so, we<a name="line.1300"></a>
+<span class="sourceLineNo">1301</span>          // should do nothing and let the count reset.<a name="line.1301"></a>
+<span class="sourceLineNo">1302</span>          if (LOG.isDebugEnabled()) {<a name="line.1302"></a>
+<span class="sourceLineNo">1303</span>            LOG.debug("checkSlowSync triggered but we decided to ignore it; " +<a name="line.1303"></a>
+<span class="sourceLineNo">1304</span>                "count=" + slowSyncCount.get() + ", threshold=" + slowSyncRollThreshold +<a name="line.1304"></a>
+<span class="sourceLineNo">1305</span>                ", elapsedTime=" + elapsedTime +  " ms, slowSyncCheckInterval=" +<a name="line.1305"></a>
+<span class="sourceLineNo">1306</span>                slowSyncCheckInterval + " ms");<a name="line.1306"></a>
+<span class="sourceLineNo">1307</span>          }<a name="line.1307"></a>
+<span class="sourceLineNo">1308</span>          // Fall through to count reset below<a name="line.1308"></a>
+<span class="sourceLineNo">1309</span>        } else {<a name="line.1309"></a>
+<span class="sourceLineNo">1310</span>          LOG.warn("Requesting log roll because we exceeded slow sync threshold; count=" +<a name="line.1310"></a>
+<span class="sourceLineNo">1311</span>            slowSyncCount.get() + ", threshold=" + slowSyncRollThreshold +<a name="line.1311"></a>
+<span class="sourceLineNo">1312</span>            ", current pipeline: " + Arrays.toString(getPipeline()));<a name="line.1312"></a>
+<span class="sourceLineNo">1313</span>          result = true;<a name="line.1313"></a>
+<span class="sourceLineNo">1314</span>        }<a name="line.1314"></a>
 <span class="sourceLineNo">1315</span>      }<a name="line.1315"></a>
-<span class="sourceLineNo">1316</span>    } finally {<a name="line.1316"></a>
-<span class="sourceLineNo">1317</span>      rollWriterLock.unlock();<a name="line.1317"></a>
+<span class="sourceLineNo">1316</span>      lastTimeCheckSlowSync = now;<a name="line.1316"></a>
+<span class="sourceLineNo">1317</span>      slowSyncCount.set(0);<a name="line.1317"></a>
 <span class="sourceLineNo">1318</span>    }<a name="line.1318"></a>
-<span class="sourceLineNo">1319</span>  }<a name="line.1319"></a>
-<span class="sourceLineNo">1320</span><a name="line.1320"></a>
-<span class="sourceLineNo">1321</span>  /**<a name="line.1321"></a>
-<span class="sourceLineNo">1322</span>   * This method gets the pipeline for the current WAL.<a name="line.1322"></a>
-<span class="sourceLineNo">1323</span>   */<a name="line.1323"></a>
-<span class="sourceLineNo">1324</span>  abstract DatanodeInfo[] getPipeline();<a name="line.1324"></a>
-<span class="sourceLineNo">1325</span><a name="line.1325"></a>
-<span class="sourceLineNo">1326</span>  /**<a name="line.1326"></a>
-<span class="sourceLineNo">1327</span>   * This method gets the datanode replication count for the current WAL.<a name="line.1327"></a>
-<span class="sourceLineNo">1328</span>   */<a name="line.1328"></a>
-<span class="sourceLineNo">1329</span>  abstract int getLogReplication();<a name="line.1329"></a>
-<span class="sourceLineNo">1330</span><a name="line.1330"></a>
-<span class="sourceLineNo">1331</span>  private static void split(final Configuration conf, final Path p) throws IOException {<a name="line.1331"></a>
-<span class="sourceLineNo">1332</span>    FileSystem fs = CommonFSUtils.getWALFileSystem(conf);<a name="line.1332"></a>
-<span class="sourceLineNo">1333</span>    if (!fs.exists(p)) {<a name="line.1333"></a>
-<span class="sourceLineNo">1334</span>      throw new FileNotFoundException(p.toString());<a name="line.1334"></a>
-<span class="sourceLineNo">1335</span>    }<a name="line.1335"></a>
-<span class="sourceLineNo">1336</span>    if (!fs.getFileStatus(p).isDirectory()) {<a name="line.1336"></a>
-<span class="sourceLineNo">1337</span>      throw new IOException(p + " is not a directory");<a name="line.1337"></a>
+<span class="sourceLineNo">1319</span>    return result;<a name="line.1319"></a>
+<span class="sourceLineNo">1320</span>  }<a name="line.1320"></a>
+<span class="sourceLineNo">1321</span><a name="line.1321"></a>
+<span class="sourceLineNo">1322</span>  public void checkLogLowReplication(long checkInterval) {<a name="line.1322"></a>
+<span class="sourceLineNo">1323</span>    long now = EnvironmentEdgeManager.currentTime();<a name="line.1323"></a>
+<span class="sourceLineNo">1324</span>    if (now - lastTimeCheckLowReplication &lt; checkInterval) {<a name="line.1324"></a>
+<span class="sourceLineNo">1325</span>      return;<a name="line.1325"></a>
+<span class="sourceLineNo">1326</span>    }<a name="line.1326"></a>
+<span class="sourceLineNo">1327</span>    // Will return immediately if we are in the middle of a WAL log roll currently.<a name="line.1327"></a>
+<span class="sourceLineNo">1328</span>    if (!rollWriterLock.tryLock()) {<a name="line.1328"></a>
+<span class="sourceLineNo">1329</span>      return;<a name="line.1329"></a>
+<span class="sourceLineNo">1330</span>    }<a name="line.1330"></a>
+<span class="sourceLineNo">1331</span>    try {<a name="line.1331"></a>
+<span class="sourceLineNo">1332</span>      lastTimeCheckLowReplication = now;<a name="line.1332"></a>
+<span class="sourceLineNo">1333</span>      if (doCheckLogLowReplication()) {<a name="line.1333"></a>
+<span class="sourceLineNo">1334</span>        requestLogRoll(LOW_REPLICATION);<a name="line.1334"></a>
+<span class="sourceLineNo">1335</span>      }<a name="line.1335"></a>
+<span class="sourceLineNo">1336</span>    } finally {<a name="line.1336"></a>
+<span class="sourceLineNo">1337</span>      rollWriterLock.unlock();<a name="line.1337"></a>
 <span class="sourceLineNo">1338</span>    }<a name="line.1338"></a>
-<span class="sourceLineNo">1339</span><a name="line.1339"></a>
-<span class="sourceLineNo">1340</span>    final Path baseDir = CommonFSUtils.getWALRootDir(conf);<a name="line.1340"></a>
-<span class="sourceLineNo">1341</span>    Path archiveDir = new Path(baseDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1341"></a>
-<span class="sourceLineNo">1342</span>    if (conf.getBoolean(AbstractFSWALProvider.SEPARATE_OLDLOGDIR,<a name="line.1342"></a>
-<span class="sourceLineNo">1343</span>      AbstractFSWALProvider.DEFAULT_SEPARATE_OLDLOGDIR)) {<a name="line.1343"></a>
-<span class="sourceLineNo">1344</span>      archiveDir = new Path(archiveDir, p.getName());<a name="line.1344"></a>
-<span class="sourceLineNo">1345</span>    }<a name="line.1345"></a>
-<span class="sourceLineNo">1346</span>    WALSplitter.split(baseDir, p, archiveDir, fs, conf, WALFactory.getInstance(conf));<a name="line.1346"></a>
-<span class="sourceLineNo">1347</span>  }<a name="line.1347"></a>
-<span class="sourceLineNo">1348</span><a name="line.1348"></a>
-<span class="sourceLineNo">1349</span>  private static void usage() {<a name="line.1349"></a>
-<span class="sourceLineNo">1350</span>    System.err.println("Usage: AbstractFSWAL &lt;ARGS&gt;");<a name="line.1350"></a>
-<span class="sourceLineNo">1351</span>    System.err.println("Arguments:");<a name="line.1351"></a>
-<span class="sourceLineNo">1352</span>    System.err.println(" --dump  Dump textual representation of passed one or more files");<a name="line.1352"></a>
-<span class="sourceLineNo">1353</span>    System.err.println("         For example: " +<a name="line.1353"></a>
-<span class="sourceLineNo">1354</span>      "AbstractFSWAL --dump hdfs://example.com:9000/hbase/WALs/MACHINE/LOGFILE");<a name="line.1354"></a>
-<span class="sourceLineNo">1355</span>    System.err.println(" --split Split the passed directory of WAL logs");<a name="line.1355"></a>
-<span class="sourceLineNo">1356</span>    System.err.println(<a name="line.1356"></a>
-<span class="sourceLineNo">1357</span>      "         For example: AbstractFSWAL --split hdfs://example.com:9000/hbase/WALs/DIR");<a name="line.1357"></a>
-<span class="sourceLineNo">1358</span>  }<a name="line.1358"></a>
+<span class="sourceLineNo">1339</span>  }<a name="line.1339"></a>
+<span class="sourceLineNo">1340</span><a name="line.1340"></a>
+<span class="sourceLineNo">1341</span>  /**<a name="line.1341"></a>
+<span class="sourceLineNo">1342</span>   * This method gets the pipeline for the current WAL.<a name="line.1342"></a>
+<span class="sourceLineNo">1343</span>   */<a name="line.1343"></a>
+<span class="sourceLineNo">1344</span>  abstract DatanodeInfo[] getPipeline();<a name="line.1344"></a>
+<span class="sourceLineNo">1345</span><a name="line.1345"></a>
+<span class="sourceLineNo">1346</span>  /**<a name="line.1346"></a>
+<span class="sourceLineNo">1347</span>   * This method gets the datanode replication count for the current WAL.<a name="line.1347"></a>
+<span class="sourceLineNo">1348</span>   */<a name="line.1348"></a>
+<span class="sourceLineNo">1349</span>  abstract int getLogReplication();<a name="line.1349"></a>
+<span class="sourceLineNo">1350</span><a name="line.1350"></a>
+<span class="sourceLineNo">1351</span>  private static void split(final Configuration conf, final Path p) throws IOException {<a name="line.1351"></a>
+<span class="sourceLineNo">1352</span>    FileSystem fs = CommonFSUtils.getWALFileSystem(conf);<a name="line.1352"></a>
+<span class="sourceLineNo">1353</span>    if (!fs.exists(p)) {<a name="line.1353"></a>
+<span class="sourceLineNo">1354</span>      throw new FileNotFoundException(p.toString());<a name="line.1354"></a>
+<span class="sourceLineNo">1355</span>    }<a name="line.1355"></a>
+<span class="sourceLineNo">1356</span>    if (!fs.getFileStatus(p).isDirectory()) {<a name="line.1356"></a>
+<span class="sourceLineNo">1357</span>      throw new IOException(p + " is not a directory");<a name="line.1357"></a>
+<span class="sourceLineNo">1358</span>    }<a name="line.1358"></a>
 <span class="sourceLineNo">1359</span><a name="line.1359"></a>
-<span class="sourceLineNo">1360</span>  /**<a name="line.1360"></a>
-<span class="sourceLineNo">1361</span>   * Pass one or more log file names and it will either dump out a text version on<a name="line.1361"></a>
-<span class="sourceLineNo">1362</span>   * &lt;code&gt;stdout&lt;/code&gt; or split the specified log files.<a name="line.1362"></a>
-<span class="sourceLineNo">1363</span>   */<a name="line.1363"></a>
-<span class="sourceLineNo">1364</span>  public static void main(String[] args) throws IOException {<a name="line.1364"></a>
-<span class="sourceLineNo">1365</span>    if (args.length &lt; 2) {<a name="line.1365"></a>
-<span class="sourceLineNo">1366</span>      usage();<a name="line.1366"></a>
-<span class="sourceLineNo">1367</span>      System.exit(-1);<a name="line.1367"></a>
-<span class="sourceLineNo">1368</span>    }<a name="line.1368"></a>
-<span class="sourceLineNo">1369</span>    // either dump using the WALPrettyPrinter or split, depending on args<a name="line.1369"></a>
-<span class="sourceLineNo">1370</span>    if (args[0].compareTo("--dump") == 0) {<a name="line.1370"></a>
-<span class="sourceLineNo">1371</span>      WALPrettyPrinter.run(Arrays.copyOfRange(args, 1, args.length));<a name="line.1371"></a>
-<span class="sourceLineNo">1372</span>    } else if (args[0].compareTo("--perf") == 0) {<a name="line.1372"></a>
-<span class="sourceLineNo">1373</span>      LOG.error(HBaseMarkers.FATAL, "Please use the WALPerformanceEvaluation tool instead. i.e.:");<a name="line.1373"></a>
-<span class="sourceLineNo">1374</span>      LOG.error(HBaseMarkers.FATAL,<a name="line.1374"></a>
-<span class="sourceLineNo">1375</span>        "\thbase org.apache.hadoop.hbase.wal.WALPerformanceEvaluation --iterations " + args[1]);<a name="line.1375"></a>
-<span class="sourceLineNo">1376</span>      System.exit(-1);<a name="line.1376"></a>
-<span class="sourceLineNo">1377</span>    } else if (args[0].compareTo("--split") == 0) {<a name="line.1377"></a>
-<span class="sourceLineNo">1378</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1378"></a>
-<span class="sourceLineNo">1379</span>      for (int i = 1; i &lt; args.length; i++) {<a name="line.1379"></a>
-<span class="sourceLineNo">1380</span>        try {<a name="line.1380"></a>
-<span class="sourceLineNo">1381</span>          Path logPath = new Path(args[i]);<a name="line.1381"></a>
-<span class="sourceLineNo">1382</span>          CommonFSUtils.setFsDefault(conf, logPath);<a name="line.1382"></a>
-<span class="sourceLineNo">1383</span>          split(conf, logPath);<a name="line.1383"></a>
-<span class="sourceLineNo">1384</span>        } catch (IOException t) {<a name="line.1384"></a>
-<span class="sourceLineNo">1385</span>          t.printStackTrace(System.err);<a name="line.1385"></a>
-<span class="sourceLineNo">1386</span>          System.exit(-1);<a name="line.1386"></a>
-<span class="sourceLineNo">1387</span>        }<a name="line.1387"></a>
-<span class="sourceLineNo">1388</span>      }<a name="line.1388"></a>
-<span class="sourceLineNo">1389</span>    } else {<a name="line.1389"></a>
-<span class="sourceLineNo">1390</span>      usage();<a name="line.1390"></a>
-<span class="sourceLineNo">1391</span>      System.exit(-1);<a name="line.1391"></a>
-<span class="sourceLineNo">1392</span>    }<a name="line.1392"></a>
-<span class="sourceLineNo">1393</span>  }<a name="line.1393"></a>
-<span class="sourceLineNo">1394</span>}<a name="line.1394"></a>
+<span class="sourceLineNo">1360</span>    final Path baseDir = CommonFSUtils.getWALRootDir(conf);<a name="line.1360"></a>
+<span class="sourceLineNo">1361</span>    Path archiveDir = new Path(baseDir, HConstants.HREGION_OLDLOGDIR_NAME);<a name="line.1361"></a>
+<span class="sourceLineNo">1362</span>    if (conf.getBoolean(AbstractFSWALProvider.SEPARATE_OLDLOGDIR,<a name="line.1362"></a>
+<span class="sourceLineNo">1363</span>      AbstractFSWALProvider.DEFAULT_SEPARATE_OLDLOGDIR)) {<a name="line.1363"></a>
+<span class="sourceLineNo">1364</span>      archiveDir = new Path(archiveDir, p.getName());<a name="line.1364"></a>
+<span class="sourceLineNo">1365</span>    }<a name="line.1365"></a>
+<span class="sourceLineNo">1366</span>    WALSplitter.split(baseDir, p, archiveDir, fs, conf, WALFactory.getInstance(conf));<a name="line.1366"></a>
+<span class="sourceLineNo">1367</span>  }<a name="line.1367"></a>
+<span class="sourceLineNo">1368</span><a name="line.1368"></a>
+<span class="sourceLineNo">1369</span>  private static void usage() {<a name="line.1369"></a>
+<span class="sourceLineNo">1370</span>    System.err.println("Usage: AbstractFSWAL &lt;ARGS&gt;");<a name="line.1370"></a>
+<span class="sourceLineNo">1371</span>    System.err.println("Arguments:");<a name="line.1371"></a>
+<span class="sourceLineNo">1372</span>    System.err.println(" --dump  Dump textual representation of passed one or more files");<a name="line.1372"></a>
+<span class="sourceLineNo">1373</span>    System.err.println("         For example: " +<a name="line.1373"></a>
+<span class="sourceLineNo">1374</span>      "AbstractFSWAL --dump hdfs://example.com:9000/hbase/WALs/MACHINE/LOGFILE");<a name="line.1374"></a>
+<span class="sourceLineNo">1375</span>    System.err.println(" --split Split the passed directory of WAL logs");<a name="line.1375"></a>
+<span class="sourceLineNo">1376</span>    System.err.println(<a name="line.1376"></a>
+<span class="sourceLineNo">1377</span>      "         For example: AbstractFSWAL --split hdfs://example.com:9000/hbase/WALs/DIR");<a name="line.1377"></a>
+<span class="sourceLineNo">1378</span>  }<a name="line.1378"></a>
+<span class="sourceLineNo">1379</span><a name="line.1379"></a>
+<span class="sourceLineNo">1380</span>  /**<a name="line.1380"></a>
+<span class="sourceLineNo">1381</span>   * Pass one or more log file names and it will either dump out a text version on<a name="line.1381"></a>
+<span class="sourceLineNo">1382</span>   * &lt;code&gt;stdout&lt;/code&gt; or split the specified log files.<a name="line.1382"></a>
+<span class="sourceLineNo">1383</span>   */<a name="line.1383"></a>
+<span class="sourceLineNo">1384</span>  public static void main(String[] args) throws IOException {<a name="line.1384"></a>
+<span class="sourceLineNo">1385</span>    if (args.length &lt; 2) {<a name="line.1385"></a>
+<span class="sourceLineNo">1386</span>      usage();<a name="line.1386"></a>
+<span class="sourceLineNo">1387</span>      System.exit(-1);<a name="line.1387"></a>
+<span class="sourceLineNo">1388</span>    }<a name="line.1388"></a>
+<span class="sourceLineNo">1389</span>    // either dump using the WALPrettyPrinter or split, depending on args<a name="line.1389"></a>
+<span class="sourceLineNo">1390</span>    if (args[0].compareTo("--dump") == 0) {<a name="line.1390"></a>
+<span class="sourceLineNo">1391</span>      WALPrettyPrinter.run(Arrays.copyOfRange(args, 1, args.length));<a name="line.1391"></a>
+<span class="sourceLineNo">1392</span>    } else if (args[0].compareTo("--perf") == 0) {<a name="line.1392"></a>
+<span class="sourceLineNo">1393</span>      LOG.error(HBaseMarkers.FATAL, "Please use the WALPerformanceEvaluation tool instead. i.e.:");<a name="line.1393"></a>
+<span class="sourceLineNo">1394</span>      LOG.error(HBaseMarkers.FATAL,<a name="line.1394"></a>
+<span class="sourceLineNo">1395</span>        "\thbase org.apache.hadoop.hbase.wal.WALPerformanceEvaluation --iterations " + args[1]);<a name="line.1395"></a>
+<span class="sourceLineNo">1396</span>      System.exit(-1);<a name="line.1396"></a>
+<span class="sourceLineNo">1397</span>    } else if (args[0].compareTo("--split") == 0) {<a name="line.1397"></a>
+<span class="sourceLineNo">1398</span>      Configuration conf = HBaseConfiguration.create();<a name="line.1398"></a>
+<span class="sourceLineNo">1399</span>      for (int i = 1; i &lt; args.length; i++) {<a name="line.1399"></a>
+<span class="sourceLineNo">1400</span>        try {<a name="line.1400"></a>
+<span class="sourceLineNo">1401</span>          Path logPath = new Path(args[i]);<a name="line.1401"></a>
+<span class="sourceLineNo">1402</span>          CommonFSUtils.setFsDefault(conf, logPath);<a name="line.1402"></a>
+<span class="sourceLineNo">1403</span>          split(conf, logPath);<a name="line.1403"></a>
+<span class="sourceLineNo">1404</span>        } catch (IOException t) {<a name="line.1404"></a>
+<span class="sourceLineNo">1405</span>          t.printStackTrace(System.err);<a name="line.1405"></a>
+<span class="sourceLineNo">1406</span>          System.exit(-1);<a name="line.1406"></a>
+<span class="sourceLineNo">1407</span>        }<a name="line.1407"></a>
+<span class="sourceLineNo">1408</span>      }<a name="line.1408"></a>
+<span class="sourceLineNo">1409</span>    } else {<a name="line.1409"></a>
+<span class="sourceLineNo">1410</span>      usage();<a name="line.1410"></a>
+<span class="sourceLineNo">1411</span>      System.exit(-1);<a name="line.1411"></a>
+<span class="sourceLineNo">1412</span>    }<a name="line.1412"></a>
+<span class="sourceLineNo">1413</span>  }<a name="line.1413"></a>
+<span class="sourceLineNo">1414</span>}<a name="line.1414"></a>
 
 
 
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
index 6e60548..d984db4 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.html
@@ -46,1360 +46,1380 @@
 <span class="sourceLineNo">038</span>import java.util.Map;<a name="line.38"></a>
 <span class="sourceLineNo">039</span>import java.util.OptionalLong;<a name="line.39"></a>
 <span class="sourceLineNo">040</span>import java.util.Set;<a name="line.40"></a>
-<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.41"></a>
-<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.42"></a>
-<span class="sourceLineNo">043</span>import java.util.concurrent.CopyOnWriteArrayList;<a name="line.43"></a>
-<span class="sourceLineNo">044</span>import java.util.concurrent.ExecutionException;<a name="line.44"></a>
-<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutorService;<a name="line.45"></a>
-<span class="sourceLineNo">046</span>import java.util.concurrent.Executors;<a name="line.46"></a>
-<span class="sourceLineNo">047</span>import java.util.concurrent.TimeUnit;<a name="line.47"></a>
-<span class="sourceLineNo">048</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.48"></a>
-<span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.49"></a>
-<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.50"></a>
-<span class="sourceLineNo">051</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.51"></a>
-<span class="sourceLineNo">052</span>import org.apache.commons.lang3.mutable.MutableLong;<a name="line.52"></a>
-<span class="sourceLineNo">053</span>import org.apache.hadoop.conf.Configuration;<a name="line.53"></a>
-<span class="sourceLineNo">054</span>import org.apache.hadoop.fs.FileStatus;<a name="line.54"></a>
-<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.FileSystem;<a name="line.55"></a>
-<span class="sourceLineNo">056</span>import org.apache.hadoop.fs.Path;<a name="line.56"></a>
-<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.PathFilter;<a name="line.57"></a>
-<span class="sourceLineNo">058</span>import org.apache.hadoop.hbase.Abortable;<a name="line.58"></a>
-<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.Cell;<a name="line.59"></a>
-<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.60"></a>
-<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HConstants;<a name="line.61"></a>
-<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.62"></a>
-<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.63"></a>
-<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.exceptions.TimeoutIOException;<a name="line.64"></a>
-<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.65"></a>
-<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.66"></a>
-<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.ServerCall;<a name="line.67"></a>
-<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.68"></a>
-<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.69"></a>
-<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.70"></a>
-<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.71"></a>
-<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.72"></a>
-<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.73"></a>
-<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.74"></a>
-<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.75"></a>
-<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.76"></a>
-<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.77"></a>
-<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.78"></a>
-<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.79"></a>
-<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.80"></a>
-<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.wal.WALPrettyPrinter;<a name="line.81"></a>
-<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.wal.WALProvider.WriterBase;<a name="line.82"></a>
-<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.83"></a>
-<span class="sourceLineNo">084</span>import org.apache.hadoop.hdfs.protocol.DatanodeInfo;<a name="line.84"></a>
-<span class="sourceLineNo">085</span>import org.apache.hadoop.util.StringUtils;<a name="line.85"></a>
-<span class="sourceLineNo">086</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.86"></a>
-<span class="sourceLineNo">087</span>import org.slf4j.Logger;<a name="line.87"></a>
-<span class="sourceLineNo">088</span>import org.slf4j.LoggerFactory;<a name="line.88"></a>
-<span class="sourceLineNo">089</span><a name="line.89"></a>
-<span class="sourceLineNo">090</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.90"></a>
-<span class="sourceLineNo">091</span><a name="line.91"></a>
-<span class="sourceLineNo">092</span>/**<a name="line.92"></a>
-<span class="sourceLineNo">093</span> * Implementation of {@link WAL} to go against {@link FileSystem}; i.e. keep WALs in HDFS. Only one<a name="line.93"></a>
-<span class="sourceLineNo">094</span> * WAL is ever being written at a time. When a WAL hits a configured maximum size, it is rolled.<a name="line.94"></a>
-<span class="sourceLineNo">095</span> * This is done internal to the implementation.<a name="line.95"></a>
-<span class="sourceLineNo">096</span> * &lt;p&gt;<a name="line.96"></a>
-<span class="sourceLineNo">097</span> * As data is flushed from the MemStore to other on-disk structures (files sorted by key, hfiles), a<a name="line.97"></a>
-<span class="sourceLineNo">098</span> * WAL becomes obsolete. We can let go of all the log edits/entries for a given HRegion-sequence id.<a name="line.98"></a>
-<span class="sourceLineNo">099</span> * A bunch of work in the below is done keeping account of these region sequence ids -- what is<a name="line.99"></a>
-<span class="sourceLineNo">100</span> * flushed out to hfiles, and what is yet in WAL and in memory only.<a name="line.100"></a>
-<span class="sourceLineNo">101</span> * &lt;p&gt;<a name="line.101"></a>
-<span class="sourceLineNo">102</span> * It is only practical to delete entire files. Thus, we delete an entire on-disk file<a name="line.102"></a>
-<span class="sourceLineNo">103</span> * &lt;code&gt;F&lt;/code&gt; when all of the edits in &lt;code&gt;F&lt;/code&gt; have a log-sequence-id that's older<a name="line.103"></a>
-<span class="sourceLineNo">104</span> * (smaller) than the most-recent flush.<a name="line.104"></a>
-<span class="sourceLineNo">105</span> * &lt;p&gt;<a name="line.105"></a>
-<span class="sourceLineNo">106</span> * To read an WAL, call<a name="line.106"></a>
-<span class="sourceLineNo">107</span> * {@link WALFactory#createReader(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path)}. *<a name="line.107"></a>
-<span class="sourceLineNo">108</span> * &lt;h2&gt;Failure Semantic&lt;/h2&gt; If an exception on append or sync, roll the WAL because the current WAL<a name="line.108"></a>
-<span class="sourceLineNo">109</span> * is now a lame duck; any more appends or syncs will fail also with the same original exception. If<a name="line.109"></a>
-<span class="sourceLineNo">110</span> * we have made successful appends to the WAL and we then are unable to sync them, our current<a name="line.110"></a>
-<span class="sourceLineNo">111</span> * semantic is to return error to the client that the appends failed but also to abort the current<a name="line.111"></a>
-<span class="sourceLineNo">112</span> * context, usually the hosting server. We need to replay the WALs. &lt;br&gt;<a name="line.112"></a>
-<span class="sourceLineNo">113</span> * TODO: Change this semantic. A roll of WAL may be sufficient as long as we have flagged client<a name="line.113"></a>
-<span class="sourceLineNo">114</span> * that the append failed. &lt;br&gt;<a name="line.114"></a>
-<span class="sourceLineNo">115</span> * TODO: replication may pick up these last edits though they have been marked as failed append<a name="line.115"></a>
-<span class="sourceLineNo">116</span> * (Need to keep our own file lengths, not rely on HDFS).<a name="line.116"></a>
-<span class="sourceLineNo">117</span> */<a name="line.117"></a>
-<span class="sourceLineNo">118</span>@InterfaceAudience.Private<a name="line.118"></a>
-<span class="sourceLineNo">119</span>public abstract class AbstractFSWAL&lt;W extends WriterBase&gt; implements WAL {<a name="line.119"></a>
-<span class="sourceLineNo">120</span>  private static final Logger LOG = LoggerFactory.getLogger(AbstractFSWAL.class);<a name="line.120"></a>
-<span class="sourceLineNo">121</span><a name="line.121"></a>
-<span class="sourceLineNo">122</span>  private static final String SURVIVED_TOO_LONG_SEC_KEY = "hbase.regionserver.wal.too.old.sec";<a name="line.122"></a>
-<span class="sourceLineNo">123</span>  private static final int SURVIVED_TOO_LONG_SEC_DEFAULT = 900;<a name="line.123"></a>
-<span class="sourceLineNo">124</span>  /** Don't log blocking regions more frequently than this. */<a name="line.124"></a>
-<span class="sourceLineNo">125</span>  private static final long SURVIVED_TOO_LONG_LOG_INTERVAL_NS = TimeUnit.MINUTES.toNanos(5);<a name="line.125"></a>
-<span class="sourceLineNo">126</span><a name="line.126"></a>
-<span class="sourceLineNo">127</span>  protected static final String SLOW_SYNC_TIME_MS ="hbase.regionserver.wal.slowsync.ms";<a name="line.127"></a>
-<span class="sourceLineNo">128</span>  protected static final int DEFAULT_SLOW_SYNC_TIME_MS = 100; // in ms<a name="line.128"></a>
-<span class="sourceLineNo">129</span>  protected static final String ROLL_ON_SYNC_TIME_MS = "hbase.regionserver.wal.roll.on.sync.ms";<a name="line.129"></a>
-<span class="sourceLineNo">130</span>  protected static final int DEFAULT_ROLL_ON_SYNC_TIME_MS = 10000; // in ms<a name="line.130"></a>
-<span class="sourceLineNo">131</span>  protected static final String SLOW_SYNC_ROLL_THRESHOLD =<a name="line.131"></a>
-<span class="sourceLineNo">132</span>    "hbase.regionserver.wal.slowsync.roll.threshold";<a name="line.132"></a>
-<span class="sourceLineNo">133</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_THRESHOLD = 100; // 100 slow sync warnings<a name="line.133"></a>
-<span class="sourceLineNo">134</span>  protected static final String SLOW_SYNC_ROLL_INTERVAL_MS =<a name="line.134"></a>
-<span class="sourceLineNo">135</span>    "hbase.regionserver.wal.slowsync.roll.interval.ms";<a name="line.135"></a>
-<span class="sourceLineNo">136</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS = 60 * 1000; // in ms, 1 minute<a name="line.136"></a>
-<span class="sourceLineNo">137</span><a name="line.137"></a>
-<span class="sourceLineNo">138</span>  protected static final String WAL_SYNC_TIMEOUT_MS = "hbase.regionserver.wal.sync.timeout";<a name="line.138"></a>
-<span class="sourceLineNo">139</span>  protected static final int DEFAULT_WAL_SYNC_TIMEOUT_MS = 5 * 60 * 1000; // in ms, 5min<a name="line.139"></a>
-<span class="sourceLineNo">140</span><a name="line.140"></a>
-<span class="sourceLineNo">141</span>  public static final String WAL_ROLL_MULTIPLIER = "hbase.regionserver.logroll.multiplier";<a name="line.141"></a>
-<span class="sourceLineNo">142</span><a name="line.142"></a>
-<span class="sourceLineNo">143</span>  public static final String MAX_LOGS = "hbase.regionserver.maxlogs";<a name="line.143"></a>
-<span class="sourceLineNo">144</span><a name="line.144"></a>
-<span class="sourceLineNo">145</span>  public static final String RING_BUFFER_SLOT_COUNT =<a name="line.145"></a>
-<span class="sourceLineNo">146</span>    "hbase.regionserver.wal.disruptor.event.count";<a name="line.146"></a>
-<span class="sourceLineNo">147</span><a name="line.147"></a>
-<span class="sourceLineNo">148</span>  /**<a name="line.148"></a>
-<span class="sourceLineNo">149</span>   * file system instance<a name="line.149"></a>
-<span class="sourceLineNo">150</span>   */<a name="line.150"></a>
-<span class="sourceLineNo">151</span>  protected final FileSystem fs;<a name="line.151"></a>
-<span class="sourceLineNo">152</span><a name="line.152"></a>
-<span class="sourceLineNo">153</span>  /**<a name="line.153"></a>
-<span class="sourceLineNo">154</span>   * WAL directory, where all WAL files would be placed.<a name="line.154"></a>
-<span class="sourceLineNo">155</span>   */<a name="line.155"></a>
-<span class="sourceLineNo">156</span>  protected final Path walDir;<a name="line.156"></a>
-<span class="sourceLineNo">157</span><a name="line.157"></a>
-<span class="sourceLineNo">158</span>  /**<a name="line.158"></a>
-<span class="sourceLineNo">159</span>   * dir path where old logs are kept.<a name="line.159"></a>
-<span class="sourceLineNo">160</span>   */<a name="line.160"></a>
-<span class="sourceLineNo">161</span>  protected final Path walArchiveDir;<a name="line.161"></a>
-<span class="sourceLineNo">162</span><a name="line.162"></a>
-<span class="sourceLineNo">163</span>  /**<a name="line.163"></a>
-<span class="sourceLineNo">164</span>   * Matches just those wal files that belong to this wal instance.<a name="line.164"></a>
-<span class="sourceLineNo">165</span>   */<a name="line.165"></a>
-<span class="sourceLineNo">166</span>  protected final PathFilter ourFiles;<a name="line.166"></a>
-<span class="sourceLineNo">167</span><a name="line.167"></a>
-<span class="sourceLineNo">168</span>  /**<a name="line.168"></a>
-<span class="sourceLineNo">169</span>   * Prefix of a WAL file, usually the region server name it is hosted on.<a name="line.169"></a>
-<span class="sourceLineNo">170</span>   */<a name="line.170"></a>
-<span class="sourceLineNo">171</span>  protected final String walFilePrefix;<a name="line.171"></a>
-<span class="sourceLineNo">172</span><a name="line.172"></a>
-<span class="sourceLineNo">173</span>  /**<a name="line.173"></a>
-<span class="sourceLineNo">174</span>   * Suffix included on generated wal file names<a name="line.174"></a>
-<span class="sourceLineNo">175</span>   */<a name="line.175"></a>
-<span class="sourceLineNo">176</span>  protected final String walFileSuffix;<a name="line.176"></a>
-<span class="sourceLineNo">177</span><a name="line.177"></a>
-<span class="sourceLineNo">178</span>  /**<a name="line.178"></a>
-<span class="sourceLineNo">179</span>   * Prefix used when checking for wal membership.<a name="line.179"></a>
-<span class="sourceLineNo">180</span>   */<a name="line.180"></a>
-<span class="sourceLineNo">181</span>  protected final String prefixPathStr;<a name="line.181"></a>
-<span class="sourceLineNo">182</span><a name="line.182"></a>
-<span class="sourceLineNo">183</span>  protected final WALCoprocessorHost coprocessorHost;<a name="line.183"></a>
-<span class="sourceLineNo">184</span><a name="line.184"></a>
-<span class="sourceLineNo">185</span>  /**<a name="line.185"></a>
-<span class="sourceLineNo">186</span>   * conf object<a name="line.186"></a>
-<span class="sourceLineNo">187</span>   */<a name="line.187"></a>
-<span class="sourceLineNo">188</span>  protected final Configuration conf;<a name="line.188"></a>
-<span class="sourceLineNo">189</span><a name="line.189"></a>
-<span class="sourceLineNo">190</span>  protected final Abortable abortable;<a name="line.190"></a>
-<span class="sourceLineNo">191</span><a name="line.191"></a>
-<span class="sourceLineNo">192</span>  /** Listeners that are called on WAL events. */<a name="line.192"></a>
-<span class="sourceLineNo">193</span>  protected final List&lt;WALActionsListener&gt; listeners = new CopyOnWriteArrayList&lt;&gt;();<a name="line.193"></a>
-<span class="sourceLineNo">194</span><a name="line.194"></a>
-<span class="sourceLineNo">195</span>  /**<a name="line.195"></a>
-<span class="sourceLineNo">196</span>   * Class that does accounting of sequenceids in WAL subsystem. Holds oldest outstanding sequence<a name="line.196"></a>
-<span class="sourceLineNo">197</span>   * id as yet not flushed as well as the most recent edit sequence id appended to the WAL. Has<a name="line.197"></a>
-<span class="sourceLineNo">198</span>   * facility for answering questions such as "Is it safe to GC a WAL?".<a name="line.198"></a>
-<span class="sourceLineNo">199</span>   */<a name="line.199"></a>
-<span class="sourceLineNo">200</span>  protected final SequenceIdAccounting sequenceIdAccounting = new SequenceIdAccounting();<a name="line.200"></a>
-<span class="sourceLineNo">201</span><a name="line.201"></a>
-<span class="sourceLineNo">202</span>  /** The slow sync will be logged; the very slow sync will cause the WAL to be rolled. */<a name="line.202"></a>
-<span class="sourceLineNo">203</span>  protected final long slowSyncNs, rollOnSyncNs;<a name="line.203"></a>
-<span class="sourceLineNo">204</span>  protected final int slowSyncRollThreshold;<a name="line.204"></a>
-<span class="sourceLineNo">205</span>  protected final int slowSyncCheckInterval;<a name="line.205"></a>
-<span class="sourceLineNo">206</span>  protected final AtomicInteger slowSyncCount = new AtomicInteger();<a name="line.206"></a>
-<span class="sourceLineNo">207</span><a name="line.207"></a>
-<span class="sourceLineNo">208</span>  private final long walSyncTimeoutNs;<a name="line.208"></a>
-<span class="sourceLineNo">209</span><a name="line.209"></a>
-<span class="sourceLineNo">210</span>  private final long walTooOldNs;<a name="line.210"></a>
+<span class="sourceLineNo">041</span>import java.util.concurrent.ConcurrentHashMap;<a name="line.41"></a>
+<span class="sourceLineNo">042</span>import java.util.concurrent.ConcurrentNavigableMap;<a name="line.42"></a>
+<span class="sourceLineNo">043</span>import java.util.concurrent.ConcurrentSkipListMap;<a name="line.43"></a>
+<span class="sourceLineNo">044</span>import java.util.concurrent.CopyOnWriteArrayList;<a name="line.44"></a>
+<span class="sourceLineNo">045</span>import java.util.concurrent.ExecutionException;<a name="line.45"></a>
+<span class="sourceLineNo">046</span>import java.util.concurrent.ExecutorService;<a name="line.46"></a>
+<span class="sourceLineNo">047</span>import java.util.concurrent.Executors;<a name="line.47"></a>
+<span class="sourceLineNo">048</span>import java.util.concurrent.TimeUnit;<a name="line.48"></a>
+<span class="sourceLineNo">049</span>import java.util.concurrent.atomic.AtomicBoolean;<a name="line.49"></a>
+<span class="sourceLineNo">050</span>import java.util.concurrent.atomic.AtomicInteger;<a name="line.50"></a>
+<span class="sourceLineNo">051</span>import java.util.concurrent.atomic.AtomicLong;<a name="line.51"></a>
+<span class="sourceLineNo">052</span>import java.util.concurrent.locks.ReentrantLock;<a name="line.52"></a>
+<span class="sourceLineNo">053</span>import org.apache.commons.lang3.mutable.MutableLong;<a name="line.53"></a>
+<span class="sourceLineNo">054</span>import org.apache.hadoop.conf.Configuration;<a name="line.54"></a>
+<span class="sourceLineNo">055</span>import org.apache.hadoop.fs.FileStatus;<a name="line.55"></a>
+<span class="sourceLineNo">056</span>import org.apache.hadoop.fs.FileSystem;<a name="line.56"></a>
+<span class="sourceLineNo">057</span>import org.apache.hadoop.fs.Path;<a name="line.57"></a>
+<span class="sourceLineNo">058</span>import org.apache.hadoop.fs.PathFilter;<a name="line.58"></a>
+<span class="sourceLineNo">059</span>import org.apache.hadoop.hbase.Abortable;<a name="line.59"></a>
+<span class="sourceLineNo">060</span>import org.apache.hadoop.hbase.Cell;<a name="line.60"></a>
+<span class="sourceLineNo">061</span>import org.apache.hadoop.hbase.HBaseConfiguration;<a name="line.61"></a>
+<span class="sourceLineNo">062</span>import org.apache.hadoop.hbase.HConstants;<a name="line.62"></a>
+<span class="sourceLineNo">063</span>import org.apache.hadoop.hbase.PrivateCellUtil;<a name="line.63"></a>
+<span class="sourceLineNo">064</span>import org.apache.hadoop.hbase.client.RegionInfo;<a name="line.64"></a>
+<span class="sourceLineNo">065</span>import org.apache.hadoop.hbase.exceptions.TimeoutIOException;<a name="line.65"></a>
+<span class="sourceLineNo">066</span>import org.apache.hadoop.hbase.io.util.MemorySizeUtil;<a name="line.66"></a>
+<span class="sourceLineNo">067</span>import org.apache.hadoop.hbase.ipc.RpcServer;<a name="line.67"></a>
+<span class="sourceLineNo">068</span>import org.apache.hadoop.hbase.ipc.ServerCall;<a name="line.68"></a>
+<span class="sourceLineNo">069</span>import org.apache.hadoop.hbase.log.HBaseMarkers;<a name="line.69"></a>
+<span class="sourceLineNo">070</span>import org.apache.hadoop.hbase.regionserver.HRegion;<a name="line.70"></a>
+<span class="sourceLineNo">071</span>import org.apache.hadoop.hbase.regionserver.MultiVersionConcurrencyControl;<a name="line.71"></a>
+<span class="sourceLineNo">072</span>import org.apache.hadoop.hbase.trace.TraceUtil;<a name="line.72"></a>
+<span class="sourceLineNo">073</span>import org.apache.hadoop.hbase.util.Bytes;<a name="line.73"></a>
+<span class="sourceLineNo">074</span>import org.apache.hadoop.hbase.util.CommonFSUtils;<a name="line.74"></a>
+<span class="sourceLineNo">075</span>import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;<a name="line.75"></a>
+<span class="sourceLineNo">076</span>import org.apache.hadoop.hbase.util.Pair;<a name="line.76"></a>
+<span class="sourceLineNo">077</span>import org.apache.hadoop.hbase.wal.AbstractFSWALProvider;<a name="line.77"></a>
+<span class="sourceLineNo">078</span>import org.apache.hadoop.hbase.wal.WAL;<a name="line.78"></a>
+<span class="sourceLineNo">079</span>import org.apache.hadoop.hbase.wal.WALEdit;<a name="line.79"></a>
+<span class="sourceLineNo">080</span>import org.apache.hadoop.hbase.wal.WALFactory;<a name="line.80"></a>
+<span class="sourceLineNo">081</span>import org.apache.hadoop.hbase.wal.WALKeyImpl;<a name="line.81"></a>
+<span class="sourceLineNo">082</span>import org.apache.hadoop.hbase.wal.WALPrettyPrinter;<a name="line.82"></a>
+<span class="sourceLineNo">083</span>import org.apache.hadoop.hbase.wal.WALProvider.WriterBase;<a name="line.83"></a>
+<span class="sourceLineNo">084</span>import org.apache.hadoop.hbase.wal.WALSplitter;<a name="line.84"></a>
+<span class="sourceLineNo">085</span>import org.apache.hadoop.hdfs.protocol.DatanodeInfo;<a name="line.85"></a>
+<span class="sourceLineNo">086</span>import org.apache.hadoop.util.StringUtils;<a name="line.86"></a>
+<span class="sourceLineNo">087</span>import org.apache.yetus.audience.InterfaceAudience;<a name="line.87"></a>
+<span class="sourceLineNo">088</span>import org.slf4j.Logger;<a name="line.88"></a>
+<span class="sourceLineNo">089</span>import org.slf4j.LoggerFactory;<a name="line.89"></a>
+<span class="sourceLineNo">090</span><a name="line.90"></a>
+<span class="sourceLineNo">091</span>import org.apache.hbase.thirdparty.com.google.common.util.concurrent.ThreadFactoryBuilder;<a name="line.91"></a>
+<span class="sourceLineNo">092</span><a name="line.92"></a>
+<span class="sourceLineNo">093</span>/**<a name="line.93"></a>
+<span class="sourceLineNo">094</span> * Implementation of {@link WAL} to go against {@link FileSystem}; i.e. keep WALs in HDFS. Only one<a name="line.94"></a>
+<span class="sourceLineNo">095</span> * WAL is ever being written at a time. When a WAL hits a configured maximum size, it is rolled.<a name="line.95"></a>
+<span class="sourceLineNo">096</span> * This is done internal to the implementation.<a name="line.96"></a>
+<span class="sourceLineNo">097</span> * &lt;p&gt;<a name="line.97"></a>
+<span class="sourceLineNo">098</span> * As data is flushed from the MemStore to other on-disk structures (files sorted by key, hfiles), a<a name="line.98"></a>
+<span class="sourceLineNo">099</span> * WAL becomes obsolete. We can let go of all the log edits/entries for a given HRegion-sequence id.<a name="line.99"></a>
+<span class="sourceLineNo">100</span> * A bunch of work in the below is done keeping account of these region sequence ids -- what is<a name="line.100"></a>
+<span class="sourceLineNo">101</span> * flushed out to hfiles, and what is yet in WAL and in memory only.<a name="line.101"></a>
+<span class="sourceLineNo">102</span> * &lt;p&gt;<a name="line.102"></a>
+<span class="sourceLineNo">103</span> * It is only practical to delete entire files. Thus, we delete an entire on-disk file<a name="line.103"></a>
+<span class="sourceLineNo">104</span> * &lt;code&gt;F&lt;/code&gt; when all of the edits in &lt;code&gt;F&lt;/code&gt; have a log-sequence-id that's older<a name="line.104"></a>
+<span class="sourceLineNo">105</span> * (smaller) than the most-recent flush.<a name="line.105"></a>
+<span class="sourceLineNo">106</span> * &lt;p&gt;<a name="line.106"></a>
+<span class="sourceLineNo">107</span> * To read an WAL, call<a name="line.107"></a>
+<span class="sourceLineNo">108</span> * {@link WALFactory#createReader(org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.Path)}. *<a name="line.108"></a>
+<span class="sourceLineNo">109</span> * &lt;h2&gt;Failure Semantic&lt;/h2&gt; If an exception on append or sync, roll the WAL because the current WAL<a name="line.109"></a>
+<span class="sourceLineNo">110</span> * is now a lame duck; any more appends or syncs will fail also with the same original exception. If<a name="line.110"></a>
+<span class="sourceLineNo">111</span> * we have made successful appends to the WAL and we then are unable to sync them, our current<a name="line.111"></a>
+<span class="sourceLineNo">112</span> * semantic is to return error to the client that the appends failed but also to abort the current<a name="line.112"></a>
+<span class="sourceLineNo">113</span> * context, usually the hosting server. We need to replay the WALs. &lt;br&gt;<a name="line.113"></a>
+<span class="sourceLineNo">114</span> * TODO: Change this semantic. A roll of WAL may be sufficient as long as we have flagged client<a name="line.114"></a>
+<span class="sourceLineNo">115</span> * that the append failed. &lt;br&gt;<a name="line.115"></a>
+<span class="sourceLineNo">116</span> * TODO: replication may pick up these last edits though they have been marked as failed append<a name="line.116"></a>
+<span class="sourceLineNo">117</span> * (Need to keep our own file lengths, not rely on HDFS).<a name="line.117"></a>
+<span class="sourceLineNo">118</span> */<a name="line.118"></a>
+<span class="sourceLineNo">119</span>@InterfaceAudience.Private<a name="line.119"></a>
+<span class="sourceLineNo">120</span>public abstract class AbstractFSWAL&lt;W extends WriterBase&gt; implements WAL {<a name="line.120"></a>
+<span class="sourceLineNo">121</span>  private static final Logger LOG = LoggerFactory.getLogger(AbstractFSWAL.class);<a name="line.121"></a>
+<span class="sourceLineNo">122</span><a name="line.122"></a>
+<span class="sourceLineNo">123</span>  private static final String SURVIVED_TOO_LONG_SEC_KEY = "hbase.regionserver.wal.too.old.sec";<a name="line.123"></a>
+<span class="sourceLineNo">124</span>  private static final int SURVIVED_TOO_LONG_SEC_DEFAULT = 900;<a name="line.124"></a>
+<span class="sourceLineNo">125</span>  /** Don't log blocking regions more frequently than this. */<a name="line.125"></a>
+<span class="sourceLineNo">126</span>  private static final long SURVIVED_TOO_LONG_LOG_INTERVAL_NS = TimeUnit.MINUTES.toNanos(5);<a name="line.126"></a>
+<span class="sourceLineNo">127</span><a name="line.127"></a>
+<span class="sourceLineNo">128</span>  protected static final String SLOW_SYNC_TIME_MS ="hbase.regionserver.wal.slowsync.ms";<a name="line.128"></a>
+<span class="sourceLineNo">129</span>  protected static final int DEFAULT_SLOW_SYNC_TIME_MS = 100; // in ms<a name="line.129"></a>
+<span class="sourceLineNo">130</span>  protected static final String ROLL_ON_SYNC_TIME_MS = "hbase.regionserver.wal.roll.on.sync.ms";<a name="line.130"></a>
+<span class="sourceLineNo">131</span>  protected static final int DEFAULT_ROLL_ON_SYNC_TIME_MS = 10000; // in ms<a name="line.131"></a>
+<span class="sourceLineNo">132</span>  protected static final String SLOW_SYNC_ROLL_THRESHOLD =<a name="line.132"></a>
+<span class="sourceLineNo">133</span>    "hbase.regionserver.wal.slowsync.roll.threshold";<a name="line.133"></a>
+<span class="sourceLineNo">134</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_THRESHOLD = 100; // 100 slow sync warnings<a name="line.134"></a>
+<span class="sourceLineNo">135</span>  protected static final String SLOW_SYNC_ROLL_INTERVAL_MS =<a name="line.135"></a>
+<span class="sourceLineNo">136</span>    "hbase.regionserver.wal.slowsync.roll.interval.ms";<a name="line.136"></a>
+<span class="sourceLineNo">137</span>  protected static final int DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS = 60 * 1000; // in ms, 1 minute<a name="line.137"></a>
+<span class="sourceLineNo">138</span><a name="line.138"></a>
+<span class="sourceLineNo">139</span>  protected static final String WAL_SYNC_TIMEOUT_MS = "hbase.regionserver.wal.sync.timeout";<a name="line.139"></a>
+<span class="sourceLineNo">140</span>  protected static final int DEFAULT_WAL_SYNC_TIMEOUT_MS = 5 * 60 * 1000; // in ms, 5min<a name="line.140"></a>
+<span class="sourceLineNo">141</span><a name="line.141"></a>
+<span class="sourceLineNo">142</span>  public static final String WAL_ROLL_MULTIPLIER = "hbase.regionserver.logroll.multiplier";<a name="line.142"></a>
+<span class="sourceLineNo">143</span><a name="line.143"></a>
+<span class="sourceLineNo">144</span>  public static final String MAX_LOGS = "hbase.regionserver.maxlogs";<a name="line.144"></a>
+<span class="sourceLineNo">145</span><a name="line.145"></a>
+<span class="sourceLineNo">146</span>  public static final String RING_BUFFER_SLOT_COUNT =<a name="line.146"></a>
+<span class="sourceLineNo">147</span>    "hbase.regionserver.wal.disruptor.event.count";<a name="line.147"></a>
+<span class="sourceLineNo">148</span><a name="line.148"></a>
+<span class="sourceLineNo">149</span>  /**<a name="line.149"></a>
+<span class="sourceLineNo">150</span>   * file system instance<a name="line.150"></a>
+<span class="sourceLineNo">151</span>   */<a name="line.151"></a>
+<span class="sourceLineNo">152</span>  protected final FileSystem fs;<a name="line.152"></a>
+<span class="sourceLineNo">153</span><a name="line.153"></a>
+<span class="sourceLineNo">154</span>  /**<a name="line.154"></a>
+<span class="sourceLineNo">155</span>   * WAL directory, where all WAL files would be placed.<a name="line.155"></a>
+<span class="sourceLineNo">156</span>   */<a name="line.156"></a>
+<span class="sourceLineNo">157</span>  protected final Path walDir;<a name="line.157"></a>
+<span class="sourceLineNo">158</span><a name="line.158"></a>
+<span class="sourceLineNo">159</span>  /**<a name="line.159"></a>
+<span class="sourceLineNo">160</span>   * dir path where old logs are kept.<a name="line.160"></a>
+<span class="sourceLineNo">161</span>   */<a name="line.161"></a>
+<span class="sourceLineNo">162</span>  protected final Path walArchiveDir;<a name="line.162"></a>
+<span class="sourceLineNo">163</span><a name="line.163"></a>
+<span class="sourceLineNo">164</span>  /**<a name="line.164"></a>
+<span class="sourceLineNo">165</span>   * Matches just those wal files that belong to this wal instance.<a name="line.165"></a>
+<span class="sourceLineNo">166</span>   */<a name="line.166"></a>
+<span class="sourceLineNo">167</span>  protected final PathFilter ourFiles;<a name="line.167"></a>
+<span class="sourceLineNo">168</span><a name="line.168"></a>
+<span class="sourceLineNo">169</span>  /**<a name="line.169"></a>
+<span class="sourceLineNo">170</span>   * Prefix of a WAL file, usually the region server name it is hosted on.<a name="line.170"></a>
+<span class="sourceLineNo">171</span>   */<a name="line.171"></a>
+<span class="sourceLineNo">172</span>  protected final String walFilePrefix;<a name="line.172"></a>
+<span class="sourceLineNo">173</span><a name="line.173"></a>
+<span class="sourceLineNo">174</span>  /**<a name="line.174"></a>
+<span class="sourceLineNo">175</span>   * Suffix included on generated wal file names<a name="line.175"></a>
+<span class="sourceLineNo">176</span>   */<a name="line.176"></a>
+<span class="sourceLineNo">177</span>  protected final String walFileSuffix;<a name="line.177"></a>
+<span class="sourceLineNo">178</span><a name="line.178"></a>
+<span class="sourceLineNo">179</span>  /**<a name="line.179"></a>
+<span class="sourceLineNo">180</span>   * Prefix used when checking for wal membership.<a name="line.180"></a>
+<span class="sourceLineNo">181</span>   */<a name="line.181"></a>
+<span class="sourceLineNo">182</span>  protected final String prefixPathStr;<a name="line.182"></a>
+<span class="sourceLineNo">183</span><a name="line.183"></a>
+<span class="sourceLineNo">184</span>  protected final WALCoprocessorHost coprocessorHost;<a name="line.184"></a>
+<span class="sourceLineNo">185</span><a name="line.185"></a>
+<span class="sourceLineNo">186</span>  /**<a name="line.186"></a>
+<span class="sourceLineNo">187</span>   * conf object<a name="line.187"></a>
+<span class="sourceLineNo">188</span>   */<a name="line.188"></a>
+<span class="sourceLineNo">189</span>  protected final Configuration conf;<a name="line.189"></a>
+<span class="sourceLineNo">190</span><a name="line.190"></a>
+<span class="sourceLineNo">191</span>  protected final Abortable abortable;<a name="line.191"></a>
+<span class="sourceLineNo">192</span><a name="line.192"></a>
+<span class="sourceLineNo">193</span>  /** Listeners that are called on WAL events. */<a name="line.193"></a>
+<span class="sourceLineNo">194</span>  protected final List&lt;WALActionsListener&gt; listeners = new CopyOnWriteArrayList&lt;&gt;();<a name="line.194"></a>
+<span class="sourceLineNo">195</span><a name="line.195"></a>
+<span class="sourceLineNo">196</span>  /** Tracks the logs in the process of being closed. */<a name="line.196"></a>
+<span class="sourceLineNo">197</span>  protected final Map&lt;String, W&gt; inflightWALClosures = new ConcurrentHashMap&lt;&gt;();<a name="line.197"></a>
+<span class="sourceLineNo">198</span><a name="line.198"></a>
+<span class="sourceLineNo">199</span>  /**<a name="line.199"></a>
+<span class="sourceLineNo">200</span>   * Class that does accounting of sequenceids in WAL subsystem. Holds oldest outstanding sequence<a name="line.200"></a>
+<span class="sourceLineNo">201</span>   * id as yet not flushed as well as the most recent edit sequence id appended to the WAL. Has<a name="line.201"></a>
+<span class="sourceLineNo">202</span>   * facility for answering questions such as "Is it safe to GC a WAL?".<a name="line.202"></a>
+<span class="sourceLineNo">203</span>   */<a name="line.203"></a>
+<span class="sourceLineNo">204</span>  protected final SequenceIdAccounting sequenceIdAccounting = new SequenceIdAccounting();<a name="line.204"></a>
+<span class="sourceLineNo">205</span><a name="line.205"></a>
+<span class="sourceLineNo">206</span>  /** The slow sync will be logged; the very slow sync will cause the WAL to be rolled. */<a name="line.206"></a>
+<span class="sourceLineNo">207</span>  protected final long slowSyncNs, rollOnSyncNs;<a name="line.207"></a>
+<span class="sourceLineNo">208</span>  protected final int slowSyncRollThreshold;<a name="line.208"></a>
+<span class="sourceLineNo">209</span>  protected final int slowSyncCheckInterval;<a name="line.209"></a>
+<span class="sourceLineNo">210</span>  protected final AtomicInteger slowSyncCount = new AtomicInteger();<a name="line.210"></a>
 <span class="sourceLineNo">211</span><a name="line.211"></a>
-<span class="sourceLineNo">212</span>  // If &gt; than this size, roll the log.<a name="line.212"></a>
-<span class="sourceLineNo">213</span>  protected final long logrollsize;<a name="line.213"></a>
-<span class="sourceLineNo">214</span><a name="line.214"></a>
-<span class="sourceLineNo">215</span>  /**<a name="line.215"></a>
-<span class="sourceLineNo">216</span>   * Block size to use writing files.<a name="line.216"></a>
-<span class="sourceLineNo">217</span>   */<a name="line.217"></a>
-<span class="sourceLineNo">218</span>  protected final long blocksize;<a name="line.218"></a>
-<span class="sourceLineNo">219</span><a name="line.219"></a>
-<span class="sourceLineNo">220</span>  /*<a name="line.220"></a>
-<span class="sourceLineNo">221</span>   * If more than this many logs, force flush of oldest region to oldest edit goes to disk. If too<a name="line.221"></a>
-<span class="sourceLineNo">222</span>   * many and we crash, then will take forever replaying. Keep the number of logs tidy.<a name="line.222"></a>
-<span class="sourceLineNo">223</span>   */<a name="line.223"></a>
-<span class="sourceLineNo">224</span>  protected final int maxLogs;<a name="line.224"></a>
-<span class="sourceLineNo">225</span><a name="line.225"></a>
-<span class="sourceLineNo">226</span>  protected final boolean useHsync;<a name="line.226"></a>
-<span class="sourceLineNo">227</span><a name="line.227"></a>
-<span class="sourceLineNo">228</span>  /**<a name="line.228"></a>
-<span class="sourceLineNo">229</span>   * This lock makes sure only one log roll runs at a time. Should not be taken while any other lock<a name="line.229"></a>
-<span class="sourceLineNo">230</span>   * is held. We don't just use synchronized because that results in bogus and tedious findbugs<a name="line.230"></a>
-<span class="sourceLineNo">231</span>   * warning when it thinks synchronized controls writer thread safety. It is held when we are<a name="line.231"></a>
-<span class="sourceLineNo">232</span>   * actually rolling the log. It is checked when we are looking to see if we should roll the log or<a name="line.232"></a>
-<span class="sourceLineNo">233</span>   * not.<a name="line.233"></a>
-<span class="sourceLineNo">234</span>   */<a name="line.234"></a>
-<span class="sourceLineNo">235</span>  protected final ReentrantLock rollWriterLock = new ReentrantLock(true);<a name="line.235"></a>
-<span class="sourceLineNo">236</span><a name="line.236"></a>
-<span class="sourceLineNo">237</span>  // The timestamp (in ms) when the log file was created.<a name="line.237"></a>
-<span class="sourceLineNo">238</span>  protected final AtomicLong filenum = new AtomicLong(-1);<a name="line.238"></a>
-<span class="sourceLineNo">239</span><a name="line.239"></a>
-<span class="sourceLineNo">240</span>  // Number of transactions in the current Wal.<a name="line.240"></a>
-<span class="sourceLineNo">241</span>  protected final AtomicInteger numEntries = new AtomicInteger(0);<a name="line.241"></a>
-<span class="sourceLineNo">242</span><a name="line.242"></a>
-<span class="sourceLineNo">243</span>  /**<a name="line.243"></a>
-<span class="sourceLineNo">244</span>   * The highest known outstanding unsync'd WALEdit transaction id. Usually, we use a queue to pass<a name="line.244"></a>
-<span class="sourceLineNo">245</span>   * WALEdit to background consumer thread, and the transaction id is the sequence number of the<a name="line.245"></a>
-<span class="sourceLineNo">246</span>   * corresponding entry in queue.<a name="line.246"></a>
-<span class="sourceLineNo">247</span>   */<a name="line.247"></a>
-<span class="sourceLineNo">248</span>  protected volatile long highestUnsyncedTxid = -1;<a name="line.248"></a>
-<span class="sourceLineNo">249</span><a name="line.249"></a>
-<span class="sourceLineNo">250</span>  /**<a name="line.250"></a>
-<span class="sourceLineNo">251</span>   * Updated to the transaction id of the last successful sync call. This can be less than<a name="line.251"></a>
-<span class="sourceLineNo">252</span>   * {@link #highestUnsyncedTxid} for case where we have an append where a sync has not yet come in<a name="line.252"></a>
-<span class="sourceLineNo">253</span>   * for it.<a name="line.253"></a>
-<span class="sourceLineNo">254</span>   */<a name="line.254"></a>
-<span class="sourceLineNo">255</span>  protected final AtomicLong highestSyncedTxid = new AtomicLong(0);<a name="line.255"></a>
-<span class="sourceLineNo">256</span><a name="line.256"></a>
-<span class="sourceLineNo">257</span>  /**<a name="line.257"></a>
-<span class="sourceLineNo">258</span>   * The total size of wal<a name="line.258"></a>
-<span class="sourceLineNo">259</span>   */<a name="line.259"></a>
-<span class="sourceLineNo">260</span>  protected final AtomicLong totalLogSize = new AtomicLong(0);<a name="line.260"></a>
+<span class="sourceLineNo">212</span>  private final long walSyncTimeoutNs;<a name="line.212"></a>
+<span class="sourceLineNo">213</span><a name="line.213"></a>
+<span class="sourceLineNo">214</span>  private final long walTooOldNs;<a name="line.214"></a>
+<span class="sourceLineNo">215</span><a name="line.215"></a>
+<span class="sourceLineNo">216</span>  // If &gt; than this size, roll the log.<a name="line.216"></a>
+<span class="sourceLineNo">217</span>  protected final long logrollsize;<a name="line.217"></a>
+<span class="sourceLineNo">218</span><a name="line.218"></a>
+<span class="sourceLineNo">219</span>  /**<a name="line.219"></a>
+<span class="sourceLineNo">220</span>   * Block size to use writing files.<a name="line.220"></a>
+<span class="sourceLineNo">221</span>   */<a name="line.221"></a>
+<span class="sourceLineNo">222</span>  protected final long blocksize;<a name="line.222"></a>
+<span class="sourceLineNo">223</span><a name="line.223"></a>
+<span class="sourceLineNo">224</span>  /*<a name="line.224"></a>
+<span class="sourceLineNo">225</span>   * If more than this many logs, force flush of oldest region to oldest edit goes to disk. If too<a name="line.225"></a>
+<span class="sourceLineNo">226</span>   * many and we crash, then will take forever replaying. Keep the number of logs tidy.<a name="line.226"></a>
+<span class="sourceLineNo">227</span>   */<a name="line.227"></a>
+<span class="sourceLineNo">228</span>  protected final int maxLogs;<a name="line.228"></a>
+<span class="sourceLineNo">229</span><a name="line.229"></a>
+<span class="sourceLineNo">230</span>  protected final boolean useHsync;<a name="line.230"></a>
+<span class="sourceLineNo">231</span><a name="line.231"></a>
+<span class="sourceLineNo">232</span>  /**<a name="line.232"></a>
+<span class="sourceLineNo">233</span>   * This lock makes sure only one log roll runs at a time. Should not be taken while any other lock<a name="line.233"></a>
+<span class="sourceLineNo">234</span>   * is held. We don't just use synchronized because that results in bogus and tedious findbugs<a name="line.234"></a>
+<span class="sourceLineNo">235</span>   * warning when it thinks synchronized controls writer thread safety. It is held when we are<a name="line.235"></a>
+<span class="sourceLineNo">236</span>   * actually rolling the log. It is checked when we are looking to see if we should roll the log or<a name="line.236"></a>
+<span class="sourceLineNo">237</span>   * not.<a name="line.237"></a>
+<span class="sourceLineNo">238</span>   */<a name="line.238"></a>
+<span class="sourceLineNo">239</span>  protected final ReentrantLock rollWriterLock = new ReentrantLock(true);<a name="line.239"></a>
+<span class="sourceLineNo">240</span><a name="line.240"></a>
+<span class="sourceLineNo">241</span>  // The timestamp (in ms) when the log file was created.<a name="line.241"></a>
+<span class="sourceLineNo">242</span>  protected final AtomicLong filenum = new AtomicLong(-1);<a name="line.242"></a>
+<span class="sourceLineNo">243</span><a name="line.243"></a>
+<span class="sourceLineNo">244</span>  // Number of transactions in the current Wal.<a name="line.244"></a>
+<span class="sourceLineNo">245</span>  protected final AtomicInteger numEntries = new AtomicInteger(0);<a name="line.245"></a>
+<span class="sourceLineNo">246</span><a name="line.246"></a>
+<span class="sourceLineNo">247</span>  /**<a name="line.247"></a>
+<span class="sourceLineNo">248</span>   * The highest known outstanding unsync'd WALEdit transaction id. Usually, we use a queue to pass<a name="line.248"></a>
+<span class="sourceLineNo">249</span>   * WALEdit to background consumer thread, and the transaction id is the sequence number of the<a name="line.249"></a>
+<span class="sourceLineNo">250</span>   * corresponding entry in queue.<a name="line.250"></a>
+<span class="sourceLineNo">251</span>   */<a name="line.251"></a>
+<span class="sourceLineNo">252</span>  protected volatile long highestUnsyncedTxid = -1;<a name="line.252"></a>
+<span class="sourceLineNo">253</span><a name="line.253"></a>
+<span class="sourceLineNo">254</span>  /**<a name="line.254"></a>
+<span class="sourceLineNo">255</span>   * Updated to the transaction id of the last successful sync call. This can be less than<a name="line.255"></a>
+<span class="sourceLineNo">256</span>   * {@link #highestUnsyncedTxid} for case where we have an append where a sync has not yet come in<a name="line.256"></a>
+<span class="sourceLineNo">257</span>   * for it.<a name="line.257"></a>
+<span class="sourceLineNo">258</span>   */<a name="line.258"></a>
+<span class="sourceLineNo">259</span>  protected final AtomicLong highestSyncedTxid = new AtomicLong(0);<a name="line.259"></a>
+<span class="sourceLineNo">260</span><a name="line.260"></a>
 <span class="sourceLineNo">261</span>  /**<a name="line.261"></a>
-<span class="sourceLineNo">262</span>   * Current log file.<a name="line.262"></a>
+<span class="sourceLineNo">262</span>   * The total size of wal<a name="line.262"></a>
 <span class="sourceLineNo">263</span>   */<a name="line.263"></a>
-<span class="sourceLineNo">264</span>  volatile W writer;<a name="line.264"></a>
-<span class="sourceLineNo">265</span><a name="line.265"></a>
-<span class="sourceLineNo">266</span>  // Last time to check low replication on hlog's pipeline<a name="line.266"></a>
-<span class="sourceLineNo">267</span>  private volatile long lastTimeCheckLowReplication = EnvironmentEdgeManager.currentTime();<a name="line.267"></a>
-<span class="sourceLineNo">268</span><a name="line.268"></a>
-<span class="sourceLineNo">269</span>  // Last time we asked to roll the log due to a slow sync<a name="line.269"></a>
-<span class="sourceLineNo">270</span>  private volatile long lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.270"></a>
-<span class="sourceLineNo">271</span><a name="line.271"></a>
-<span class="sourceLineNo">272</span>  protected volatile boolean closed = false;<a name="line.272"></a>
-<span class="sourceLineNo">273</span><a name="line.273"></a>
-<span class="sourceLineNo">274</span>  protected final AtomicBoolean shutdown = new AtomicBoolean(false);<a name="line.274"></a>
+<span class="sourceLineNo">264</span>  protected final AtomicLong totalLogSize = new AtomicLong(0);<a name="line.264"></a>
+<span class="sourceLineNo">265</span>  /**<a name="line.265"></a>
+<span class="sourceLineNo">266</span>   * Current log file.<a name="line.266"></a>
+<span class="sourceLineNo">267</span>   */<a name="line.267"></a>
+<span class="sourceLineNo">268</span>  volatile W writer;<a name="line.268"></a>
+<span class="sourceLineNo">269</span><a name="line.269"></a>
+<span class="sourceLineNo">270</span>  // Last time to check low replication on hlog's pipeline<a name="line.270"></a>
+<span class="sourceLineNo">271</span>  private volatile long lastTimeCheckLowReplication = EnvironmentEdgeManager.currentTime();<a name="line.271"></a>
+<span class="sourceLineNo">272</span><a name="line.272"></a>
+<span class="sourceLineNo">273</span>  // Last time we asked to roll the log due to a slow sync<a name="line.273"></a>
+<span class="sourceLineNo">274</span>  private volatile long lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.274"></a>
 <span class="sourceLineNo">275</span><a name="line.275"></a>
-<span class="sourceLineNo">276</span>  private long nextLogTooOldNs = System.nanoTime();<a name="line.276"></a>
+<span class="sourceLineNo">276</span>  protected volatile boolean closed = false;<a name="line.276"></a>
 <span class="sourceLineNo">277</span><a name="line.277"></a>
-<span class="sourceLineNo">278</span>  /**<a name="line.278"></a>
-<span class="sourceLineNo">279</span>   * WAL Comparator; it compares the timestamp (log filenum), present in the log file name. Throws<a name="line.279"></a>
-<span class="sourceLineNo">280</span>   * an IllegalArgumentException if used to compare paths from different wals.<a name="line.280"></a>
-<span class="sourceLineNo">281</span>   */<a name="line.281"></a>
-<span class="sourceLineNo">282</span>  final Comparator&lt;Path&gt; LOG_NAME_COMPARATOR =<a name="line.282"></a>
-<span class="sourceLineNo">283</span>    (o1, o2) -&gt; Long.compare(getFileNumFromFileName(o1), getFileNumFromFileName(o2));<a name="line.283"></a>
-<span class="sourceLineNo">284</span><a name="line.284"></a>
-<span class="sourceLineNo">285</span>  private static final class WalProps {<a name="line.285"></a>
-<span class="sourceLineNo">286</span><a name="line.286"></a>
-<span class="sourceLineNo">287</span>    /**<a name="line.287"></a>
-<span class="sourceLineNo">288</span>     * Map the encoded region name to the highest sequence id.<a name="line.288"></a>
-<span class="sourceLineNo">289</span>     * &lt;p/&gt;Contains all the regions it has an entry for.<a name="line.289"></a>
-<span class="sourceLineNo">290</span>     */<a name="line.290"></a>
-<span class="sourceLineNo">291</span>    public final Map&lt;byte[], Long&gt; encodedName2HighestSequenceId;<a name="line.291"></a>
-<span class="sourceLineNo">292</span><a name="line.292"></a>
-<span class="sourceLineNo">293</span>    /**<a name="line.293"></a>
-<span class="sourceLineNo">294</span>     * The log file size. Notice that the size may not be accurate if we do asynchronous close in<a name="line.294"></a>
-<span class="sourceLineNo">295</span>     * sub classes.<a name="line.295"></a>
-<span class="sourceLineNo">296</span>     */<a name="line.296"></a>
-<span class="sourceLineNo">297</span>    public final long logSize;<a name="line.297"></a>
-<span class="sourceLineNo">298</span><a name="line.298"></a>
-<span class="sourceLineNo">299</span>    /**<a name="line.299"></a>
-<span class="sourceLineNo">300</span>     * The nanoTime of the log rolling, used to determine the time interval that has passed since.<a name="line.300"></a>
-<span class="sourceLineNo">301</span>     */<a name="line.301"></a>
-<span class="sourceLineNo">302</span>    public final long rollTimeNs;<a name="line.302"></a>
-<span class="sourceLineNo">303</span><a name="line.303"></a>
-<span class="sourceLineNo">304</span>    public WalProps(Map&lt;byte[], Long&gt; encodedName2HighestSequenceId, long logSize) {<a name="line.304"></a>
-<span class="sourceLineNo">305</span>      this.encodedName2HighestSequenceId = encodedName2HighestSequenceId;<a name="line.305"></a>
-<span class="sourceLineNo">306</span>      this.logSize = logSize;<a name="line.306"></a>
-<span class="sourceLineNo">307</span>      this.rollTimeNs = System.nanoTime();<a name="line.307"></a>
-<span class="sourceLineNo">308</span>    }<a name="line.308"></a>
-<span class="sourceLineNo">309</span>  }<a name="line.309"></a>
-<span class="sourceLineNo">310</span><a name="line.310"></a>
-<span class="sourceLineNo">311</span>  /**<a name="line.311"></a>
-<span class="sourceLineNo">312</span>   * Map of WAL log file to properties. The map is sorted by the log file creation timestamp<a name="line.312"></a>
-<span class="sourceLineNo">313</span>   * (contained in the log file name).<a name="line.313"></a>
-<span class="sourceLineNo">314</span>   */<a name="line.314"></a>
-<span class="sourceLineNo">315</span>  protected ConcurrentNavigableMap&lt;Path, WalProps&gt; walFile2Props =<a name="line.315"></a>
-<span class="sourceLineNo">316</span>    new ConcurrentSkipListMap&lt;&gt;(LOG_NAME_COMPARATOR);<a name="line.316"></a>
-<span class="sourceLineNo">317</span><a name="line.317"></a>
-<span class="sourceLineNo">318</span>  /**<a name="line.318"></a>
-<span class="sourceLineNo">319</span>   * Map of {@link SyncFuture}s owned by Thread objects. Used so we reuse SyncFutures.<a name="line.319"></a>
-<span class="sourceLineNo">320</span>   * Thread local is used so JVM can GC the terminated thread for us. See HBASE-21228<a name="line.320"></a>
-<span class="sourceLineNo">321</span>   * &lt;p&gt;<a name="line.321"></a>
-<span class="sourceLineNo">322</span>   */<a name="line.322"></a>
-<span class="sourceLineNo">323</span>  private final ThreadLocal&lt;SyncFuture&gt; cachedSyncFutures;<a name="line.323"></a>
-<span class="sourceLineNo">324</span><a name="line.324"></a>
-<span class="sourceLineNo">325</span>  /**<a name="line.325"></a>
-<span class="sourceLineNo">326</span>   * The class name of the runtime implementation, used as prefix for logging/tracing.<a name="line.326"></a>
-<span class="sourceLineNo">327</span>   * &lt;p&gt;<a name="line.327"></a>
-<span class="sourceLineNo">328</span>   * Performance testing shows getClass().getSimpleName() might be a bottleneck so we store it here,<a name="line.328"></a>
-<span class="sourceLineNo">329</span>   * refer to HBASE-17676 for more details<a name="line.329"></a>
-<span class="sourceLineNo">330</span>   * &lt;/p&gt;<a name="line.330"></a>
-<span class="sourceLineNo">331</span>   */<a name="line.331"></a>
-<span class="sourceLineNo">332</span>  protected final String implClassName;<a name="line.332"></a>
-<span class="sourceLineNo">333</span><a name="line.333"></a>
-<span class="sourceLineNo">334</span>  protected final AtomicBoolean rollRequested = new AtomicBoolean(false);<a name="line.334"></a>
-<span class="sourceLineNo">335</span><a name="line.335"></a>
-<span class="sourceLineNo">336</span>  private final ExecutorService logArchiveExecutor = Executors.newSingleThreadExecutor(<a name="line.336"></a>
-<span class="sourceLineNo">337</span>    new ThreadFactoryBuilder().setDaemon(true).setNameFormat("WAL-Archiver-%d").build());<a name="line.337"></a>
-<span class="sourceLineNo">338</span><a name="line.338"></a>
-<span class="sourceLineNo">339</span>  private final int archiveRetries;<a name="line.339"></a>
-<span class="sourceLineNo">340</span><a name="line.340"></a>
-<span class="sourceLineNo">341</span>  public long getFilenum() {<a name="line.341"></a>
-<span class="sourceLineNo">342</span>    return this.filenum.get();<a name="line.342"></a>
-<span class="sourceLineNo">343</span>  }<a name="line.343"></a>
+<span class="sourceLineNo">278</span>  protected final AtomicBoolean shutdown = new AtomicBoolean(false);<a name="line.278"></a>
+<span class="sourceLineNo">279</span><a name="line.279"></a>
+<span class="sourceLineNo">280</span>  private long nextLogTooOldNs = System.nanoTime();<a name="line.280"></a>
+<span class="sourceLineNo">281</span><a name="line.281"></a>
+<span class="sourceLineNo">282</span>  /**<a name="line.282"></a>
+<span class="sourceLineNo">283</span>   * WAL Comparator; it compares the timestamp (log filenum), present in the log file name. Throws<a name="line.283"></a>
+<span class="sourceLineNo">284</span>   * an IllegalArgumentException if used to compare paths from different wals.<a name="line.284"></a>
+<span class="sourceLineNo">285</span>   */<a name="line.285"></a>
+<span class="sourceLineNo">286</span>  final Comparator&lt;Path&gt; LOG_NAME_COMPARATOR =<a name="line.286"></a>
+<span class="sourceLineNo">287</span>    (o1, o2) -&gt; Long.compare(getFileNumFromFileName(o1), getFileNumFromFileName(o2));<a name="line.287"></a>
+<span class="sourceLineNo">288</span><a name="line.288"></a>
+<span class="sourceLineNo">289</span>  private static final class WalProps {<a name="line.289"></a>
+<span class="sourceLineNo">290</span><a name="line.290"></a>
+<span class="sourceLineNo">291</span>    /**<a name="line.291"></a>
+<span class="sourceLineNo">292</span>     * Map the encoded region name to the highest sequence id.<a name="line.292"></a>
+<span class="sourceLineNo">293</span>     * &lt;p/&gt;Contains all the regions it has an entry for.<a name="line.293"></a>
+<span class="sourceLineNo">294</span>     */<a name="line.294"></a>
+<span class="sourceLineNo">295</span>    public final Map&lt;byte[], Long&gt; encodedName2HighestSequenceId;<a name="line.295"></a>
+<span class="sourceLineNo">296</span><a name="line.296"></a>
+<span class="sourceLineNo">297</span>    /**<a name="line.297"></a>
+<span class="sourceLineNo">298</span>     * The log file size. Notice that the size may not be accurate if we do asynchronous close in<a name="line.298"></a>
+<span class="sourceLineNo">299</span>     * sub classes.<a name="line.299"></a>
+<span class="sourceLineNo">300</span>     */<a name="line.300"></a>
+<span class="sourceLineNo">301</span>    public final long logSize;<a name="line.301"></a>
+<span class="sourceLineNo">302</span><a name="line.302"></a>
+<span class="sourceLineNo">303</span>    /**<a name="line.303"></a>
+<span class="sourceLineNo">304</span>     * The nanoTime of the log rolling, used to determine the time interval that has passed since.<a name="line.304"></a>
+<span class="sourceLineNo">305</span>     */<a name="line.305"></a>
+<span class="sourceLineNo">306</span>    public final long rollTimeNs;<a name="line.306"></a>
+<span class="sourceLineNo">307</span><a name="line.307"></a>
+<span class="sourceLineNo">308</span>    public WalProps(Map&lt;byte[], Long&gt; encodedName2HighestSequenceId, long logSize) {<a name="line.308"></a>
+<span class="sourceLineNo">309</span>      this.encodedName2HighestSequenceId = encodedName2HighestSequenceId;<a name="line.309"></a>
+<span class="sourceLineNo">310</span>      this.logSize = logSize;<a name="line.310"></a>
+<span class="sourceLineNo">311</span>      this.rollTimeNs = System.nanoTime();<a name="line.311"></a>
+<span class="sourceLineNo">312</span>    }<a name="line.312"></a>
+<span class="sourceLineNo">313</span>  }<a name="line.313"></a>
+<span class="sourceLineNo">314</span><a name="line.314"></a>
+<span class="sourceLineNo">315</span>  /**<a name="line.315"></a>
+<span class="sourceLineNo">316</span>   * Map of WAL log file to properties. The map is sorted by the log file creation timestamp<a name="line.316"></a>
+<span class="sourceLineNo">317</span>   * (contained in the log file name).<a name="line.317"></a>
+<span class="sourceLineNo">318</span>   */<a name="line.318"></a>
+<span class="sourceLineNo">319</span>  protected ConcurrentNavigableMap&lt;Path, WalProps&gt; walFile2Props =<a name="line.319"></a>
+<span class="sourceLineNo">320</span>    new ConcurrentSkipListMap&lt;&gt;(LOG_NAME_COMPARATOR);<a name="line.320"></a>
+<span class="sourceLineNo">321</span><a name="line.321"></a>
+<span class="sourceLineNo">322</span>  /**<a name="line.322"></a>
+<span class="sourceLineNo">323</span>   * Map of {@link SyncFuture}s owned by Thread objects. Used so we reuse SyncFutures.<a name="line.323"></a>
+<span class="sourceLineNo">324</span>   * Thread local is used so JVM can GC the terminated thread for us. See HBASE-21228<a name="line.324"></a>
+<span class="sourceLineNo">325</span>   * &lt;p&gt;<a name="line.325"></a>
+<span class="sourceLineNo">326</span>   */<a name="line.326"></a>
+<span class="sourceLineNo">327</span>  private final ThreadLocal&lt;SyncFuture&gt; cachedSyncFutures;<a name="line.327"></a>
+<span class="sourceLineNo">328</span><a name="line.328"></a>
+<span class="sourceLineNo">329</span>  /**<a name="line.329"></a>
+<span class="sourceLineNo">330</span>   * The class name of the runtime implementation, used as prefix for logging/tracing.<a name="line.330"></a>
+<span class="sourceLineNo">331</span>   * &lt;p&gt;<a name="line.331"></a>
+<span class="sourceLineNo">332</span>   * Performance testing shows getClass().getSimpleName() might be a bottleneck so we store it here,<a name="line.332"></a>
+<span class="sourceLineNo">333</span>   * refer to HBASE-17676 for more details<a name="line.333"></a>
+<span class="sourceLineNo">334</span>   * &lt;/p&gt;<a name="line.334"></a>
+<span class="sourceLineNo">335</span>   */<a name="line.335"></a>
+<span class="sourceLineNo">336</span>  protected final String implClassName;<a name="line.336"></a>
+<span class="sourceLineNo">337</span><a name="line.337"></a>
+<span class="sourceLineNo">338</span>  protected final AtomicBoolean rollRequested = new AtomicBoolean(false);<a name="line.338"></a>
+<span class="sourceLineNo">339</span><a name="line.339"></a>
+<span class="sourceLineNo">340</span>  private final ExecutorService logArchiveExecutor = Executors.newSingleThreadExecutor(<a name="line.340"></a>
+<span class="sourceLineNo">341</span>    new ThreadFactoryBuilder().setDaemon(true).setNameFormat("WAL-Archiver-%d").build());<a name="line.341"></a>
+<span class="sourceLineNo">342</span><a name="line.342"></a>
+<span class="sourceLineNo">343</span>  private final int archiveRetries;<a name="line.343"></a>
 <span class="sourceLineNo">344</span><a name="line.344"></a>
-<span class="sourceLineNo">345</span>  /**<a name="line.345"></a>
-<span class="sourceLineNo">346</span>   * A log file has a creation timestamp (in ms) in its file name ({@link #filenum}. This helper<a name="line.346"></a>
-<span class="sourceLineNo">347</span>   * method returns the creation timestamp from a given log file. It extracts the timestamp assuming<a name="line.347"></a>
-<span class="sourceLineNo">348</span>   * the filename is created with the {@link #computeFilename(long filenum)} method.<a name="line.348"></a>
-<span class="sourceLineNo">349</span>   * @return timestamp, as in the log file name.<a name="line.349"></a>
-<span class="sourceLineNo">350</span>   */<a name="line.350"></a>
-<span class="sourceLineNo">351</span>  protected long getFileNumFromFileName(Path fileName) {<a name="line.351"></a>
-<span class="sourceLineNo">352</span>    checkNotNull(fileName, "file name can't be null");<a name="line.352"></a>
-<span class="sourceLineNo">353</span>    if (!ourFiles.accept(fileName)) {<a name="line.353"></a>
-<span class="sourceLineNo">354</span>      throw new IllegalArgumentException(<a name="line.354"></a>
-<span class="sourceLineNo">355</span>          "The log file " + fileName + " doesn't belong to this WAL. (" + toString() + ")");<a name="line.355"></a>
-<span class="sourceLineNo">356</span>    }<a name="line.356"></a>
-<span class="sourceLineNo">357</span>    final String fileNameString = fileName.toString();<a name="line.357"></a>
-<span class="sourceLineNo">358</span>    String chompedPath = fileNameString.substring(prefixPathStr.length(),<a name="line.358"></a>
-<span class="sourceLineNo">359</span>      (fileNameString.length() - walFileSuffix.length()));<a name="line.359"></a>
-<span class="sourceLineNo">360</span>    return Long.parseLong(chompedPath);<a name="line.360"></a>
-<span class="sourceLineNo">361</span>  }<a name="line.361"></a>
-<span class="sourceLineNo">362</span><a name="line.362"></a>
-<span class="sourceLineNo">363</span>  private int calculateMaxLogFiles(Configuration conf, long logRollSize) {<a name="line.363"></a>
-<span class="sourceLineNo">364</span>    Pair&lt;Long, MemoryType&gt; globalMemstoreSize = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.364"></a>
-<span class="sourceLineNo">365</span>    return (int) ((globalMemstoreSize.getFirst() * 2) / logRollSize);<a name="line.365"></a>
-<span class="sourceLineNo">366</span>  }<a name="line.366"></a>
-<span class="sourceLineNo">367</span><a name="line.367"></a>
-<span class="sourceLineNo">368</span>  // must be power of 2<a name="line.368"></a>
-<span class="sourceLineNo">369</span>  protected final int getPreallocatedEventCount() {<a name="line.369"></a>
-<span class="sourceLineNo">370</span>    // Preallocate objects to use on the ring buffer. The way that appends and syncs work, we will<a name="line.370"></a>
-<span class="sourceLineNo">371</span>    // be stuck and make no progress if the buffer is filled with appends only and there is no<a name="line.371"></a>
-<span class="sourceLineNo">372</span>    // sync. If no sync, then the handlers will be outstanding just waiting on sync completion<a name="line.372"></a>
-<span class="sourceLineNo">373</span>    // before they return.<a name="line.373"></a>
-<span class="sourceLineNo">374</span>    int preallocatedEventCount =<a name="line.374"></a>
-<span class="sourceLineNo">375</span>      this.conf.getInt(RING_BUFFER_SLOT_COUNT, 1024 * 16);<a name="line.375"></a>
-<span class="sourceLineNo">376</span>    checkArgument(preallocatedEventCount &gt;= 0, RING_BUFFER_SLOT_COUNT + " must &gt; 0");<a name="line.376"></a>
-<span class="sourceLineNo">377</span>    int floor = Integer.highestOneBit(preallocatedEventCount);<a name="line.377"></a>
-<span class="sourceLineNo">378</span>    if (floor == preallocatedEventCount) {<a name="line.378"></a>
-<span class="sourceLineNo">379</span>      return floor;<a name="line.379"></a>
-<span class="sourceLineNo">380</span>    }<a name="line.380"></a>
-<span class="sourceLineNo">381</span>    // max capacity is 1 &lt;&lt; 30<a name="line.381"></a>
-<span class="sourceLineNo">382</span>    if (floor &gt;= 1 &lt;&lt; 29) {<a name="line.382"></a>
-<span class="sourceLineNo">383</span>      return 1 &lt;&lt; 30;<a name="line.383"></a>
+<span class="sourceLineNo">345</span>  public long getFilenum() {<a name="line.345"></a>
+<span class="sourceLineNo">346</span>    return this.filenum.get();<a name="line.346"></a>
+<span class="sourceLineNo">347</span>  }<a name="line.347"></a>
+<span class="sourceLineNo">348</span><a name="line.348"></a>
+<span class="sourceLineNo">349</span>  /**<a name="line.349"></a>
+<span class="sourceLineNo">350</span>   * A log file has a creation timestamp (in ms) in its file name ({@link #filenum}. This helper<a name="line.350"></a>
+<span class="sourceLineNo">351</span>   * method returns the creation timestamp from a given log file. It extracts the timestamp assuming<a name="line.351"></a>
+<span class="sourceLineNo">352</span>   * the filename is created with the {@link #computeFilename(long filenum)} method.<a name="line.352"></a>
+<span class="sourceLineNo">353</span>   * @return timestamp, as in the log file name.<a name="line.353"></a>
+<span class="sourceLineNo">354</span>   */<a name="line.354"></a>
+<span class="sourceLineNo">355</span>  protected long getFileNumFromFileName(Path fileName) {<a name="line.355"></a>
+<span class="sourceLineNo">356</span>    checkNotNull(fileName, "file name can't be null");<a name="line.356"></a>
+<span class="sourceLineNo">357</span>    if (!ourFiles.accept(fileName)) {<a name="line.357"></a>
+<span class="sourceLineNo">358</span>      throw new IllegalArgumentException(<a name="line.358"></a>
+<span class="sourceLineNo">359</span>          "The log file " + fileName + " doesn't belong to this WAL. (" + toString() + ")");<a name="line.359"></a>
+<span class="sourceLineNo">360</span>    }<a name="line.360"></a>
+<span class="sourceLineNo">361</span>    final String fileNameString = fileName.toString();<a name="line.361"></a>
+<span class="sourceLineNo">362</span>    String chompedPath = fileNameString.substring(prefixPathStr.length(),<a name="line.362"></a>
+<span class="sourceLineNo">363</span>      (fileNameString.length() - walFileSuffix.length()));<a name="line.363"></a>
+<span class="sourceLineNo">364</span>    return Long.parseLong(chompedPath);<a name="line.364"></a>
+<span class="sourceLineNo">365</span>  }<a name="line.365"></a>
+<span class="sourceLineNo">366</span><a name="line.366"></a>
+<span class="sourceLineNo">367</span>  private int calculateMaxLogFiles(Configuration conf, long logRollSize) {<a name="line.367"></a>
+<span class="sourceLineNo">368</span>    Pair&lt;Long, MemoryType&gt; globalMemstoreSize = MemorySizeUtil.getGlobalMemStoreSize(conf);<a name="line.368"></a>
+<span class="sourceLineNo">369</span>    return (int) ((globalMemstoreSize.getFirst() * 2) / logRollSize);<a name="line.369"></a>
+<span class="sourceLineNo">370</span>  }<a name="line.370"></a>
+<span class="sourceLineNo">371</span><a name="line.371"></a>
+<span class="sourceLineNo">372</span>  // must be power of 2<a name="line.372"></a>
+<span class="sourceLineNo">373</span>  protected final int getPreallocatedEventCount() {<a name="line.373"></a>
+<span class="sourceLineNo">374</span>    // Preallocate objects to use on the ring buffer. The way that appends and syncs work, we will<a name="line.374"></a>
+<span class="sourceLineNo">375</span>    // be stuck and make no progress if the buffer is filled with appends only and there is no<a name="line.375"></a>
+<span class="sourceLineNo">376</span>    // sync. If no sync, then the handlers will be outstanding just waiting on sync completion<a name="line.376"></a>
+<span class="sourceLineNo">377</span>    // before they return.<a name="line.377"></a>
+<span class="sourceLineNo">378</span>    int preallocatedEventCount =<a name="line.378"></a>
+<span class="sourceLineNo">379</span>      this.conf.getInt(RING_BUFFER_SLOT_COUNT, 1024 * 16);<a name="line.379"></a>
+<span class="sourceLineNo">380</span>    checkArgument(preallocatedEventCount &gt;= 0, RING_BUFFER_SLOT_COUNT + " must &gt; 0");<a name="line.380"></a>
+<span class="sourceLineNo">381</span>    int floor = Integer.highestOneBit(preallocatedEventCount);<a name="line.381"></a>
+<span class="sourceLineNo">382</span>    if (floor == preallocatedEventCount) {<a name="line.382"></a>
+<span class="sourceLineNo">383</span>      return floor;<a name="line.383"></a>
 <span class="sourceLineNo">384</span>    }<a name="line.384"></a>
-<span class="sourceLineNo">385</span>    return floor &lt;&lt; 1;<a name="line.385"></a>
-<span class="sourceLineNo">386</span>  }<a name="line.386"></a>
-<span class="sourceLineNo">387</span><a name="line.387"></a>
-<span class="sourceLineNo">388</span>  protected AbstractFSWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.388"></a>
-<span class="sourceLineNo">389</span>      final String archiveDir, final Configuration conf, final List&lt;WALActionsListener&gt; listeners,<a name="line.389"></a>
-<span class="sourceLineNo">390</span>      final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.390"></a>
-<span class="sourceLineNo">391</span>      throws FailedLogCloseException, IOException {<a name="line.391"></a>
-<span class="sourceLineNo">392</span>    this(fs, null, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.392"></a>
-<span class="sourceLineNo">393</span>  }<a name="line.393"></a>
-<span class="sourceLineNo">394</span><a name="line.394"></a>
-<span class="sourceLineNo">395</span>  protected AbstractFSWAL(final FileSystem fs, final Abortable abortable, final Path rootDir,<a name="line.395"></a>
-<span class="sourceLineNo">396</span>      final String logDir, final String archiveDir, final Configuration conf,<a name="line.396"></a>
-<span class="sourceLineNo">397</span>      final List&lt;WALActionsListener&gt; listeners, final boolean failIfWALExists, final String prefix,<a name="line.397"></a>
-<span class="sourceLineNo">398</span>      final String suffix)<a name="line.398"></a>
-<span class="sourceLineNo">399</span>      throws FailedLogCloseException, IOException {<a name="line.399"></a>
-<span class="sourceLineNo">400</span>    this.fs = fs;<a name="line.400"></a>
-<span class="sourceLineNo">401</span>    this.walDir = new Path(rootDir, logDir);<a name="line.401"></a>
-<span class="sourceLineNo">402</span>    this.walArchiveDir = new Path(rootDir, archiveDir);<a name="line.402"></a>
-<span class="sourceLineNo">403</span>    this.conf = conf;<a name="line.403"></a>
-<span class="sourceLineNo">404</span>    this.abortable = abortable;<a name="line.404"></a>
-<span class="sourceLineNo">405</span><a name="line.405"></a>
-<span class="sourceLineNo">406</span>    if (!fs.exists(walDir) &amp;&amp; !fs.mkdirs(walDir)) {<a name="line.406"></a>
-<span class="sourceLineNo">407</span>      throw new IOException("Unable to mkdir " + walDir);<a name="line.407"></a>
-<span class="sourceLineNo">408</span>    }<a name="line.408"></a>
+<span class="sourceLineNo">385</span>    // max capacity is 1 &lt;&lt; 30<a name="line.385"></a>
+<span class="sourceLineNo">386</span>    if (floor &gt;= 1 &lt;&lt; 29) {<a name="line.386"></a>
+<span class="sourceLineNo">387</span>      return 1 &lt;&lt; 30;<a name="line.387"></a>
+<span class="sourceLineNo">388</span>    }<a name="line.388"></a>
+<span class="sourceLineNo">389</span>    return floor &lt;&lt; 1;<a name="line.389"></a>
+<span class="sourceLineNo">390</span>  }<a name="line.390"></a>
+<span class="sourceLineNo">391</span><a name="line.391"></a>
+<span class="sourceLineNo">392</span>  protected AbstractFSWAL(final FileSystem fs, final Path rootDir, final String logDir,<a name="line.392"></a>
+<span class="sourceLineNo">393</span>      final String archiveDir, final Configuration conf, final List&lt;WALActionsListener&gt; listeners,<a name="line.393"></a>
+<span class="sourceLineNo">394</span>      final boolean failIfWALExists, final String prefix, final String suffix)<a name="line.394"></a>
+<span class="sourceLineNo">395</span>      throws FailedLogCloseException, IOException {<a name="line.395"></a>
+<span class="sourceLineNo">396</span>    this(fs, null, rootDir, logDir, archiveDir, conf, listeners, failIfWALExists, prefix, suffix);<a name="line.396"></a>
+<span class="sourceLineNo">397</span>  }<a name="line.397"></a>
+<span class="sourceLineNo">398</span><a name="line.398"></a>
+<span class="sourceLineNo">399</span>  protected AbstractFSWAL(final FileSystem fs, final Abortable abortable, final Path rootDir,<a name="line.399"></a>
+<span class="sourceLineNo">400</span>      final String logDir, final String archiveDir, final Configuration conf,<a name="line.400"></a>
+<span class="sourceLineNo">401</span>      final List&lt;WALActionsListener&gt; listeners, final boolean failIfWALExists, final String prefix,<a name="line.401"></a>
+<span class="sourceLineNo">402</span>      final String suffix)<a name="line.402"></a>
+<span class="sourceLineNo">403</span>      throws FailedLogCloseException, IOException {<a name="line.403"></a>
+<span class="sourceLineNo">404</span>    this.fs = fs;<a name="line.404"></a>
+<span class="sourceLineNo">405</span>    this.walDir = new Path(rootDir, logDir);<a name="line.405"></a>
+<span class="sourceLineNo">406</span>    this.walArchiveDir = new Path(rootDir, archiveDir);<a name="line.406"></a>
+<span class="sourceLineNo">407</span>    this.conf = conf;<a name="line.407"></a>
+<span class="sourceLineNo">408</span>    this.abortable = abortable;<a name="line.408"></a>
 <span class="sourceLineNo">409</span><a name="line.409"></a>
-<span class="sourceLineNo">410</span>    if (!fs.exists(this.walArchiveDir)) {<a name="line.410"></a>
-<span class="sourceLineNo">411</span>      if (!fs.mkdirs(this.walArchiveDir)) {<a name="line.411"></a>
-<span class="sourceLineNo">412</span>        throw new IOException("Unable to mkdir " + this.walArchiveDir);<a name="line.412"></a>
-<span class="sourceLineNo">413</span>      }<a name="line.413"></a>
-<span class="sourceLineNo">414</span>    }<a name="line.414"></a>
-<span class="sourceLineNo">415</span><a name="line.415"></a>
-<span class="sourceLineNo">416</span>    // If prefix is null||empty then just name it wal<a name="line.416"></a>
-<span class="sourceLineNo">417</span>    this.walFilePrefix =<a name="line.417"></a>
-<span class="sourceLineNo">418</span>      prefix == null || prefix.isEmpty() ? "wal" : URLEncoder.encode(prefix, "UTF8");<a name="line.418"></a>
-<span class="sourceLineNo">419</span>    // we only correctly differentiate suffices when numeric ones start with '.'<a name="line.419"></a>
-<span class="sourceLineNo">420</span>    if (suffix != null &amp;&amp; !(suffix.isEmpty()) &amp;&amp; !(suffix.startsWith(WAL_FILE_NAME_DELIMITER))) {<a name="line.420"></a>
-<span class="sourceLineNo">421</span>      throw new IllegalArgumentException("WAL suffix must start with '" + WAL_FILE_NAME_DELIMITER +<a name="line.421"></a>
-<span class="sourceLineNo">422</span>        "' but instead was '" + suffix + "'");<a name="line.422"></a>
-<span class="sourceLineNo">423</span>    }<a name="line.423"></a>
-<span class="sourceLineNo">424</span>    // Now that it exists, set the storage policy for the entire directory of wal files related to<a name="line.424"></a>
-<span class="sourceLineNo">425</span>    // this FSHLog instance<a name="line.425"></a>
-<span class="sourceLineNo">426</span>    String storagePolicy =<a name="line.426"></a>
-<span class="sourceLineNo">427</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.427"></a>
-<span class="sourceLineNo">428</span>    CommonFSUtils.setStoragePolicy(fs, this.walDir, storagePolicy);<a name="line.428"></a>
-<span class="sourceLineNo">429</span>    this.walFileSuffix = (suffix == null) ? "" : URLEncoder.encode(suffix, "UTF8");<a name="line.429"></a>
-<span class="sourceLineNo">430</span>    this.prefixPathStr = new Path(walDir, walFilePrefix + WAL_FILE_NAME_DELIMITER).toString();<a name="line.430"></a>
-<span class="sourceLineNo">431</span><a name="line.431"></a>
-<span class="sourceLineNo">432</span>    this.ourFiles = new PathFilter() {<a name="line.432"></a>
-<span class="sourceLineNo">433</span>      @Override<a name="line.433"></a>
-<span class="sourceLineNo">434</span>      public boolean accept(final Path fileName) {<a name="line.434"></a>
-<span class="sourceLineNo">435</span>        // The path should start with dir/&lt;prefix&gt; and end with our suffix<a name="line.435"></a>
-<span class="sourceLineNo">436</span>        final String fileNameString = fileName.toString();<a name="line.436"></a>
-<span class="sourceLineNo">437</span>        if (!fileNameString.startsWith(prefixPathStr)) {<a name="line.437"></a>
-<span class="sourceLineNo">438</span>          return false;<a name="line.438"></a>
-<span class="sourceLineNo">439</span>        }<a name="line.439"></a>
-<span class="sourceLineNo">440</span>        if (walFileSuffix.isEmpty()) {<a name="line.440"></a>
-<span class="sourceLineNo">441</span>          // in the case of the null suffix, we need to ensure the filename ends with a timestamp.<a name="line.441"></a>
-<span class="sourceLineNo">442</span>          return org.apache.commons.lang3.StringUtils<a name="line.442"></a>
-<span class="sourceLineNo">443</span>              .isNumeric(fileNameString.substring(prefixPathStr.length()));<a name="line.443"></a>
-<span class="sourceLineNo">444</span>        } else if (!fileNameString.endsWith(walFileSuffix)) {<a name="line.444"></a>
-<span class="sourceLineNo">445</span>          return false;<a name="line.445"></a>
-<span class="sourceLineNo">446</span>        }<a name="line.446"></a>
-<span class="sourceLineNo">447</span>        return true;<a name="line.447"></a>
-<span class="sourceLineNo">448</span>      }<a name="line.448"></a>
-<span class="sourceLineNo">449</span>    };<a name="line.449"></a>
-<span class="sourceLineNo">450</span><a name="line.450"></a>
-<span class="sourceLineNo">451</span>    if (failIfWALExists) {<a name="line.451"></a>
-<span class="sourceLineNo">452</span>      final FileStatus[] walFiles = CommonFSUtils.listStatus(fs, walDir, ourFiles);<a name="line.452"></a>
-<span class="sourceLineNo">453</span>      if (null != walFiles &amp;&amp; 0 != walFiles.length) {<a name="line.453"></a>
-<span class="sourceLineNo">454</span>        throw new IOException("Target WAL already exists within directory " + walDir);<a name="line.454"></a>
-<span class="sourceLineNo">455</span>      }<a name="line.455"></a>
-<span class="sourceLineNo">456</span>    }<a name="line.456"></a>
-<span class="sourceLineNo">457</span><a name="line.457"></a>
-<span class="sourceLineNo">458</span>    // Register listeners. TODO: Should this exist anymore? We have CPs?<a name="line.458"></a>
-<span class="sourceLineNo">459</span>    if (listeners != null) {<a name="line.459"></a>
-<span class="sourceLineNo">460</span>      for (WALActionsListener i : listeners) {<a name="line.460"></a>
-<span class="sourceLineNo">461</span>        registerWALActionsListener(i);<a name="line.461"></a>
-<span class="sourceLineNo">462</span>      }<a name="line.462"></a>
-<span class="sourceLineNo">463</span>    }<a name="line.463"></a>
-<span class="sourceLineNo">464</span>    this.coprocessorHost = new WALCoprocessorHost(this, conf);<a name="line.464"></a>
-<span class="sourceLineNo">465</span><a name="line.465"></a>
-<span class="sourceLineNo">466</span>    // Schedule a WAL roll when the WAL is 50% of the HDFS block size. Scheduling at 50% of block<a name="line.466"></a>
-<span class="sourceLineNo">467</span>    // size should make it so WAL rolls before we get to the end-of-block (Block transitions cost<a name="line.467"></a>
-<span class="sourceLineNo">468</span>    // some latency). In hbase-1 we did this differently. We scheduled a roll when we hit 95% of<a name="line.468"></a>
-<span class="sourceLineNo">469</span>    // the block size but experience from the field has it that this was not enough time for the<a name="line.469"></a>
-<span class="sourceLineNo">470</span>    // roll to happen before end-of-block. So the new accounting makes WALs of about the same<a name="line.470"></a>
-<span class="sourceLineNo">471</span>    // size as those made in hbase-1 (to prevent surprise), we now have default block size as<a name="line.471"></a>
-<span class="sourceLineNo">472</span>    // 2 times the DFS default: i.e. 2 * DFS default block size rolling at 50% full will generally<a name="line.472"></a>
-<span class="sourceLineNo">473</span>    // make similar size logs to 1 * DFS default block size rolling at 95% full. See HBASE-19148.<a name="line.473"></a>
-<span class="sourceLineNo">474</span>    this.blocksize = WALUtil.getWALBlockSize(this.conf, this.fs, this.walDir);<a name="line.474"></a>
-<span class="sourceLineNo">475</span>    float multiplier = conf.getFloat(WAL_ROLL_MULTIPLIER, 0.5f);<a name="line.475"></a>
-<span class="sourceLineNo">476</span>    this.logrollsize = (long) (this.blocksize * multiplier);<a name="line.476"></a>
-<span class="sourceLineNo">477</span>    this.maxLogs = conf.getInt(MAX_LOGS, Math.max(32, calculateMaxLogFiles(conf, logrollsize)));<a name="line.477"></a>
-<span class="sourceLineNo">478</span><a name="line.478"></a>
-<span class="sourceLineNo">479</span>    LOG.info("WAL configuration: blocksize=" + StringUtils.byteDesc(blocksize) + ", rollsize=" +<a name="line.479"></a>
-<span class="sourceLineNo">480</span>      StringUtils.byteDesc(this.logrollsize) + ", prefix=" + this.walFilePrefix + ", suffix=" +<a name="line.480"></a>
-<span class="sourceLineNo">481</span>      walFileSuffix + ", logDir=" + this.walDir + ", archiveDir=" + this.walArchiveDir +<a name="line.481"></a>
-<span class="sourceLineNo">482</span>      ", maxLogs=" + this.maxLogs);<a name="line.482"></a>
-<span class="sourceLineNo">483</span>    this.slowSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(SLOW_SYNC_TIME_MS,<a name="line.483"></a>
-<span class="sourceLineNo">484</span>      DEFAULT_SLOW_SYNC_TIME_MS));<a name="line.484"></a>
-<span class="sourceLineNo">485</span>    this.rollOnSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(ROLL_ON_SYNC_TIME_MS,<a name="line.485"></a>
-<span class="sourceLineNo">486</span>      DEFAULT_ROLL_ON_SYNC_TIME_MS));<a name="line.486"></a>
-<span class="sourceLineNo">487</span>    this.slowSyncRollThreshold = conf.getInt(SLOW_SYNC_ROLL_THRESHOLD,<a name="line.487"></a>
-<span class="sourceLineNo">488</span>      DEFAULT_SLOW_SYNC_ROLL_THRESHOLD);<a name="line.488"></a>
-<span class="sourceLineNo">489</span>    this.slowSyncCheckInterval = conf.getInt(SLOW_SYNC_ROLL_INTERVAL_MS,<a name="line.489"></a>
-<span class="sourceLineNo">490</span>      DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS);<a name="line.490"></a>
-<span class="sourceLineNo">491</span>    this.walSyncTimeoutNs = TimeUnit.MILLISECONDS.toNanos(conf.getLong(WAL_SYNC_TIMEOUT_MS,<a name="line.491"></a>
-<span class="sourceLineNo">492</span>      DEFAULT_WAL_SYNC_TIMEOUT_MS));<a name="line.492"></a>
-<span class="sourceLineNo">493</span>    this.cachedSyncFutures = new ThreadLocal&lt;SyncFuture&gt;() {<a name="line.493"></a>
-<span class="sourceLineNo">494</span>      @Override<a name="line.494"></a>
-<span class="sourceLineNo">495</span>      protected SyncFuture initialValue() {<a name="line.495"></a>
-<span class="sourceLineNo">496</span>        return new SyncFuture();<a name="line.496"></a>
-<span class="sourceLineNo">497</span>      }<a name="line.497"></a>
-<span class="sourceLineNo">498</span>    };<a name="line.498"></a>
-<span class="sourceLineNo">499</span>    this.implClassName = getClass().getSimpleName();<a name="line.499"></a>
-<span class="sourceLineNo">500</span>    this.walTooOldNs = TimeUnit.SECONDS.toNanos(conf.getInt(<a name="line.500"></a>
-<span class="sourceLineNo">501</span>            SURVIVED_TOO_LONG_SEC_KEY, SURVIVED_TOO_LONG_SEC_DEFAULT));<a name="line.501"></a>
-<span class="sourceLineNo">502</span>    this.useHsync = conf.getBoolean(HRegion.WAL_HSYNC_CONF_KEY, HRegion.DEFAULT_WAL_HSYNC);<a name="line.502"></a>
-<span class="sourceLineNo">503</span>    archiveRetries = this.conf.getInt("hbase.regionserver.walroll.archive.retries", 0);<a name="line.503"></a>
-<span class="sourceLineNo">504</span><a name="line.504"></a>
-<span class="sourceLineNo">505</span>  }<a name="line.505"></a>
-<span class="sourceLineNo">506</span><a name="line.506"></a>
-<span class="sourceLineNo">507</span>  /**<a name="line.507"></a>
-<span class="sourceLineNo">508</span>   * Used to initialize the WAL. Usually just call rollWriter to create the first log writer.<a name="line.508"></a>
-<span class="sourceLineNo">509</span>   */<a name="line.509"></a>
-<span class="sourceLineNo">510</span>  public void init() throws IOException {<a name="line.510"></a>
-<span class="sourceLineNo">511</span>    rollWriter();<a name="line.511"></a>
-<span class="sourceLineNo">512</span>  }<a name="line.512"></a>
-<span class="sourceLineNo">513</span><a name="line.513"></a>
-<span class="sourceLineNo">514</span>  @Override<a name="line.514"></a>
-<span class="sourceLineNo">515</span>  public void registerWALActionsListener(WALActionsListener listener) {<a name="line.515"></a>
-<span class="sourceLineNo">516</span>    this.listeners.add(listener);<a name="line.516"></a>
-<span class="sourceLineNo">517</span>  }<a name="line.517"></a>
-<span class="sourceLineNo">518</span><a name="line.518"></a>
-<span class="sourceLineNo">519</span>  @Override<a name="line.519"></a>
-<span class="sourceLineNo">520</span>  public boolean unregisterWALActionsListener(WALActionsListener listener) {<a name="line.520"></a>
-<span class="sourceLineNo">521</span>    return this.listeners.remove(listener);<a name="line.521"></a>
-<span class="sourceLineNo">522</span>  }<a name="line.522"></a>
-<span class="sourceLineNo">523</span><a name="line.523"></a>
-<span class="sourceLineNo">524</span>  @Override<a name="line.524"></a>
-<span class="sourceLineNo">525</span>  public WALCoprocessorHost getCoprocessorHost() {<a name="line.525"></a>
-<span class="sourceLineNo">526</span>    return coprocessorHost;<a name="line.526"></a>
-<span class="sourceLineNo">527</span>  }<a name="line.527"></a>
-<span class="sourceLineNo">528</span><a name="line.528"></a>
-<span class="sourceLineNo">529</span>  @Override<a name="line.529"></a>
-<span class="sourceLineNo">530</span>  public Long startCacheFlush(byte[] encodedRegionName, Set&lt;byte[]&gt; families) {<a name="line.530"></a>
-<span class="sourceLineNo">531</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, families);<a name="line.531"></a>
-<span class="sourceLineNo">532</span>  }<a name="line.532"></a>
-<span class="sourceLineNo">533</span><a name="line.533"></a>
-<span class="sourceLineNo">534</span>  @Override<a name="line.534"></a>
-<span class="sourceLineNo">535</span>  public Long startCacheFlush(byte[] encodedRegionName, Map&lt;byte[], Long&gt; familyToSeq) {<a name="line.535"></a>
-<span class="sourceLineNo">536</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, familyToSeq);<a name="line.536"></a>
-<span class="sourceLineNo">537</span>  }<a name="line.537"></a>
-<span class="sourceLineNo">538</span><a name="line.538"></a>
-<span class="sourceLineNo">539</span>  @Override<a name="line.539"></a>
-<span class="sourceLineNo">540</span>  public void completeCacheFlush(byte[] encodedRegionName, long maxFlushedSeqId) {<a name="line.540"></a>
-<span class="sourceLineNo">541</span>    this.sequenceIdAccounting.completeCacheFlush(encodedRegionName, maxFlushedSeqId);<a name="line.541"></a>
-<span class="sourceLineNo">542</span>  }<a name="line.542"></a>
-<span class="sourceLineNo">543</span><a name="line.543"></a>
-<span class="sourceLineNo">544</span>  @Override<a name="line.544"></a>
-<span class="sourceLineNo">545</span>  public void abortCacheFlush(byte[] encodedRegionName) {<a name="line.545"></a>
-<span class="sourceLineNo">546</span>    this.sequenceIdAccounting.abortCacheFlush(encodedRegionName);<a name="line.546"></a>
-<span class="sourceLineNo">547</span>  }<a name="line.547"></a>
-<span class="sourceLineNo">548</span><a name="line.548"></a>
-<span class="sourceLineNo">549</span>  @Override<a name="line.549"></a>
-<span class="sourceLineNo">550</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName) {<a name="line.550"></a>
-<span class="sourceLineNo">551</span>    // Used by tests. Deprecated as too subtle for general usage.<a name="line.551"></a>
-<span class="sourceLineNo">552</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName);<a name="line.552"></a>
-<span class="sourceLineNo">553</span>  }<a name="line.553"></a>
-<span class="sourceLineNo">554</span><a name="line.554"></a>
-<span class="sourceLineNo">555</span>  @Override<a name="line.555"></a>
-<span class="sourceLineNo">556</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName) {<a name="line.556"></a>
-<span class="sourceLineNo">557</span>    // This method is used by tests and for figuring if we should flush or not because our<a name="line.557"></a>
-<span class="sourceLineNo">558</span>    // sequenceids are too old. It is also used reporting the master our oldest sequenceid for use<a name="line.558"></a>
-<span class="sourceLineNo">559</span>    // figuring what edits can be skipped during log recovery. getEarliestMemStoreSequenceId<a name="line.559"></a>
-<span class="sourceLineNo">560</span>    // from this.sequenceIdAccounting is looking first in flushingOldestStoreSequenceIds, the<a name="line.560"></a>
-<span class="sourceLineNo">561</span>    // currently flushing sequence ids, and if anything found there, it is returning these. This is<a name="line.561"></a>
-<span class="sourceLineNo">562</span>    // the right thing to do for the reporting oldest sequenceids to master; we won't skip edits if<a name="line.562"></a>
-<span class="sourceLineNo">563</span>    // we crash during the flush. For figuring what to flush, we might get requeued if our sequence<a name="line.563"></a>
-<span class="sourceLineNo">564</span>    // id is old even though we are currently flushing. This may mean we do too much flushing.<a name="line.564"></a>
-<span class="sourceLineNo">565</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName, familyName);<a name="line.565"></a>
-<span class="sourceLineNo">566</span>  }<a name="line.566"></a>
-<span class="sourceLineNo">567</span><a name="line.567"></a>
-<span class="sourceLineNo">568</span>  @Override<a name="line.568"></a>
-<span class="sourceLineNo">569</span>  public Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriter() throws FailedLogCloseException, IOException {<a name="line.569"></a>
-<span class="sourceLineNo">570</span>    return rollWriter(false);<a name="line.570"></a>
-<span class="sourceLineNo">571</span>  }<a name="line.571"></a>
-<span class="sourceLineNo">572</span><a name="line.572"></a>
-<span class="sourceLineNo">573</span>  @Override<a name="line.573"></a>
-<span class="sourceLineNo">574</span>  public final void sync() throws IOException {<a name="line.574"></a>
-<span class="sourceLineNo">575</span>    sync(useHsync);<a name="line.575"></a>
-<span class="sourceLineNo">576</span>  }<a name="line.576"></a>
-<span class="sourceLineNo">577</span><a name="line.577"></a>
-<span class="sourceLineNo">578</span>  @Override<a name="line.578"></a>
-<span class="sourceLineNo">579</span>  public final void sync(long txid) throws IOException {<a name="line.579"></a>
-<span class="sourceLineNo">580</span>    sync(txid, useHsync);<a name="line.580"></a>
-<span class="sourceLineNo">581</span>  }<a name="line.581"></a>
-<span class="sourceLineNo">582</span><a name="line.582"></a>
-<span class="sourceLineNo">583</span>  @Override<a name="line.583"></a>
-<span class="sourceLineNo">584</span>  public final void sync(boolean forceSync) throws IOException {<a name="line.584"></a>
-<span class="sourceLineNo">585</span>    TraceUtil.trace(() -&gt; {<a name="line.585"></a>
-<span class="sourceLineNo">586</span>      doSync(forceSync);<a name="line.586"></a>
-<span class="sourceLineNo">587</span>      return null;<a name="line.587"></a>
-<span class="sourceLineNo">588</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.588"></a>
-<span class="sourceLineNo">589</span>  }<a name="line.589"></a>
-<span class="sourceLineNo">590</span><a name="line.590"></a>
-<span class="sourceLineNo">591</span>  @Override<a name="line.591"></a>
-<span class="sourceLineNo">592</span>  public final void sync(long txid, boolean forceSync) throws IOException {<a name="line.592"></a>
-<span class="sourceLineNo">593</span>    TraceUtil.trace(() -&gt; {<a name="line.593"></a>
-<span class="sourceLineNo">594</span>      doSync(txid, forceSync);<a name="line.594"></a>
-<span class="sourceLineNo">595</span>      return null;<a name="line.595"></a>
-<span class="sourceLineNo">596</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.596"></a>
-<span class="sourceLineNo">597</span>  }<a name="line.597"></a>
-<span class="sourceLineNo">598</span><a name="line.598"></a>
-<span class="sourceLineNo">599</span>  protected abstract void doSync(boolean forceSync) throws IOException;<a name="line.599"></a>
-<span class="sourceLineNo">600</span><a name="line.600"></a>
-<span class="sourceLineNo">601</span>  protected abstract void doSync(long txid, boolean forceSync) throws IOException;<a name="line.601"></a>
-<span class="sourceLineNo">602</span>  /**<a name="line.602"></a>
-<span class="sourceLineNo">603</span>   * This is a convenience method that computes a new filename with a given file-number.<a name="line.603"></a>
-<span class="sourceLineNo">604</span>   * @param filenum to use<a name="line.604"></a>
-<span class="sourceLineNo">605</span>   * @return Path<a name="line.605"></a>
-<span class="sourceLineNo">606</span>   */<a name="line.606"></a>
-<span class="sourceLineNo">607</span>  protected Path computeFilename(final long filenum) {<a name="line.607"></a>
-<span class="sourceLineNo">608</span>    if (filenum &lt; 0) {<a name="line.608"></a>
-<span class="sourceLineNo">609</span>      throw new RuntimeException("WAL file number can't be &lt; 0");<a name="line.609"></a>
-<span class="sourceLineNo">610</span>    }<a name="line.610"></a>
-<span class="sourceLineNo">611</span>    String child = walFilePrefix + WAL_FILE_NAME_DELIMITER + filenum + walFileSuffix;<a name="line.611"></a>
-<span class="sourceLineNo">612</span>    return new Path(walDir, child);<a name="line.612"></a>
-<span class="sourceLineNo">613</span>  }<a name="line.613"></a>
-<span class="sourceLineNo">614</span><a name="line.614"></a>
-<span class="sourceLineNo">615</span>  /**<a name="line.615"></a>
-<span class="sourceLineNo">616</span>   * This is a convenience method that computes a new filename with a given using the current WAL<a name="line.616"></a>
-<span class="sourceLineNo">617</span>   * file-number<a name="line.617"></a>
-<span class="sourceLineNo">618</span>   * @return Path<a name="line.618"></a>
-<span class="sourceLineNo">619</span>   */<a name="line.619"></a>
-<span class="sourceLineNo">620</span>  public Path getCurrentFileName() {<a name="line.620"></a>
-<span class="sourceLineNo">621</span>    return computeFilename(this.filenum.get());<a name="line.621"></a>
-<span class="sourceLineNo">622</span>  }<a name="line.622"></a>
-<span class="sourceLineNo">623</span><a name="line.623"></a>
-<span class="sourceLineNo">624</span>  /**<a name="line.624"></a>
-<span class="sourceLineNo">625</span>   * retrieve the next path to use for writing. Increments the internal filenum.<a name="line.625"></a>
-<span class="sourceLineNo">626</span>   */<a name="line.626"></a>
-<span class="sourceLineNo">627</span>  private Path getNewPath() throws IOException {<a name="line.627"></a>
-<span class="sourceLineNo">628</span>    this.filenum.set(System.currentTimeMillis());<a name="line.628"></a>
-<span class="sourceLineNo">629</span>    Path newPath = getCurrentFileName();<a name="line.629"></a>
-<span class="sourceLineNo">630</span>    while (fs.exists(newPath)) {<a name="line.630"></a>
-<span class="sourceLineNo">631</span>      this.filenum.incrementAndGet();<a name="line.631"></a>
-<span class="sourceLineNo">632</span>      newPath = getCurrentFileName();<a name="line.632"></a>
-<span class="sourceLineNo">633</span>    }<a name="line.633"></a>
-<span class="sourceLineNo">634</span>    return newPath;<a name="line.634"></a>
-<span class="sourceLineNo">635</span>  }<a name="line.635"></a>
-<span class="sourceLineNo">636</span><a name="line.636"></a>
-<span class="sourceLineNo">637</span>  Path getOldPath() {<a name="line.637"></a>
-<span class="sourceLineNo">638</span>    long currentFilenum = this.filenum.get();<a name="line.638"></a>
-<span class="sourceLineNo">639</span>    Path oldPath = null;<a name="line.639"></a>
-<span class="sourceLineNo">640</span>    if (currentFilenum &gt; 0) {<a name="line.640"></a>
-<span class="sourceLineNo">641</span>      // ComputeFilename will take care of meta wal filename<a name="line.641"></a>
-<span class="sourceLineNo">642</span>      oldPath = computeFilename(currentFilenum);<a name="line.642"></a>
-<span class="sourceLineNo">643</span>    } // I presume if currentFilenum is &lt;= 0, this is first file and null for oldPath if fine?<a name="line.643"></a>
-<span class="sourceLineNo">644</span>    return oldPath;<a name="line.644"></a>
-<span class="sourceLineNo">645</span>  }<a name="line.645"></a>
-<span class="sourceLineNo">646</span><a name="line.646"></a>
-<span class="sourceLineNo">647</span>  /**<a name="line.647"></a>
-<span class="sourceLineNo">648</span>   * Tell listeners about pre log roll.<a name="line.648"></a>
-<span class="sourceLineNo">649</span>   */<a name="line.649"></a>
-<span class="sourceLineNo">650</span>  private void tellListenersAboutPreLogRoll(final Path oldPath, final Path newPath)<a name="line.650"></a>
-<span class="sourceLineNo">651</span>      throws IOException {<a name="line.651"></a>
-<span class="sourceLineNo">652</span>    coprocessorHost.preWALRoll(oldPath, newPath);<a name="line.652"></a>
-<span class="sourceLineNo">653</span><a name="line.653"></a>
-<span class="sourceLineNo">654</span>    if (!this.listeners.isEmpty()) {<a name="line.654"></a>
-<span class="sourceLineNo">655</span>      for (WALActionsListener i : this.listeners) {<a name="line.655"></a>
-<span class="sourceLineNo">656</span>        i.preLogRoll(oldPath, newPath);<a name="line.656"></a>
-<span class="sourceLineNo">657</span>      }<a name="line.657"></a>
-<span class="sourceLineNo">658</span>    }<a name="line.658"></a>
-<span class="sourceLineNo">659</span>  }<a name="line.659"></a>
-<span class="sourceLineNo">660</span><a name="line.660"></a>
-<span class="sourceLineNo">661</span>  /**<a name="line.661"></a>
-<span class="sourceLineNo">662</span>   * Tell listeners about post log roll.<a name="line.662"></a>
-<span class="sourceLineNo">663</span>   */<a name="line.663"></a>
-<span class="sourceLineNo">664</span>  private void tellListenersAboutPostLogRoll(final Path oldPath, final Path newPath)<a name="line.664"></a>
-<span class="sourceLineNo">665</span>      throws IOException {<a name="line.665"></a>
-<span class="sourceLineNo">666</span>    if (!this.listeners.isEmpty()) {<a name="line.666"></a>
-<span class="sourceLineNo">667</span>      for (WALActionsListener i : this.listeners) {<a name="line.667"></a>
-<span class="sourceLineNo">668</span>        i.postLogRoll(oldPath, newPath);<a name="line.668"></a>
-<span class="sourceLineNo">669</span>      }<a name="line.669"></a>
-<span class="sourceLineNo">670</span>    }<a name="line.670"></a>
-<span class="sourceLineNo">671</span><a name="line.671"></a>
-<span class="sourceLineNo">672</span>    coprocessorHost.postWALRoll(oldPath, newPath);<a name="line.672"></a>
-<span class="sourceLineNo">673</span>  }<a name="line.673"></a>
-<span class="sourceLineNo">674</span><a name="line.674"></a>
-<span class="sourceLineNo">675</span>  // public only until class moves to o.a.h.h.wal<a name="line.675"></a>
-<span class="sourceLineNo">676</span>  /** @return the number of rolled log files */<a name="line.676"></a>
-<span class="sourceLineNo">677</span>  public int getNumRolledLogFiles() {<a name="line.677"></a>
-<span class="sourceLineNo">678</span>    return walFile2Props.size();<a name="line.678"></a>
-<span class="sourceLineNo">679</span>  }<a name="line.679"></a>
-<span class="sourceLineNo">680</span><a name="line.680"></a>
-<span class="sourceLineNo">681</span>  // public only until class moves to o.a.h.h.wal<a name="line.681"></a>
-<span class="sourceLineNo">682</span>  /** @return the number of log files in use */<a name="line.682"></a>
-<span class="sourceLineNo">683</span>  public int getNumLogFiles() {<a name="line.683"></a>
-<span class="sourceLineNo">684</span>    // +1 for current use log<a name="line.684"></a>
-<span class="sourceLineNo">685</span>    return getNumRolledLogFiles() + 1;<a name="line.685"></a>
-<span class="sourceLineNo">686</span>  }<a name="line.686"></a>
-<span class="sourceLineNo">687</span><a name="line.687"></a>
-<span class="sourceLineNo">688</span>  /**<a name="line.688"></a>
-<span class="sourceLineNo">689</span>   * If the number of un-archived WAL files ('live' WALs) is greater than maximum allowed,<a name="line.689"></a>
-<span class="sourceLineNo">690</span>   * check the first (oldest) WAL, and return those regions which should be flushed so that<a name="line.690"></a>
-<span class="sourceLineNo">691</span>   * it can be let-go/'archived'.<a name="line.691"></a>
-<span class="sourceLineNo">692</span>   * @return stores of regions (encodedRegionNames) to flush in order to archive oldest WAL file.<a name="line.692"></a>
-<span class="sourceLineNo">693</span>   */<a name="line.693"></a>
-<span class="sourceLineNo">694</span>  Map&lt;byte[], List&lt;byte[]&gt;&gt; findRegionsToForceFlush() throws IOException {<a name="line.694"></a>
-<span class="sourceLineNo">695</span>    Map&lt;byte[], List&lt;byte[]&gt;&gt; regions = null;<a name="line.695"></a>
-<span class="sourceLineNo">696</span>    int logCount = getNumRolledLogFiles();<a name="line.696"></a>
-<span class="sourceLineNo">697</span>    if (logCount &gt; this.maxLogs &amp;&amp; logCount &gt; 0) {<a name="line.697"></a>
-<span class="sourceLineNo">698</span>      Map.Entry&lt;Path, WalProps&gt; firstWALEntry = this.walFile2Props.firstEntry();<a name="line.698"></a>
-<span class="sourceLineNo">699</span>      regions =<a name="line.699"></a>
-<span class="sourceLineNo">700</span>        this.sequenceIdAccounting.findLower(firstWALEntry.getValue().encodedName2HighestSequenceId);<a name="line.700"></a>
-<span class="sourceLineNo">701</span>    }<a name="line.701"></a>
-<span class="sourceLineNo">702</span>    if (regions != null) {<a name="line.702"></a>
-<span class="sourceLineNo">703</span>      List&lt;String&gt; listForPrint = new ArrayList&lt;&gt;();<a name="line.703"></a>
-<span class="sourceLineNo">704</span>      for (Map.Entry&lt;byte[], List&lt;byte[]&gt;&gt; r : regions.entrySet()) {<a name="line.704"></a>
-<span class="sourceLineNo">705</span>        StringBuilder families = new StringBuilder();<a name="line.705"></a>
-<span class="sourceLineNo">706</span>        for (int i = 0; i &lt; r.getValue().size(); i++) {<a name="line.706"></a>
-<span class="sourceLineNo">707</span>          if (i &gt; 0) {<a name="line.707"></a>
-<span class="sourceLineNo">708</span>            families.append(",");<a name="line.708"></a>
-<span class="sourceLineNo">709</span>          }<a name="line.709"></a>
-<span class="sourceLineNo">710</span>          families.append(Bytes.toString(r.getValue().get(i)));<a name="line.710"></a>
-<span class="sourceLineNo">711</span>        }<a name="line.711"></a>
-<span class="sourceLineNo">712</span>        listForPrint.add(Bytes.toStringBinary(r.getKey()) + "[" + families.toString() + "]");<a name="line.712"></a>
-<span class="sourceLineNo">713</span>      }<a name="line.713"></a>
-<span class="sourceLineNo">714</span>      LOG.info("Too many WALs; count=" + logCount + ", max=" + this.maxLogs +<a name="line.714"></a>
-<span class="sourceLineNo">715</span>        "; forcing (partial) flush of " + regions.size() + " region(s): " +<a name="line.715"></a>
-<span class="sourceLineNo">716</span>        StringUtils.join(",", listForPrint));<a name="line.716"></a>
-<span class="sourceLineNo">717</span>    }<a name="line.717"></a>
-<span class="sourceLineNo">718</span>    return regions;<a name="line.718"></a>
-<span class="sourceLineNo">719</span>  }<a name="line.719"></a>
-<span class="sourceLineNo">720</span><a name="line.720"></a>
-<span class="sourceLineNo">721</span>  /**<a name="line.721"></a>
-<span class="sourceLineNo">722</span>   * Archive old logs. A WAL is eligible for archiving if all its WALEdits have been flushed.<a name="line.722"></a>
-<span class="sourceLineNo">723</span>   */<a name="line.723"></a>
-<span class="sourceLineNo">724</span>  private void cleanOldLogs() throws IOException {<a name="line.724"></a>
-<span class="sourceLineNo">725</span>    List&lt;Pair&lt;Path, Long&gt;&gt; logsToArchive = null;<a name="line.725"></a>
-<span class="sourceLineNo">726</span>    long now = System.nanoTime();<a name="line.726"></a>
-<span class="sourceLineNo">727</span>    boolean mayLogTooOld = nextLogTooOldNs &lt;= now;<a name="line.727"></a>
-<span class="sourceLineNo">728</span>    ArrayList&lt;byte[]&gt; regionsBlockingWal = null;<a name="line.728"></a>
-<span class="sourceLineNo">729</span>    // For each log file, look at its Map of regions to highest sequence id; if all sequence ids<a name="line.729"></a>
-<span class="sourceLineNo">730</span>    // are older than what is currently in memory, the WAL can be GC'd.<a name="line.730"></a>
-<span class="sourceLineNo">731</span>    for (Map.Entry&lt;Path, WalProps&gt; e : this.walFile2Props.entrySet()) {<a name="line.731"></a>
-<span class="sourceLineNo">732</span>      Path log = e.getKey();<a name="line.732"></a>
-<span class="sourceLineNo">733</span>      ArrayList&lt;byte[]&gt; regionsBlockingThisWal = null;<a name="line.733"></a>
-<span class="sourceLineNo">734</span>      long ageNs = now - e.getValue().rollTimeNs;<a name="line.734"></a>
-<span class="sourceLineNo">735</span>      if (ageNs &gt; walTooOldNs) {<a name="line.735"></a>
-<span class="sourceLineNo">736</span>        if (mayLogTooOld &amp;&amp; regionsBlockingWal == null) {<a name="line.736"></a>
-<span class="sourceLineNo">737</span>          regionsBlockingWal = new ArrayList&lt;&gt;();<a name="line.737"></a>
-<span class="sourceLineNo">738</span>        }<a name="line.738"></a>
-<span class="sourceLineNo">739</span>        regionsBlockingThisWal = regionsBlockingWal;<a name="line.739"></a>
-<span class="sourceLineNo">740</span>      }<a name="line.740"></a>
-<span class="sourceLineNo">741</span>      Map&lt;byte[], Long&gt; sequenceNums = e.getValue().encodedName2HighestSequenceId;<a name="line.741"></a>
-<span class="sourceLineNo">742</span>      if (this.sequenceIdAccounting.areAllLower(sequenceNums, regionsBlockingThisWal)) {<a name="line.742"></a>
-<span class="sourceLineNo">743</span>        if (logsToArchive == null) {<a name="line.743"></a>
-<span class="sourceLineNo">744</span>          logsToArchive = new ArrayList&lt;&gt;();<a name="line.744"></a>
-<span class="sourceLineNo">745</span>        }<a name="line.745"></a>
-<span class="sourceLineNo">746</span>        logsToArchive.add(Pair.newPair(log, e.getValue().logSize));<a name="line.746"></a>
-<span class="sourceLineNo">747</span>        if (LOG.isTraceEnabled()) {<a name="line.747"></a>
-<span class="sourceLineNo">748</span>          LOG.trace("WAL file ready for archiving " + log);<a name="line.748"></a>
+<span class="sourceLineNo">410</span>    if (!fs.exists(walDir) &amp;&amp; !fs.mkdirs(walDir)) {<a name="line.410"></a>
+<span class="sourceLineNo">411</span>      throw new IOException("Unable to mkdir " + walDir);<a name="line.411"></a>
+<span class="sourceLineNo">412</span>    }<a name="line.412"></a>
+<span class="sourceLineNo">413</span><a name="line.413"></a>
+<span class="sourceLineNo">414</span>    if (!fs.exists(this.walArchiveDir)) {<a name="line.414"></a>
+<span class="sourceLineNo">415</span>      if (!fs.mkdirs(this.walArchiveDir)) {<a name="line.415"></a>
+<span class="sourceLineNo">416</span>        throw new IOException("Unable to mkdir " + this.walArchiveDir);<a name="line.416"></a>
+<span class="sourceLineNo">417</span>      }<a name="line.417"></a>
+<span class="sourceLineNo">418</span>    }<a name="line.418"></a>
+<span class="sourceLineNo">419</span><a name="line.419"></a>
+<span class="sourceLineNo">420</span>    // If prefix is null||empty then just name it wal<a name="line.420"></a>
+<span class="sourceLineNo">421</span>    this.walFilePrefix =<a name="line.421"></a>
+<span class="sourceLineNo">422</span>      prefix == null || prefix.isEmpty() ? "wal" : URLEncoder.encode(prefix, "UTF8");<a name="line.422"></a>
+<span class="sourceLineNo">423</span>    // we only correctly differentiate suffices when numeric ones start with '.'<a name="line.423"></a>
+<span class="sourceLineNo">424</span>    if (suffix != null &amp;&amp; !(suffix.isEmpty()) &amp;&amp; !(suffix.startsWith(WAL_FILE_NAME_DELIMITER))) {<a name="line.424"></a>
+<span class="sourceLineNo">425</span>      throw new IllegalArgumentException("WAL suffix must start with '" + WAL_FILE_NAME_DELIMITER +<a name="line.425"></a>
+<span class="sourceLineNo">426</span>        "' but instead was '" + suffix + "'");<a name="line.426"></a>
+<span class="sourceLineNo">427</span>    }<a name="line.427"></a>
+<span class="sourceLineNo">428</span>    // Now that it exists, set the storage policy for the entire directory of wal files related to<a name="line.428"></a>
+<span class="sourceLineNo">429</span>    // this FSHLog instance<a name="line.429"></a>
+<span class="sourceLineNo">430</span>    String storagePolicy =<a name="line.430"></a>
+<span class="sourceLineNo">431</span>        conf.get(HConstants.WAL_STORAGE_POLICY, HConstants.DEFAULT_WAL_STORAGE_POLICY);<a name="line.431"></a>
+<span class="sourceLineNo">432</span>    CommonFSUtils.setStoragePolicy(fs, this.walDir, storagePolicy);<a name="line.432"></a>
+<span class="sourceLineNo">433</span>    this.walFileSuffix = (suffix == null) ? "" : URLEncoder.encode(suffix, "UTF8");<a name="line.433"></a>
+<span class="sourceLineNo">434</span>    this.prefixPathStr = new Path(walDir, walFilePrefix + WAL_FILE_NAME_DELIMITER).toString();<a name="line.434"></a>
+<span class="sourceLineNo">435</span><a name="line.435"></a>
+<span class="sourceLineNo">436</span>    this.ourFiles = new PathFilter() {<a name="line.436"></a>
+<span class="sourceLineNo">437</span>      @Override<a name="line.437"></a>
+<span class="sourceLineNo">438</span>      public boolean accept(final Path fileName) {<a name="line.438"></a>
+<span class="sourceLineNo">439</span>        // The path should start with dir/&lt;prefix&gt; and end with our suffix<a name="line.439"></a>
+<span class="sourceLineNo">440</span>        final String fileNameString = fileName.toString();<a name="line.440"></a>
+<span class="sourceLineNo">441</span>        if (!fileNameString.startsWith(prefixPathStr)) {<a name="line.441"></a>
+<span class="sourceLineNo">442</span>          return false;<a name="line.442"></a>
+<span class="sourceLineNo">443</span>        }<a name="line.443"></a>
+<span class="sourceLineNo">444</span>        if (walFileSuffix.isEmpty()) {<a name="line.444"></a>
+<span class="sourceLineNo">445</span>          // in the case of the null suffix, we need to ensure the filename ends with a timestamp.<a name="line.445"></a>
+<span class="sourceLineNo">446</span>          return org.apache.commons.lang3.StringUtils<a name="line.446"></a>
+<span class="sourceLineNo">447</span>              .isNumeric(fileNameString.substring(prefixPathStr.length()));<a name="line.447"></a>
+<span class="sourceLineNo">448</span>        } else if (!fileNameString.endsWith(walFileSuffix)) {<a name="line.448"></a>
+<span class="sourceLineNo">449</span>          return false;<a name="line.449"></a>
+<span class="sourceLineNo">450</span>        }<a name="line.450"></a>
+<span class="sourceLineNo">451</span>        return true;<a name="line.451"></a>
+<span class="sourceLineNo">452</span>      }<a name="line.452"></a>
+<span class="sourceLineNo">453</span>    };<a name="line.453"></a>
+<span class="sourceLineNo">454</span><a name="line.454"></a>
+<span class="sourceLineNo">455</span>    if (failIfWALExists) {<a name="line.455"></a>
+<span class="sourceLineNo">456</span>      final FileStatus[] walFiles = CommonFSUtils.listStatus(fs, walDir, ourFiles);<a name="line.456"></a>
+<span class="sourceLineNo">457</span>      if (null != walFiles &amp;&amp; 0 != walFiles.length) {<a name="line.457"></a>
+<span class="sourceLineNo">458</span>        throw new IOException("Target WAL already exists within directory " + walDir);<a name="line.458"></a>
+<span class="sourceLineNo">459</span>      }<a name="line.459"></a>
+<span class="sourceLineNo">460</span>    }<a name="line.460"></a>
+<span class="sourceLineNo">461</span><a name="line.461"></a>
+<span class="sourceLineNo">462</span>    // Register listeners. TODO: Should this exist anymore? We have CPs?<a name="line.462"></a>
+<span class="sourceLineNo">463</span>    if (listeners != null) {<a name="line.463"></a>
+<span class="sourceLineNo">464</span>      for (WALActionsListener i : listeners) {<a name="line.464"></a>
+<span class="sourceLineNo">465</span>        registerWALActionsListener(i);<a name="line.465"></a>
+<span class="sourceLineNo">466</span>      }<a name="line.466"></a>
+<span class="sourceLineNo">467</span>    }<a name="line.467"></a>
+<span class="sourceLineNo">468</span>    this.coprocessorHost = new WALCoprocessorHost(this, conf);<a name="line.468"></a>
+<span class="sourceLineNo">469</span><a name="line.469"></a>
+<span class="sourceLineNo">470</span>    // Schedule a WAL roll when the WAL is 50% of the HDFS block size. Scheduling at 50% of block<a name="line.470"></a>
+<span class="sourceLineNo">471</span>    // size should make it so WAL rolls before we get to the end-of-block (Block transitions cost<a name="line.471"></a>
+<span class="sourceLineNo">472</span>    // some latency). In hbase-1 we did this differently. We scheduled a roll when we hit 95% of<a name="line.472"></a>
+<span class="sourceLineNo">473</span>    // the block size but experience from the field has it that this was not enough time for the<a name="line.473"></a>
+<span class="sourceLineNo">474</span>    // roll to happen before end-of-block. So the new accounting makes WALs of about the same<a name="line.474"></a>
+<span class="sourceLineNo">475</span>    // size as those made in hbase-1 (to prevent surprise), we now have default block size as<a name="line.475"></a>
+<span class="sourceLineNo">476</span>    // 2 times the DFS default: i.e. 2 * DFS default block size rolling at 50% full will generally<a name="line.476"></a>
+<span class="sourceLineNo">477</span>    // make similar size logs to 1 * DFS default block size rolling at 95% full. See HBASE-19148.<a name="line.477"></a>
+<span class="sourceLineNo">478</span>    this.blocksize = WALUtil.getWALBlockSize(this.conf, this.fs, this.walDir);<a name="line.478"></a>
+<span class="sourceLineNo">479</span>    float multiplier = conf.getFloat(WAL_ROLL_MULTIPLIER, 0.5f);<a name="line.479"></a>
+<span class="sourceLineNo">480</span>    this.logrollsize = (long) (this.blocksize * multiplier);<a name="line.480"></a>
+<span class="sourceLineNo">481</span>    this.maxLogs = conf.getInt(MAX_LOGS, Math.max(32, calculateMaxLogFiles(conf, logrollsize)));<a name="line.481"></a>
+<span class="sourceLineNo">482</span><a name="line.482"></a>
+<span class="sourceLineNo">483</span>    LOG.info("WAL configuration: blocksize=" + StringUtils.byteDesc(blocksize) + ", rollsize=" +<a name="line.483"></a>
+<span class="sourceLineNo">484</span>      StringUtils.byteDesc(this.logrollsize) + ", prefix=" + this.walFilePrefix + ", suffix=" +<a name="line.484"></a>
+<span class="sourceLineNo">485</span>      walFileSuffix + ", logDir=" + this.walDir + ", archiveDir=" + this.walArchiveDir +<a name="line.485"></a>
+<span class="sourceLineNo">486</span>      ", maxLogs=" + this.maxLogs);<a name="line.486"></a>
+<span class="sourceLineNo">487</span>    this.slowSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(SLOW_SYNC_TIME_MS,<a name="line.487"></a>
+<span class="sourceLineNo">488</span>      DEFAULT_SLOW_SYNC_TIME_MS));<a name="line.488"></a>
+<span class="sourceLineNo">489</span>    this.rollOnSyncNs = TimeUnit.MILLISECONDS.toNanos(conf.getInt(ROLL_ON_SYNC_TIME_MS,<a name="line.489"></a>
+<span class="sourceLineNo">490</span>      DEFAULT_ROLL_ON_SYNC_TIME_MS));<a name="line.490"></a>
+<span class="sourceLineNo">491</span>    this.slowSyncRollThreshold = conf.getInt(SLOW_SYNC_ROLL_THRESHOLD,<a name="line.491"></a>
+<span class="sourceLineNo">492</span>      DEFAULT_SLOW_SYNC_ROLL_THRESHOLD);<a name="line.492"></a>
+<span class="sourceLineNo">493</span>    this.slowSyncCheckInterval = conf.getInt(SLOW_SYNC_ROLL_INTERVAL_MS,<a name="line.493"></a>
+<span class="sourceLineNo">494</span>      DEFAULT_SLOW_SYNC_ROLL_INTERVAL_MS);<a name="line.494"></a>
+<span class="sourceLineNo">495</span>    this.walSyncTimeoutNs = TimeUnit.MILLISECONDS.toNanos(conf.getLong(WAL_SYNC_TIMEOUT_MS,<a name="line.495"></a>
+<span class="sourceLineNo">496</span>      DEFAULT_WAL_SYNC_TIMEOUT_MS));<a name="line.496"></a>
+<span class="sourceLineNo">497</span>    this.cachedSyncFutures = new ThreadLocal&lt;SyncFuture&gt;() {<a name="line.497"></a>
+<span class="sourceLineNo">498</span>      @Override<a name="line.498"></a>
+<span class="sourceLineNo">499</span>      protected SyncFuture initialValue() {<a name="line.499"></a>
+<span class="sourceLineNo">500</span>        return new SyncFuture();<a name="line.500"></a>
+<span class="sourceLineNo">501</span>      }<a name="line.501"></a>
+<span class="sourceLineNo">502</span>    };<a name="line.502"></a>
+<span class="sourceLineNo">503</span>    this.implClassName = getClass().getSimpleName();<a name="line.503"></a>
+<span class="sourceLineNo">504</span>    this.walTooOldNs = TimeUnit.SECONDS.toNanos(conf.getInt(<a name="line.504"></a>
+<span class="sourceLineNo">505</span>            SURVIVED_TOO_LONG_SEC_KEY, SURVIVED_TOO_LONG_SEC_DEFAULT));<a name="line.505"></a>
+<span class="sourceLineNo">506</span>    this.useHsync = conf.getBoolean(HRegion.WAL_HSYNC_CONF_KEY, HRegion.DEFAULT_WAL_HSYNC);<a name="line.506"></a>
+<span class="sourceLineNo">507</span>    archiveRetries = this.conf.getInt("hbase.regionserver.walroll.archive.retries", 0);<a name="line.507"></a>
+<span class="sourceLineNo">508</span><a name="line.508"></a>
+<span class="sourceLineNo">509</span>  }<a name="line.509"></a>
+<span class="sourceLineNo">510</span><a name="line.510"></a>
+<span class="sourceLineNo">511</span>  /**<a name="line.511"></a>
+<span class="sourceLineNo">512</span>   * Used to initialize the WAL. Usually just call rollWriter to create the first log writer.<a name="line.512"></a>
+<span class="sourceLineNo">513</span>   */<a name="line.513"></a>
+<span class="sourceLineNo">514</span>  public void init() throws IOException {<a name="line.514"></a>
+<span class="sourceLineNo">515</span>    rollWriter();<a name="line.515"></a>
+<span class="sourceLineNo">516</span>  }<a name="line.516"></a>
+<span class="sourceLineNo">517</span><a name="line.517"></a>
+<span class="sourceLineNo">518</span>  @Override<a name="line.518"></a>
+<span class="sourceLineNo">519</span>  public void registerWALActionsListener(WALActionsListener listener) {<a name="line.519"></a>
+<span class="sourceLineNo">520</span>    this.listeners.add(listener);<a name="line.520"></a>
+<span class="sourceLineNo">521</span>  }<a name="line.521"></a>
+<span class="sourceLineNo">522</span><a name="line.522"></a>
+<span class="sourceLineNo">523</span>  @Override<a name="line.523"></a>
+<span class="sourceLineNo">524</span>  public boolean unregisterWALActionsListener(WALActionsListener listener) {<a name="line.524"></a>
+<span class="sourceLineNo">525</span>    return this.listeners.remove(listener);<a name="line.525"></a>
+<span class="sourceLineNo">526</span>  }<a name="line.526"></a>
+<span class="sourceLineNo">527</span><a name="line.527"></a>
+<span class="sourceLineNo">528</span>  @Override<a name="line.528"></a>
+<span class="sourceLineNo">529</span>  public WALCoprocessorHost getCoprocessorHost() {<a name="line.529"></a>
+<span class="sourceLineNo">530</span>    return coprocessorHost;<a name="line.530"></a>
+<span class="sourceLineNo">531</span>  }<a name="line.531"></a>
+<span class="sourceLineNo">532</span><a name="line.532"></a>
+<span class="sourceLineNo">533</span>  @Override<a name="line.533"></a>
+<span class="sourceLineNo">534</span>  public Long startCacheFlush(byte[] encodedRegionName, Set&lt;byte[]&gt; families) {<a name="line.534"></a>
+<span class="sourceLineNo">535</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, families);<a name="line.535"></a>
+<span class="sourceLineNo">536</span>  }<a name="line.536"></a>
+<span class="sourceLineNo">537</span><a name="line.537"></a>
+<span class="sourceLineNo">538</span>  @Override<a name="line.538"></a>
+<span class="sourceLineNo">539</span>  public Long startCacheFlush(byte[] encodedRegionName, Map&lt;byte[], Long&gt; familyToSeq) {<a name="line.539"></a>
+<span class="sourceLineNo">540</span>    return this.sequenceIdAccounting.startCacheFlush(encodedRegionName, familyToSeq);<a name="line.540"></a>
+<span class="sourceLineNo">541</span>  }<a name="line.541"></a>
+<span class="sourceLineNo">542</span><a name="line.542"></a>
+<span class="sourceLineNo">543</span>  @Override<a name="line.543"></a>
+<span class="sourceLineNo">544</span>  public void completeCacheFlush(byte[] encodedRegionName, long maxFlushedSeqId) {<a name="line.544"></a>
+<span class="sourceLineNo">545</span>    this.sequenceIdAccounting.completeCacheFlush(encodedRegionName, maxFlushedSeqId);<a name="line.545"></a>
+<span class="sourceLineNo">546</span>  }<a name="line.546"></a>
+<span class="sourceLineNo">547</span><a name="line.547"></a>
+<span class="sourceLineNo">548</span>  @Override<a name="line.548"></a>
+<span class="sourceLineNo">549</span>  public void abortCacheFlush(byte[] encodedRegionName) {<a name="line.549"></a>
+<span class="sourceLineNo">550</span>    this.sequenceIdAccounting.abortCacheFlush(encodedRegionName);<a name="line.550"></a>
+<span class="sourceLineNo">551</span>  }<a name="line.551"></a>
+<span class="sourceLineNo">552</span><a name="line.552"></a>
+<span class="sourceLineNo">553</span>  @Override<a name="line.553"></a>
+<span class="sourceLineNo">554</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName) {<a name="line.554"></a>
+<span class="sourceLineNo">555</span>    // Used by tests. Deprecated as too subtle for general usage.<a name="line.555"></a>
+<span class="sourceLineNo">556</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName);<a name="line.556"></a>
+<span class="sourceLineNo">557</span>  }<a name="line.557"></a>
+<span class="sourceLineNo">558</span><a name="line.558"></a>
+<span class="sourceLineNo">559</span>  @Override<a name="line.559"></a>
+<span class="sourceLineNo">560</span>  public long getEarliestMemStoreSeqNum(byte[] encodedRegionName, byte[] familyName) {<a name="line.560"></a>
+<span class="sourceLineNo">561</span>    // This method is used by tests and for figuring if we should flush or not because our<a name="line.561"></a>
+<span class="sourceLineNo">562</span>    // sequenceids are too old. It is also used reporting the master our oldest sequenceid for use<a name="line.562"></a>
+<span class="sourceLineNo">563</span>    // figuring what edits can be skipped during log recovery. getEarliestMemStoreSequenceId<a name="line.563"></a>
+<span class="sourceLineNo">564</span>    // from this.sequenceIdAccounting is looking first in flushingOldestStoreSequenceIds, the<a name="line.564"></a>
+<span class="sourceLineNo">565</span>    // currently flushing sequence ids, and if anything found there, it is returning these. This is<a name="line.565"></a>
+<span class="sourceLineNo">566</span>    // the right thing to do for the reporting oldest sequenceids to master; we won't skip edits if<a name="line.566"></a>
+<span class="sourceLineNo">567</span>    // we crash during the flush. For figuring what to flush, we might get requeued if our sequence<a name="line.567"></a>
+<span class="sourceLineNo">568</span>    // id is old even though we are currently flushing. This may mean we do too much flushing.<a name="line.568"></a>
+<span class="sourceLineNo">569</span>    return this.sequenceIdAccounting.getLowestSequenceId(encodedRegionName, familyName);<a name="line.569"></a>
+<span class="sourceLineNo">570</span>  }<a name="line.570"></a>
+<span class="sourceLineNo">571</span><a name="line.571"></a>
+<span class="sourceLineNo">572</span>  @Override<a name="line.572"></a>
+<span class="sourceLineNo">573</span>  public Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriter() throws FailedLogCloseException, IOException {<a name="line.573"></a>
+<span class="sourceLineNo">574</span>    return rollWriter(false);<a name="line.574"></a>
+<span class="sourceLineNo">575</span>  }<a name="line.575"></a>
+<span class="sourceLineNo">576</span><a name="line.576"></a>
+<span class="sourceLineNo">577</span>  @Override<a name="line.577"></a>
+<span class="sourceLineNo">578</span>  public final void sync() throws IOException {<a name="line.578"></a>
+<span class="sourceLineNo">579</span>    sync(useHsync);<a name="line.579"></a>
+<span class="sourceLineNo">580</span>  }<a name="line.580"></a>
+<span class="sourceLineNo">581</span><a name="line.581"></a>
+<span class="sourceLineNo">582</span>  @Override<a name="line.582"></a>
+<span class="sourceLineNo">583</span>  public final void sync(long txid) throws IOException {<a name="line.583"></a>
+<span class="sourceLineNo">584</span>    sync(txid, useHsync);<a name="line.584"></a>
+<span class="sourceLineNo">585</span>  }<a name="line.585"></a>
+<span class="sourceLineNo">586</span><a name="line.586"></a>
+<span class="sourceLineNo">587</span>  @Override<a name="line.587"></a>
+<span class="sourceLineNo">588</span>  public final void sync(boolean forceSync) throws IOException {<a name="line.588"></a>
+<span class="sourceLineNo">589</span>    TraceUtil.trace(() -&gt; {<a name="line.589"></a>
+<span class="sourceLineNo">590</span>      doSync(forceSync);<a name="line.590"></a>
+<span class="sourceLineNo">591</span>      return null;<a name="line.591"></a>
+<span class="sourceLineNo">592</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.592"></a>
+<span class="sourceLineNo">593</span>  }<a name="line.593"></a>
+<span class="sourceLineNo">594</span><a name="line.594"></a>
+<span class="sourceLineNo">595</span>  @Override<a name="line.595"></a>
+<span class="sourceLineNo">596</span>  public final void sync(long txid, boolean forceSync) throws IOException {<a name="line.596"></a>
+<span class="sourceLineNo">597</span>    TraceUtil.trace(() -&gt; {<a name="line.597"></a>
+<span class="sourceLineNo">598</span>      doSync(txid, forceSync);<a name="line.598"></a>
+<span class="sourceLineNo">599</span>      return null;<a name="line.599"></a>
+<span class="sourceLineNo">600</span>    }, () -&gt; createSpan("WAL.sync"));<a name="line.600"></a>
+<span class="sourceLineNo">601</span>  }<a name="line.601"></a>
+<span class="sourceLineNo">602</span><a name="line.602"></a>
+<span class="sourceLineNo">603</span>  protected abstract void doSync(boolean forceSync) throws IOException;<a name="line.603"></a>
+<span class="sourceLineNo">604</span><a name="line.604"></a>
+<span class="sourceLineNo">605</span>  protected abstract void doSync(long txid, boolean forceSync) throws IOException;<a name="line.605"></a>
+<span class="sourceLineNo">606</span>  /**<a name="line.606"></a>
+<span class="sourceLineNo">607</span>   * This is a convenience method that computes a new filename with a given file-number.<a name="line.607"></a>
+<span class="sourceLineNo">608</span>   * @param filenum to use<a name="line.608"></a>
+<span class="sourceLineNo">609</span>   * @return Path<a name="line.609"></a>
+<span class="sourceLineNo">610</span>   */<a name="line.610"></a>
+<span class="sourceLineNo">611</span>  protected Path computeFilename(final long filenum) {<a name="line.611"></a>
+<span class="sourceLineNo">612</span>    if (filenum &lt; 0) {<a name="line.612"></a>
+<span class="sourceLineNo">613</span>      throw new RuntimeException("WAL file number can't be &lt; 0");<a name="line.613"></a>
+<span class="sourceLineNo">614</span>    }<a name="line.614"></a>
+<span class="sourceLineNo">615</span>    String child = walFilePrefix + WAL_FILE_NAME_DELIMITER + filenum + walFileSuffix;<a name="line.615"></a>
+<span class="sourceLineNo">616</span>    return new Path(walDir, child);<a name="line.616"></a>
+<span class="sourceLineNo">617</span>  }<a name="line.617"></a>
+<span class="sourceLineNo">618</span><a name="line.618"></a>
+<span class="sourceLineNo">619</span>  /**<a name="line.619"></a>
+<span class="sourceLineNo">620</span>   * This is a convenience method that computes a new filename with a given using the current WAL<a name="line.620"></a>
+<span class="sourceLineNo">621</span>   * file-number<a name="line.621"></a>
+<span class="sourceLineNo">622</span>   * @return Path<a name="line.622"></a>
+<span class="sourceLineNo">623</span>   */<a name="line.623"></a>
+<span class="sourceLineNo">624</span>  public Path getCurrentFileName() {<a name="line.624"></a>
+<span class="sourceLineNo">625</span>    return computeFilename(this.filenum.get());<a name="line.625"></a>
+<span class="sourceLineNo">626</span>  }<a name="line.626"></a>
+<span class="sourceLineNo">627</span><a name="line.627"></a>
+<span class="sourceLineNo">628</span>  /**<a name="line.628"></a>
+<span class="sourceLineNo">629</span>   * retrieve the next path to use for writing. Increments the internal filenum.<a name="line.629"></a>
+<span class="sourceLineNo">630</span>   */<a name="line.630"></a>
+<span class="sourceLineNo">631</span>  private Path getNewPath() throws IOException {<a name="line.631"></a>
+<span class="sourceLineNo">632</span>    this.filenum.set(System.currentTimeMillis());<a name="line.632"></a>
+<span class="sourceLineNo">633</span>    Path newPath = getCurrentFileName();<a name="line.633"></a>
+<span class="sourceLineNo">634</span>    while (fs.exists(newPath)) {<a name="line.634"></a>
+<span class="sourceLineNo">635</span>      this.filenum.incrementAndGet();<a name="line.635"></a>
+<span class="sourceLineNo">636</span>      newPath = getCurrentFileName();<a name="line.636"></a>
+<span class="sourceLineNo">637</span>    }<a name="line.637"></a>
+<span class="sourceLineNo">638</span>    return newPath;<a name="line.638"></a>
+<span class="sourceLineNo">639</span>  }<a name="line.639"></a>
+<span class="sourceLineNo">640</span><a name="line.640"></a>
+<span class="sourceLineNo">641</span>  Path getOldPath() {<a name="line.641"></a>
+<span class="sourceLineNo">642</span>    long currentFilenum = this.filenum.get();<a name="line.642"></a>
+<span class="sourceLineNo">643</span>    Path oldPath = null;<a name="line.643"></a>
+<span class="sourceLineNo">644</span>    if (currentFilenum &gt; 0) {<a name="line.644"></a>
+<span class="sourceLineNo">645</span>      // ComputeFilename will take care of meta wal filename<a name="line.645"></a>
+<span class="sourceLineNo">646</span>      oldPath = computeFilename(currentFilenum);<a name="line.646"></a>
+<span class="sourceLineNo">647</span>    } // I presume if currentFilenum is &lt;= 0, this is first file and null for oldPath if fine?<a name="line.647"></a>
+<span class="sourceLineNo">648</span>    return oldPath;<a name="line.648"></a>
+<span class="sourceLineNo">649</span>  }<a name="line.649"></a>
+<span class="sourceLineNo">650</span><a name="line.650"></a>
+<span class="sourceLineNo">651</span>  /**<a name="line.651"></a>
+<span class="sourceLineNo">652</span>   * Tell listeners about pre log roll.<a name="line.652"></a>
+<span class="sourceLineNo">653</span>   */<a name="line.653"></a>
+<span class="sourceLineNo">654</span>  private void tellListenersAboutPreLogRoll(final Path oldPath, final Path newPath)<a name="line.654"></a>
+<span class="sourceLineNo">655</span>      throws IOException {<a name="line.655"></a>
+<span class="sourceLineNo">656</span>    coprocessorHost.preWALRoll(oldPath, newPath);<a name="line.656"></a>
+<span class="sourceLineNo">657</span><a name="line.657"></a>
+<span class="sourceLineNo">658</span>    if (!this.listeners.isEmpty()) {<a name="line.658"></a>
+<span class="sourceLineNo">659</span>      for (WALActionsListener i : this.listeners) {<a name="line.659"></a>
+<span class="sourceLineNo">660</span>        i.preLogRoll(oldPath, newPath);<a name="line.660"></a>
+<span class="sourceLineNo">661</span>      }<a name="line.661"></a>
+<span class="sourceLineNo">662</span>    }<a name="line.662"></a>
+<span class="sourceLineNo">663</span>  }<a name="line.663"></a>
+<span class="sourceLineNo">664</span><a name="line.664"></a>
+<span class="sourceLineNo">665</span>  /**<a name="line.665"></a>
+<span class="sourceLineNo">666</span>   * Tell listeners about post log roll.<a name="line.666"></a>
+<span class="sourceLineNo">667</span>   */<a name="line.667"></a>
+<span class="sourceLineNo">668</span>  private void tellListenersAboutPostLogRoll(final Path oldPath, final Path newPath)<a name="line.668"></a>
+<span class="sourceLineNo">669</span>      throws IOException {<a name="line.669"></a>
+<span class="sourceLineNo">670</span>    if (!this.listeners.isEmpty()) {<a name="line.670"></a>
+<span class="sourceLineNo">671</span>      for (WALActionsListener i : this.listeners) {<a name="line.671"></a>
+<span class="sourceLineNo">672</span>        i.postLogRoll(oldPath, newPath);<a name="line.672"></a>
+<span class="sourceLineNo">673</span>      }<a name="line.673"></a>
+<span class="sourceLineNo">674</span>    }<a name="line.674"></a>
+<span class="sourceLineNo">675</span><a name="line.675"></a>
+<span class="sourceLineNo">676</span>    coprocessorHost.postWALRoll(oldPath, newPath);<a name="line.676"></a>
+<span class="sourceLineNo">677</span>  }<a name="line.677"></a>
+<span class="sourceLineNo">678</span><a name="line.678"></a>
+<span class="sourceLineNo">679</span>  // public only until class moves to o.a.h.h.wal<a name="line.679"></a>
+<span class="sourceLineNo">680</span>  /** @return the number of rolled log files */<a name="line.680"></a>
+<span class="sourceLineNo">681</span>  public int getNumRolledLogFiles() {<a name="line.681"></a>
+<span class="sourceLineNo">682</span>    return walFile2Props.size();<a name="line.682"></a>
+<span class="sourceLineNo">683</span>  }<a name="line.683"></a>
+<span class="sourceLineNo">684</span><a name="line.684"></a>
+<span class="sourceLineNo">685</span>  // public only until class moves to o.a.h.h.wal<a name="line.685"></a>
+<span class="sourceLineNo">686</span>  /** @return the number of log files in use */<a name="line.686"></a>
+<span class="sourceLineNo">687</span>  public int getNumLogFiles() {<a name="line.687"></a>
+<span class="sourceLineNo">688</span>    // +1 for current use log<a name="line.688"></a>
+<span class="sourceLineNo">689</span>    return getNumRolledLogFiles() + 1;<a name="line.689"></a>
+<span class="sourceLineNo">690</span>  }<a name="line.690"></a>
+<span class="sourceLineNo">691</span><a name="line.691"></a>
+<span class="sourceLineNo">692</span>  /**<a name="line.692"></a>
+<span class="sourceLineNo">693</span>   * If the number of un-archived WAL files ('live' WALs) is greater than maximum allowed,<a name="line.693"></a>
+<span class="sourceLineNo">694</span>   * check the first (oldest) WAL, and return those regions which should be flushed so that<a name="line.694"></a>
+<span class="sourceLineNo">695</span>   * it can be let-go/'archived'.<a name="line.695"></a>
+<span class="sourceLineNo">696</span>   * @return stores of regions (encodedRegionNames) to flush in order to archive oldest WAL file.<a name="line.696"></a>
+<span class="sourceLineNo">697</span>   */<a name="line.697"></a>
+<span class="sourceLineNo">698</span>  Map&lt;byte[], List&lt;byte[]&gt;&gt; findRegionsToForceFlush() throws IOException {<a name="line.698"></a>
+<span class="sourceLineNo">699</span>    Map&lt;byte[], List&lt;byte[]&gt;&gt; regions = null;<a name="line.699"></a>
+<span class="sourceLineNo">700</span>    int logCount = getNumRolledLogFiles();<a name="line.700"></a>
+<span class="sourceLineNo">701</span>    if (logCount &gt; this.maxLogs &amp;&amp; logCount &gt; 0) {<a name="line.701"></a>
+<span class="sourceLineNo">702</span>      Map.Entry&lt;Path, WalProps&gt; firstWALEntry = this.walFile2Props.firstEntry();<a name="line.702"></a>
+<span class="sourceLineNo">703</span>      regions =<a name="line.703"></a>
+<span class="sourceLineNo">704</span>        this.sequenceIdAccounting.findLower(firstWALEntry.getValue().encodedName2HighestSequenceId);<a name="line.704"></a>
+<span class="sourceLineNo">705</span>    }<a name="line.705"></a>
+<span class="sourceLineNo">706</span>    if (regions != null) {<a name="line.706"></a>
+<span class="sourceLineNo">707</span>      List&lt;String&gt; listForPrint = new ArrayList&lt;&gt;();<a name="line.707"></a>
+<span class="sourceLineNo">708</span>      for (Map.Entry&lt;byte[], List&lt;byte[]&gt;&gt; r : regions.entrySet()) {<a name="line.708"></a>
+<span class="sourceLineNo">709</span>        StringBuilder families = new StringBuilder();<a name="line.709"></a>
+<span class="sourceLineNo">710</span>        for (int i = 0; i &lt; r.getValue().size(); i++) {<a name="line.710"></a>
+<span class="sourceLineNo">711</span>          if (i &gt; 0) {<a name="line.711"></a>
+<span class="sourceLineNo">712</span>            families.append(",");<a name="line.712"></a>
+<span class="sourceLineNo">713</span>          }<a name="line.713"></a>
+<span class="sourceLineNo">714</span>          families.append(Bytes.toString(r.getValue().get(i)));<a name="line.714"></a>
+<span class="sourceLineNo">715</span>        }<a name="line.715"></a>
+<span class="sourceLineNo">716</span>        listForPrint.add(Bytes.toStringBinary(r.getKey()) + "[" + families.toString() + "]");<a name="line.716"></a>
+<span class="sourceLineNo">717</span>      }<a name="line.717"></a>
+<span class="sourceLineNo">718</span>      LOG.info("Too many WALs; count=" + logCount + ", max=" + this.maxLogs +<a name="line.718"></a>
+<span class="sourceLineNo">719</span>        "; forcing (partial) flush of " + regions.size() + " region(s): " +<a name="line.719"></a>
+<span class="sourceLineNo">720</span>        StringUtils.join(",", listForPrint));<a name="line.720"></a>
+<span class="sourceLineNo">721</span>    }<a name="line.721"></a>
+<span class="sourceLineNo">722</span>    return regions;<a name="line.722"></a>
+<span class="sourceLineNo">723</span>  }<a name="line.723"></a>
+<span class="sourceLineNo">724</span><a name="line.724"></a>
+<span class="sourceLineNo">725</span>  /**<a name="line.725"></a>
+<span class="sourceLineNo">726</span>   * Archive old logs. A WAL is eligible for archiving if all its WALEdits have been flushed.<a name="line.726"></a>
+<span class="sourceLineNo">727</span>   */<a name="line.727"></a>
+<span class="sourceLineNo">728</span>  private void cleanOldLogs() throws IOException {<a name="line.728"></a>
+<span class="sourceLineNo">729</span>    List&lt;Pair&lt;Path, Long&gt;&gt; logsToArchive = null;<a name="line.729"></a>
+<span class="sourceLineNo">730</span>    long now = System.nanoTime();<a name="line.730"></a>
+<span class="sourceLineNo">731</span>    boolean mayLogTooOld = nextLogTooOldNs &lt;= now;<a name="line.731"></a>
+<span class="sourceLineNo">732</span>    ArrayList&lt;byte[]&gt; regionsBlockingWal = null;<a name="line.732"></a>
+<span class="sourceLineNo">733</span>    // For each log file, look at its Map of regions to highest sequence id; if all sequence ids<a name="line.733"></a>
+<span class="sourceLineNo">734</span>    // are older than what is currently in memory, the WAL can be GC'd.<a name="line.734"></a>
+<span class="sourceLineNo">735</span>    for (Map.Entry&lt;Path, WalProps&gt; e : this.walFile2Props.entrySet()) {<a name="line.735"></a>
+<span class="sourceLineNo">736</span>      Path log = e.getKey();<a name="line.736"></a>
+<span class="sourceLineNo">737</span>      ArrayList&lt;byte[]&gt; regionsBlockingThisWal = null;<a name="line.737"></a>
+<span class="sourceLineNo">738</span>      long ageNs = now - e.getValue().rollTimeNs;<a name="line.738"></a>
+<span class="sourceLineNo">739</span>      if (ageNs &gt; walTooOldNs) {<a name="line.739"></a>
+<span class="sourceLineNo">740</span>        if (mayLogTooOld &amp;&amp; regionsBlockingWal == null) {<a name="line.740"></a>
+<span class="sourceLineNo">741</span>          regionsBlockingWal = new ArrayList&lt;&gt;();<a name="line.741"></a>
+<span class="sourceLineNo">742</span>        }<a name="line.742"></a>
+<span class="sourceLineNo">743</span>        regionsBlockingThisWal = regionsBlockingWal;<a name="line.743"></a>
+<span class="sourceLineNo">744</span>      }<a name="line.744"></a>
+<span class="sourceLineNo">745</span>      Map&lt;byte[], Long&gt; sequenceNums = e.getValue().encodedName2HighestSequenceId;<a name="line.745"></a>
+<span class="sourceLineNo">746</span>      if (this.sequenceIdAccounting.areAllLower(sequenceNums, regionsBlockingThisWal)) {<a name="line.746"></a>
+<span class="sourceLineNo">747</span>        if (logsToArchive == null) {<a name="line.747"></a>
+<span class="sourceLineNo">748</span>          logsToArchive = new ArrayList&lt;&gt;();<a name="line.748"></a>
 <span class="sourceLineNo">749</span>        }<a name="line.749"></a>
-<span class="sourceLineNo">750</span>      } else if (regionsBlockingThisWal != null) {<a name="line.750"></a>
-<span class="sourceLineNo">751</span>        StringBuilder sb = new StringBuilder(log.toString()).append(" has not been archived for ")<a name="line.751"></a>
-<span class="sourceLineNo">752</span>          .append(TimeUnit.NANOSECONDS.toSeconds(ageNs)).append(" seconds; blocked by: ");<a name="line.752"></a>
-<span class="sourceLineNo">753</span>        boolean isFirst = true;<a name="line.753"></a>
-<span class="sourceLineNo">754</span>        for (byte[] region : regionsBlockingThisWal) {<a name="line.754"></a>
-<span class="sourceLineNo">755</span>          if (!isFirst) {<a name="line.755"></a>
-<span class="sourceLineNo">756</span>            sb.append("; ");<a name="line.756"></a>
-<span class="sourceLineNo">757</span>          }<a name="line.757"></a>
-<span class="sourceLineNo">758</span>          isFirst = false;<a name="line.758"></a>
-<span class="sourceLineNo">759</span>          sb.append(Bytes.toString(region));<a name="line.759"></a>
-<span class="sourceLineNo">760</span>        }<a name="line.760"></a>
-<span class="sourceLineNo">761</span>        LOG.warn(sb.toString());<a name="line.761"></a>
-<span class="sourceLineNo">762</span>        nextLogTooOldNs = now + SURVIVED_TOO_LONG_LOG_INTERVAL_NS;<a name="line.762"></a>
-<span class="sourceLineNo">763</span>        regionsBlockingThisWal.clear();<a name="line.763"></a>
-<span class="sourceLineNo">764</span>      }<a name="line.764"></a>
-<span class="sourceLineNo">765</span>    }<a name="line.765"></a>
-<span class="sourceLineNo">766</span><a name="line.766"></a>
-<span class="sourceLineNo">767</span>    if (logsToArchive != null) {<a name="line.767"></a>
-<span class="sourceLineNo">768</span>      final List&lt;Pair&lt;Path, Long&gt;&gt; localLogsToArchive = logsToArchive;<a name="line.768"></a>
-<span class="sourceLineNo">769</span>      // make it async<a name="line.769"></a>
-<span class="sourceLineNo">770</span>      for (Pair&lt;Path, Long&gt; log : localLogsToArchive) {<a name="line.770"></a>
-<span class="sourceLineNo">771</span>        logArchiveExecutor.execute(() -&gt; {<a name="line.771"></a>
-<span class="sourceLineNo">772</span>          archive(log);<a name="line.772"></a>
-<span class="sourceLineNo">773</span>        });<a name="line.773"></a>
-<span class="sourceLineNo">774</span>        this.walFile2Props.remove(log.getFirst());<a name="line.774"></a>
-<span class="sourceLineNo">775</span>      }<a name="line.775"></a>
-<span class="sourceLineNo">776</span>    }<a name="line.776"></a>
-<span class="sourceLineNo">777</span>  }<a name="line.777"></a>
-<span class="sourceLineNo">778</span><a name="line.778"></a>
-<span class="sourceLineNo">779</span>  protected void archive(final Pair&lt;Path, Long&gt; log) {<a name="line.779"></a>
-<span class="sourceLineNo">780</span>    int retry = 1;<a name="line.780"></a>
-<span class="sourceLineNo">781</span>    while (true) {<a name="line.781"></a>
-<span class="sourceLineNo">782</span>      try {<a name="line.782"></a>
-<span class="sourceLineNo">783</span>        archiveLogFile(log.getFirst());<a name="line.783"></a>
-<span class="sourceLineNo">784</span>        totalLogSize.addAndGet(-log.getSecond());<a name="line.784"></a>
-<span class="sourceLineNo">785</span>        // successful<a name="line.785"></a>
-<span class="sourceLineNo">786</span>        break;<a name="line.786"></a>
-<span class="sourceLineNo">787</span>      } catch (Throwable e) {<a name="line.787"></a>
-<span class="sourceLineNo">788</span>        if (retry &gt; archiveRetries) {<a name="line.788"></a>
-<span class="sourceLineNo">789</span>          LOG.error("Failed log archiving for the log {},", log.getFirst(), e);<a name="line.789"></a>
-<span class="sourceLineNo">790</span>          if (this.abortable != null) {<a name="line.790"></a>
-<span class="sourceLineNo">791</span>            this.abortable.abort("Failed log archiving", e);<a name="line.791"></a>
-<span class="sourceLineNo">792</span>            break;<a name="line.792"></a>
-<span class="sourceLineNo">793</span>          }<a name="line.793"></a>
-<span class="sourceLineNo">794</span>        } else {<a name="line.794"></a>
-<span class="sourceLineNo">795</span>          LOG.error("Log archiving failed for the log {} - attempt {}", log.getFirst(), retry,<a name="line.795"></a>
-<span class="sourceLineNo">796</span>            e);<a name="line.796"></a>
-<span class="sourceLineNo">797</span>        }<a name="line.797"></a>
-<span class="sourceLineNo">798</span>        retry++;<a name="line.798"></a>
-<span class="sourceLineNo">799</span>      }<a name="line.799"></a>
-<span class="sourceLineNo">800</span>    }<a name="line.800"></a>
-<span class="sourceLineNo">801</span>  }<a name="line.801"></a>
-<span class="sourceLineNo">802</span><a name="line.802"></a>
-<span class="sourceLineNo">803</span>  /*<a name="line.803"></a>
-<span class="sourceLineNo">804</span>   * only public so WALSplitter can use.<a name="line.804"></a>
-<span class="sourceLineNo">805</span>   * @return archived location of a WAL file with the given path p<a name="line.805"></a>
-<span class="sourceLineNo">806</span>   */<a name="line.806"></a>
-<span class="sourceLineNo">807</span>  public static Path getWALArchivePath(Path archiveDir, Path p) {<a name="line.807"></a>
-<span class="sourceLineNo">808</span>    return new Path(archiveDir, p.getName());<a name="line.808"></a>
-<span class="sourceLineNo">809</span>  }<a name="line.809"></a>
-<span class="sourceLineNo">810</span><a name="line.810"></a>
-<span class="sourceLineNo">811</span>  protected void archiveLogFile(final Path p) throws IOException {<a name="line.811"></a>
-<span class="sourceLineNo">812</span>    Path newPath = getWALArchivePath(this.walArchiveDir, p);<a name="line.812"></a>
-<span class="sourceLineNo">813</span>    // Tell our listeners that a log is going to be archived.<a name="line.813"></a>
-<span class="sourceLineNo">814</span>    if (!this.listeners.isEmpty()) {<a name="line.814"></a>
-<span class="sourceLineNo">815</span>      for (WALActionsListener i : this.listeners) {<a name="line.815"></a>
-<span class="sourceLineNo">816</span>        i.preLogArchive(p, newPath);<a name="line.816"></a>
-<span class="sourceLineNo">817</span>      }<a name="line.817"></a>
-<span class="sourceLineNo">818</span>    }<a name="line.818"></a>
-<span class="sourceLineNo">819</span>    LOG.info("Archiving " + p + " to " + newPath);<a name="line.819"></a>
-<span class="sourceLineNo">820</span>    if (!CommonFSUtils.renameAndSetModifyTime(this.fs, p, newPath)) {<a name="line.820"></a>
-<span class="sourceLineNo">821</span>      throw new IOException("Unable to rename " + p + " to " + newPath);<a name="line.821"></a>
+<span class="sourceLineNo">750</span>        logsToArchive.add(Pair.newPair(log, e.getValue().logSize));<a name="line.750"></a>
+<span class="sourceLineNo">751</span>        if (LOG.isTraceEnabled()) {<a name="line.751"></a>
+<span class="sourceLineNo">752</span>          LOG.trace("WAL file ready for archiving " + log);<a name="line.752"></a>
+<span class="sourceLineNo">753</span>        }<a name="line.753"></a>
+<span class="sourceLineNo">754</span>      } else if (regionsBlockingThisWal != null) {<a name="line.754"></a>
+<span class="sourceLineNo">755</span>        StringBuilder sb = new StringBuilder(log.toString()).append(" has not been archived for ")<a name="line.755"></a>
+<span class="sourceLineNo">756</span>          .append(TimeUnit.NANOSECONDS.toSeconds(ageNs)).append(" seconds; blocked by: ");<a name="line.756"></a>
+<span class="sourceLineNo">757</span>        boolean isFirst = true;<a name="line.757"></a>
+<span class="sourceLineNo">758</span>        for (byte[] region : regionsBlockingThisWal) {<a name="line.758"></a>
+<span class="sourceLineNo">759</span>          if (!isFirst) {<a name="line.759"></a>
+<span class="sourceLineNo">760</span>            sb.append("; ");<a name="line.760"></a>
+<span class="sourceLineNo">761</span>          }<a name="line.761"></a>
+<span class="sourceLineNo">762</span>          isFirst = false;<a name="line.762"></a>
+<span class="sourceLineNo">763</span>          sb.append(Bytes.toString(region));<a name="line.763"></a>
+<span class="sourceLineNo">764</span>        }<a name="line.764"></a>
+<span class="sourceLineNo">765</span>        LOG.warn(sb.toString());<a name="line.765"></a>
+<span class="sourceLineNo">766</span>        nextLogTooOldNs = now + SURVIVED_TOO_LONG_LOG_INTERVAL_NS;<a name="line.766"></a>
+<span class="sourceLineNo">767</span>        regionsBlockingThisWal.clear();<a name="line.767"></a>
+<span class="sourceLineNo">768</span>      }<a name="line.768"></a>
+<span class="sourceLineNo">769</span>    }<a name="line.769"></a>
+<span class="sourceLineNo">770</span><a name="line.770"></a>
+<span class="sourceLineNo">771</span>    if (logsToArchive != null) {<a name="line.771"></a>
+<span class="sourceLineNo">772</span>      final List&lt;Pair&lt;Path, Long&gt;&gt; localLogsToArchive = logsToArchive;<a name="line.772"></a>
+<span class="sourceLineNo">773</span>      // make it async<a name="line.773"></a>
+<span class="sourceLineNo">774</span>      for (Pair&lt;Path, Long&gt; log : localLogsToArchive) {<a name="line.774"></a>
+<span class="sourceLineNo">775</span>        logArchiveExecutor.execute(() -&gt; {<a name="line.775"></a>
+<span class="sourceLineNo">776</span>          archive(log);<a name="line.776"></a>
+<span class="sourceLineNo">777</span>        });<a name="line.777"></a>
+<span class="sourceLineNo">778</span>        this.walFile2Props.remove(log.getFirst());<a name="line.778"></a>
+<span class="sourceLineNo">779</span>      }<a name="line.779"></a>
+<span class="sourceLineNo">780</span>    }<a name="line.780"></a>
+<span class="sourceLineNo">781</span>  }<a name="line.781"></a>
+<span class="sourceLineNo">782</span><a name="line.782"></a>
+<span class="sourceLineNo">783</span>  protected void archive(final Pair&lt;Path, Long&gt; log) {<a name="line.783"></a>
+<span class="sourceLineNo">784</span>    int retry = 1;<a name="line.784"></a>
+<span class="sourceLineNo">785</span>    while (true) {<a name="line.785"></a>
+<span class="sourceLineNo">786</span>      try {<a name="line.786"></a>
+<span class="sourceLineNo">787</span>        archiveLogFile(log.getFirst());<a name="line.787"></a>
+<span class="sourceLineNo">788</span>        totalLogSize.addAndGet(-log.getSecond());<a name="line.788"></a>
+<span class="sourceLineNo">789</span>        // successful<a name="line.789"></a>
+<span class="sourceLineNo">790</span>        break;<a name="line.790"></a>
+<span class="sourceLineNo">791</span>      } catch (Throwable e) {<a name="line.791"></a>
+<span class="sourceLineNo">792</span>        if (retry &gt; archiveRetries) {<a name="line.792"></a>
+<span class="sourceLineNo">793</span>          LOG.error("Failed log archiving for the log {},", log.getFirst(), e);<a name="line.793"></a>
+<span class="sourceLineNo">794</span>          if (this.abortable != null) {<a name="line.794"></a>
+<span class="sourceLineNo">795</span>            this.abortable.abort("Failed log archiving", e);<a name="line.795"></a>
+<span class="sourceLineNo">796</span>            break;<a name="line.796"></a>
+<span class="sourceLineNo">797</span>          }<a name="line.797"></a>
+<span class="sourceLineNo">798</span>        } else {<a name="line.798"></a>
+<span class="sourceLineNo">799</span>          LOG.error("Log archiving failed for the log {} - attempt {}", log.getFirst(), retry,<a name="line.799"></a>
+<span class="sourceLineNo">800</span>            e);<a name="line.800"></a>
+<span class="sourceLineNo">801</span>        }<a name="line.801"></a>
+<span class="sourceLineNo">802</span>        retry++;<a name="line.802"></a>
+<span class="sourceLineNo">803</span>      }<a name="line.803"></a>
+<span class="sourceLineNo">804</span>    }<a name="line.804"></a>
+<span class="sourceLineNo">805</span>  }<a name="line.805"></a>
+<span class="sourceLineNo">806</span><a name="line.806"></a>
+<span class="sourceLineNo">807</span>  /*<a name="line.807"></a>
+<span class="sourceLineNo">808</span>   * only public so WALSplitter can use.<a name="line.808"></a>
+<span class="sourceLineNo">809</span>   * @return archived location of a WAL file with the given path p<a name="line.809"></a>
+<span class="sourceLineNo">810</span>   */<a name="line.810"></a>
+<span class="sourceLineNo">811</span>  public static Path getWALArchivePath(Path archiveDir, Path p) {<a name="line.811"></a>
+<span class="sourceLineNo">812</span>    return new Path(archiveDir, p.getName());<a name="line.812"></a>
+<span class="sourceLineNo">813</span>  }<a name="line.813"></a>
+<span class="sourceLineNo">814</span><a name="line.814"></a>
+<span class="sourceLineNo">815</span>  protected void archiveLogFile(final Path p) throws IOException {<a name="line.815"></a>
+<span class="sourceLineNo">816</span>    Path newPath = getWALArchivePath(this.walArchiveDir, p);<a name="line.816"></a>
+<span class="sourceLineNo">817</span>    // Tell our listeners that a log is going to be archived.<a name="line.817"></a>
+<span class="sourceLineNo">818</span>    if (!this.listeners.isEmpty()) {<a name="line.818"></a>
+<span class="sourceLineNo">819</span>      for (WALActionsListener i : this.listeners) {<a name="line.819"></a>
+<span class="sourceLineNo">820</span>        i.preLogArchive(p, newPath);<a name="line.820"></a>
+<span class="sourceLineNo">821</span>      }<a name="line.821"></a>
 <span class="sourceLineNo">822</span>    }<a name="line.822"></a>
-<span class="sourceLineNo">823</span>    // Tell our listeners that a log has been archived.<a name="line.823"></a>
-<span class="sourceLineNo">824</span>    if (!this.listeners.isEmpty()) {<a name="line.824"></a>
-<span class="sourceLineNo">825</span>      for (WALActionsListener i : this.listeners) {<a name="line.825"></a>
-<span class="sourceLineNo">826</span>        i.postLogArchive(p, newPath);<a name="line.826"></a>
-<span class="sourceLineNo">827</span>      }<a name="line.827"></a>
-<span class="sourceLineNo">828</span>    }<a name="line.828"></a>
-<span class="sourceLineNo">829</span>  }<a name="line.829"></a>
-<span class="sourceLineNo">830</span><a name="line.830"></a>
-<span class="sourceLineNo">831</span>  protected final void logRollAndSetupWalProps(Path oldPath, Path newPath, long oldFileLen) {<a name="line.831"></a>
-<span class="sourceLineNo">832</span>    int oldNumEntries = this.numEntries.getAndSet(0);<a name="line.832"></a>
-<span class="sourceLineNo">833</span>    String newPathString = newPath != null ? CommonFSUtils.getPath(newPath) : null;<a name="line.833"></a>
-<span class="sourceLineNo">834</span>    if (oldPath != null) {<a name="line.834"></a>
-<span class="sourceLineNo">835</span>      this.walFile2Props.put(oldPath,<a name="line.835"></a>
-<span class="sourceLineNo">836</span>        new WalProps(this.sequenceIdAccounting.resetHighest(), oldFileLen));<a name="line.836"></a>
-<span class="sourceLineNo">837</span>      this.totalLogSize.addAndGet(oldFileLen);<a name="line.837"></a>
-<span class="sourceLineNo">838</span>      LOG.info("Rolled WAL {} with entries={}, filesize={}; new WAL {}",<a name="line.838"></a>
-<span class="sourceLineNo">839</span>        CommonFSUtils.getPath(oldPath), oldNumEntries, StringUtils.byteDesc(oldFileLen),<a name="line.839"></a>
-<span class="sourceLineNo">840</span>        newPathString);<a name="line.840"></a>
-<span class="sourceLineNo">841</span>    } else {<a name="line.841"></a>
-<span class="sourceLineNo">842</span>      LOG.info("New WAL {}", newPathString);<a name="line.842"></a>
-<span class="sourceLineNo">843</span>    }<a name="line.843"></a>
-<span class="sourceLineNo">844</span>  }<a name="line.844"></a>
-<span class="sourceLineNo">845</span><a name="line.845"></a>
-<span class="sourceLineNo">846</span>  private Span createSpan(String name) {<a name="line.846"></a>
-<span class="sourceLineNo">847</span>    return TraceUtil.createSpan(name).setAttribute(TraceUtil.WAL_IMPL, implClassName);<a name="line.847"></a>
+<span class="sourceLineNo">823</span>    LOG.info("Archiving " + p + " to " + newPath);<a name="line.823"></a>
+<span class="sourceLineNo">824</span>    if (!CommonFSUtils.renameAndSetModifyTime(this.fs, p, newPath)) {<a name="line.824"></a>
+<span class="sourceLineNo">825</span>      throw new IOException("Unable to rename " + p + " to " + newPath);<a name="line.825"></a>
+<span class="sourceLineNo">826</span>    }<a name="line.826"></a>
+<span class="sourceLineNo">827</span>    // Tell our listeners that a log has been archived.<a name="line.827"></a>
+<span class="sourceLineNo">828</span>    if (!this.listeners.isEmpty()) {<a name="line.828"></a>
+<span class="sourceLineNo">829</span>      for (WALActionsListener i : this.listeners) {<a name="line.829"></a>
+<span class="sourceLineNo">830</span>        i.postLogArchive(p, newPath);<a name="line.830"></a>
+<span class="sourceLineNo">831</span>      }<a name="line.831"></a>
+<span class="sourceLineNo">832</span>    }<a name="line.832"></a>
+<span class="sourceLineNo">833</span>  }<a name="line.833"></a>
+<span class="sourceLineNo">834</span><a name="line.834"></a>
+<span class="sourceLineNo">835</span>  protected final void logRollAndSetupWalProps(Path oldPath, Path newPath, long oldFileLen) {<a name="line.835"></a>
+<span class="sourceLineNo">836</span>    int oldNumEntries = this.numEntries.getAndSet(0);<a name="line.836"></a>
+<span class="sourceLineNo">837</span>    String newPathString = newPath != null ? CommonFSUtils.getPath(newPath) : null;<a name="line.837"></a>
+<span class="sourceLineNo">838</span>    if (oldPath != null) {<a name="line.838"></a>
+<span class="sourceLineNo">839</span>      this.walFile2Props.put(oldPath,<a name="line.839"></a>
+<span class="sourceLineNo">840</span>        new WalProps(this.sequenceIdAccounting.resetHighest(), oldFileLen));<a name="line.840"></a>
+<span class="sourceLineNo">841</span>      this.totalLogSize.addAndGet(oldFileLen);<a name="line.841"></a>
+<span class="sourceLineNo">842</span>      LOG.info("Rolled WAL {} with entries={}, filesize={}; new WAL {}",<a name="line.842"></a>
+<span class="sourceLineNo">843</span>        CommonFSUtils.getPath(oldPath), oldNumEntries, StringUtils.byteDesc(oldFileLen),<a name="line.843"></a>
+<span class="sourceLineNo">844</span>        newPathString);<a name="line.844"></a>
+<span class="sourceLineNo">845</span>    } else {<a name="line.845"></a>
+<span class="sourceLineNo">846</span>      LOG.info("New WAL {}", newPathString);<a name="line.846"></a>
+<span class="sourceLineNo">847</span>    }<a name="line.847"></a>
 <span class="sourceLineNo">848</span>  }<a name="line.848"></a>
 <span class="sourceLineNo">849</span><a name="line.849"></a>
-<span class="sourceLineNo">850</span>  /**<a name="line.850"></a>
-<span class="sourceLineNo">851</span>   * Cleans up current writer closing it and then puts in place the passed in {@code nextWriter}.<a name="line.851"></a>
-<span class="sourceLineNo">852</span>   * &lt;p/&gt;<a name="line.852"></a>
-<span class="sourceLineNo">853</span>   * &lt;ul&gt;<a name="line.853"></a>
-<span class="sourceLineNo">854</span>   * &lt;li&gt;In the case of creating a new WAL, oldPath will be null.&lt;/li&gt;<a name="line.854"></a>
-<span class="sourceLineNo">855</span>   * &lt;li&gt;In the case of rolling over from one file to the next, none of the parameters will be null.<a name="line.855"></a>
-<span class="sourceLineNo">856</span>   * &lt;/li&gt;<a name="line.856"></a>
-<span class="sourceLineNo">857</span>   * &lt;li&gt;In the case of closing out this FSHLog with no further use newPath and nextWriter will be<a name="line.857"></a>
-<span class="sourceLineNo">858</span>   * null.&lt;/li&gt;<a name="line.858"></a>
-<span class="sourceLineNo">859</span>   * &lt;/ul&gt;<a name="line.859"></a>
-<span class="sourceLineNo">860</span>   * @param oldPath may be null<a name="line.860"></a>
-<span class="sourceLineNo">861</span>   * @param newPath may be null<a name="line.861"></a>
-<span class="sourceLineNo">862</span>   * @param nextWriter may be null<a name="line.862"></a>
-<span class="sourceLineNo">863</span>   * @return the passed in &lt;code&gt;newPath&lt;/code&gt;<a name="line.863"></a>
-<span class="sourceLineNo">864</span>   * @throws IOException if there is a problem flushing or closing the underlying FS<a name="line.864"></a>
-<span class="sourceLineNo">865</span>   */<a name="line.865"></a>
-<span class="sourceLineNo">866</span>  Path replaceWriter(Path oldPath, Path newPath, W nextWriter) throws IOException {<a name="line.866"></a>
-<span class="sourceLineNo">867</span>    return TraceUtil.trace(() -&gt; {<a name="line.867"></a>
-<span class="sourceLineNo">868</span>      doReplaceWriter(oldPath, newPath, nextWriter);<a name="line.868"></a>
-<span class="sourceLineNo">869</span>      return newPath;<a name="line.869"></a>
-<span class="sourceLineNo">870</span>    }, () -&gt; createSpan("WAL.replaceWriter"));<a name="line.870"></a>
-<span class="sourceLineNo">871</span>  }<a name="line.871"></a>
-<span class="sourceLineNo">872</span><a name="line.872"></a>
-<span class="sourceLineNo">873</span>  protected final void blockOnSync(SyncFuture syncFuture) throws IOException {<a name="line.873"></a>
-<span class="sourceLineNo">874</span>    // Now we have published the ringbuffer, halt the current thread until we get an answer back.<a name="line.874"></a>
-<span class="sourceLineNo">875</span>    try {<a name="line.875"></a>
-<span class="sourceLineNo">876</span>      if (syncFuture != null) {<a name="line.876"></a>
-<span class="sourceLineNo">877</span>        if (closed) {<a name="line.877"></a>
-<span class="sourceLineNo">878</span>          throw new IOException("WAL has been closed");<a name="line.878"></a>
-<span class="sourceLineNo">879</span>        } else {<a name="line.879"></a>
-<span class="sourceLineNo">880</span>          syncFuture.get(walSyncTimeoutNs);<a name="line.880"></a>
-<span class="sourceLineNo">881</span>        }<a name="line.881"></a>
-<span class="sourceLineNo">882</span>      }<a name="line.882"></a>
-<span class="sourceLineNo">883</span>    } catch (TimeoutIOException tioe) {<a name="line.883"></a>
-<span class="sourceLineNo">884</span>      // SyncFuture reuse by thread, if TimeoutIOException happens, ringbuffer<a name="line.884"></a>
-<span class="sourceLineNo">885</span>      // still refer to it, so if this thread use it next time may get a wrong<a name="line.885"></a>
-<span class="sourceLineNo">886</span>      // result.<a name="line.886"></a>
-<span class="sourceLineNo">887</span>      this.cachedSyncFutures.remove();<a name="line.887"></a>
-<span class="sourceLineNo">888</span>      throw tioe;<a name="line.888"></a>
-<span class="sourceLineNo">889</span>    } catch (InterruptedException ie) {<a name="line.889"></a>
-<span class="sourceLineNo">890</span>      LOG.warn("Interrupted", ie);<a name="line.890"></a>
-<span class="sourceLineNo">891</span>      throw convertInterruptedExceptionToIOException(ie);<a name="line.891"></a>
-<span class="sourceLineNo">892</span>    } catch (ExecutionException e) {<a name="line.892"></a>
-<span class="sourceLineNo">893</span>      throw ensureIOException(e.getCause());<a name="line.893"></a>
-<span class="sourceLineNo">894</span>    }<a name="line.894"></a>
-<span class="sourceLineNo">895</span>  }<a name="line.895"></a>
-<span class="sourceLineNo">896</span><a name="line.896"></a>
-<span class="sourceLineNo">897</span>  private static IOException ensureIOException(final Throwable t) {<a name="line.897"></a>
-<span class="sourceLineNo">898</span>    return (t instanceof IOException) ? (IOException) t : new IOException(t);<a name="line.898"></a>
+<span class="sourceLineNo">850</span>  private Span createSpan(String name) {<a name="line.850"></a>
+<span class="sourceLineNo">851</span>    return TraceUtil.createSpan(name).setAttribute(TraceUtil.WAL_IMPL, implClassName);<a name="line.851"></a>
+<span class="sourceLineNo">852</span>  }<a name="line.852"></a>
+<span class="sourceLineNo">853</span><a name="line.853"></a>
+<span class="sourceLineNo">854</span>  /**<a name="line.854"></a>
+<span class="sourceLineNo">855</span>   * Cleans up current writer closing it and then puts in place the passed in {@code nextWriter}.<a name="line.855"></a>
+<span class="sourceLineNo">856</span>   * &lt;p/&gt;<a name="line.856"></a>
+<span class="sourceLineNo">857</span>   * &lt;ul&gt;<a name="line.857"></a>
+<span class="sourceLineNo">858</span>   * &lt;li&gt;In the case of creating a new WAL, oldPath will be null.&lt;/li&gt;<a name="line.858"></a>
+<span class="sourceLineNo">859</span>   * &lt;li&gt;In the case of rolling over from one file to the next, none of the parameters will be null.<a name="line.859"></a>
+<span class="sourceLineNo">860</span>   * &lt;/li&gt;<a name="line.860"></a>
+<span class="sourceLineNo">861</span>   * &lt;li&gt;In the case of closing out this FSHLog with no further use newPath and nextWriter will be<a name="line.861"></a>
+<span class="sourceLineNo">862</span>   * null.&lt;/li&gt;<a name="line.862"></a>
+<span class="sourceLineNo">863</span>   * &lt;/ul&gt;<a name="line.863"></a>
+<span class="sourceLineNo">864</span>   * @param oldPath may be null<a name="line.864"></a>
+<span class="sourceLineNo">865</span>   * @param newPath may be null<a name="line.865"></a>
+<span class="sourceLineNo">866</span>   * @param nextWriter may be null<a name="line.866"></a>
+<span class="sourceLineNo">867</span>   * @return the passed in &lt;code&gt;newPath&lt;/code&gt;<a name="line.867"></a>
+<span class="sourceLineNo">868</span>   * @throws IOException if there is a problem flushing or closing the underlying FS<a name="line.868"></a>
+<span class="sourceLineNo">869</span>   */<a name="line.869"></a>
+<span class="sourceLineNo">870</span>  Path replaceWriter(Path oldPath, Path newPath, W nextWriter) throws IOException {<a name="line.870"></a>
+<span class="sourceLineNo">871</span>    return TraceUtil.trace(() -&gt; {<a name="line.871"></a>
+<span class="sourceLineNo">872</span>      doReplaceWriter(oldPath, newPath, nextWriter);<a name="line.872"></a>
+<span class="sourceLineNo">873</span>      return newPath;<a name="line.873"></a>
+<span class="sourceLineNo">874</span>    }, () -&gt; createSpan("WAL.replaceWriter"));<a name="line.874"></a>
+<span class="sourceLineNo">875</span>  }<a name="line.875"></a>
+<span class="sourceLineNo">876</span><a name="line.876"></a>
+<span class="sourceLineNo">877</span>  protected final void blockOnSync(SyncFuture syncFuture) throws IOException {<a name="line.877"></a>
+<span class="sourceLineNo">878</span>    // Now we have published the ringbuffer, halt the current thread until we get an answer back.<a name="line.878"></a>
+<span class="sourceLineNo">879</span>    try {<a name="line.879"></a>
+<span class="sourceLineNo">880</span>      if (syncFuture != null) {<a name="line.880"></a>
+<span class="sourceLineNo">881</span>        if (closed) {<a name="line.881"></a>
+<span class="sourceLineNo">882</span>          throw new IOException("WAL has been closed");<a name="line.882"></a>
+<span class="sourceLineNo">883</span>        } else {<a name="line.883"></a>
+<span class="sourceLineNo">884</span>          syncFuture.get(walSyncTimeoutNs);<a name="line.884"></a>
+<span class="sourceLineNo">885</span>        }<a name="line.885"></a>
+<span class="sourceLineNo">886</span>      }<a name="line.886"></a>
+<span class="sourceLineNo">887</span>    } catch (TimeoutIOException tioe) {<a name="line.887"></a>
+<span class="sourceLineNo">888</span>      // SyncFuture reuse by thread, if TimeoutIOException happens, ringbuffer<a name="line.888"></a>
+<span class="sourceLineNo">889</span>      // still refer to it, so if this thread use it next time may get a wrong<a name="line.889"></a>
+<span class="sourceLineNo">890</span>      // result.<a name="line.890"></a>
+<span class="sourceLineNo">891</span>      this.cachedSyncFutures.remove();<a name="line.891"></a>
+<span class="sourceLineNo">892</span>      throw tioe;<a name="line.892"></a>
+<span class="sourceLineNo">893</span>    } catch (InterruptedException ie) {<a name="line.893"></a>
+<span class="sourceLineNo">894</span>      LOG.warn("Interrupted", ie);<a name="line.894"></a>
+<span class="sourceLineNo">895</span>      throw convertInterruptedExceptionToIOException(ie);<a name="line.895"></a>
+<span class="sourceLineNo">896</span>    } catch (ExecutionException e) {<a name="line.896"></a>
+<span class="sourceLineNo">897</span>      throw ensureIOException(e.getCause());<a name="line.897"></a>
+<span class="sourceLineNo">898</span>    }<a name="line.898"></a>
 <span class="sourceLineNo">899</span>  }<a name="line.899"></a>
 <span class="sourceLineNo">900</span><a name="line.900"></a>
-<span class="sourceLineNo">901</span>  private IOException convertInterruptedExceptionToIOException(final InterruptedException ie) {<a name="line.901"></a>
-<span class="sourceLineNo">902</span>    Thread.currentThread().interrupt();<a name="line.902"></a>
-<span class="sourceLineNo">903</span>    IOException ioe = new InterruptedIOException();<a name="line.903"></a>
-<span class="sourceLineNo">904</span>    ioe.initCause(ie);<a name="line.904"></a>
-<span class="sourceLineNo">905</span>    return ioe;<a name="line.905"></a>
-<span class="sourceLineNo">906</span>  }<a name="line.906"></a>
-<span class="sourceLineNo">907</span><a name="line.907"></a>
-<span class="sourceLineNo">908</span>  private Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriterInternal(boolean force) throws IOException {<a name="line.908"></a>
-<span class="sourceLineNo">909</span>    rollWriterLock.lock();<a name="line.909"></a>
-<span class="sourceLineNo">910</span>    try {<a name="line.910"></a>
-<span class="sourceLineNo">911</span>      if (this.closed) {<a name="line.911"></a>
-<span class="sourceLineNo">912</span>        throw new WALClosedException("WAL has been closed");<a name="line.912"></a>
-<span class="sourceLineNo">913</span>      }<a name="line.913"></a>
-<span class="sourceLineNo">914</span>      // Return if nothing to flush.<a name="line.914"></a>
-<span class="sourceLineNo">915</span>      if (!force &amp;&amp; this.writer != null &amp;&amp; this.numEntries.get() &lt;= 0) {<a name="line.915"></a>
-<span class="sourceLineNo">916</span>        return null;<a name="line.916"></a>
+<span class="sourceLineNo">901</span>  private static IOException ensureIOException(final Throwable t) {<a name="line.901"></a>
+<span class="sourceLineNo">902</span>    return (t instanceof IOException) ? (IOException) t : new IOException(t);<a name="line.902"></a>
+<span class="sourceLineNo">903</span>  }<a name="line.903"></a>
+<span class="sourceLineNo">904</span><a name="line.904"></a>
+<span class="sourceLineNo">905</span>  private IOException convertInterruptedExceptionToIOException(final InterruptedException ie) {<a name="line.905"></a>
+<span class="sourceLineNo">906</span>    Thread.currentThread().interrupt();<a name="line.906"></a>
+<span class="sourceLineNo">907</span>    IOException ioe = new InterruptedIOException();<a name="line.907"></a>
+<span class="sourceLineNo">908</span>    ioe.initCause(ie);<a name="line.908"></a>
+<span class="sourceLineNo">909</span>    return ioe;<a name="line.909"></a>
+<span class="sourceLineNo">910</span>  }<a name="line.910"></a>
+<span class="sourceLineNo">911</span><a name="line.911"></a>
+<span class="sourceLineNo">912</span>  private Map&lt;byte[], List&lt;byte[]&gt;&gt; rollWriterInternal(boolean force) throws IOException {<a name="line.912"></a>
+<span class="sourceLineNo">913</span>    rollWriterLock.lock();<a name="line.913"></a>
+<span class="sourceLineNo">914</span>    try {<a name="line.914"></a>
+<span class="sourceLineNo">915</span>      if (this.closed) {<a name="line.915"></a>
+<span class="sourceLineNo">916</span>        throw new WALClosedException("WAL has been closed");<a name="line.916"></a>
 <span class="sourceLineNo">917</span>      }<a name="line.917"></a>
-<span class="sourceLineNo">918</span>      Map&lt;byte[], List&lt;byte[]&gt;&gt; regionsToFlush = null;<a name="line.918"></a>
-<span class="sourceLineNo">919</span>      try {<a name="line.919"></a>
-<span class="sourceLineNo">920</span>        Path oldPath = getOldPath();<a name="line.920"></a>
-<span class="sourceLineNo">921</span>        Path newPath = getNewPath();<a name="line.921"></a>
-<span class="sourceLineNo">922</span>        // Any exception from here on is catastrophic, non-recoverable so we currently abort.<a name="line.922"></a>
-<span class="sourceLineNo">923</span>        W nextWriter = this.createWriterInstance(newPath);<a name="line.923"></a>
-<span class="sourceLineNo">924</span>        tellListenersAboutPreLogRoll(oldPath, newPath);<a name="line.924"></a>
-<span class="sourceLineNo">925</span>        // NewPath could be equal to oldPath if replaceWriter fails.<a name="line.925"></a>
-<span class="sourceLineNo">926</span>        newPath = replaceWriter(oldPath, newPath, nextWriter);<a name="line.926"></a>
-<span class="sourceLineNo">927</span>        tellListenersAboutPostLogRoll(oldPath, newPath);<a name="line.927"></a>
-<span class="sourceLineNo">928</span>        if (LOG.isDebugEnabled()) {<a name="line.928"></a>
-<span class="sourceLineNo">929</span>          LOG.debug("Create new " + implClassName + " writer with pipeline: " +<a name="line.929"></a>
-<span class="sourceLineNo">930</span>            Arrays.toString(getPipeline()));<a name="line.930"></a>
-<span class="sourceLineNo">931</span>        }<a name="line.931"></a>
-<span class="sourceLineNo">932</span>        // We got a new writer, so reset the slow sync count<a name="line.932"></a>
-<span class="sourceLineNo">933</span>        lastTimeCheckSlowSync = EnvironmentEdgeManager.currentTime();<a name="line.933"></a>
-<span class="sourceLineNo">934</span>        slowSyncCount.set(0);<a name="line.934"></a>
-<span class="sourceLineNo">935</span>        // Can we delete any of the old log files?<a name="line.935"></a>
-<span class="sourceLineNo">936</span>        if (getNumRolledLogFiles() &gt; 0) {<a name="line.936"></a>
-<span class="sourceLineNo">937</span>          cleanOldLogs();<a name="line.937"></a>
-<span class="sourceLineNo">938</span>          regionsToFlush = findRegionsToForceFlush();<a name="line.938"></a>
-<span class="sourceLineNo">939</span>        }<a name="line.939"></a>
-<span class="sourceLineNo">940</span>      } catch (CommonFSUtils.StreamLacksCapabilityException exception) {<a name="line.940"></a>
-<span class="sourceLineNo">941</span>        // If the underlying FileSystem can't do what we ask, treat as IO failure so<a name="line.941"></a>
-<span class="sourceLineNo">942</span>        // we'll abort.<a name="line.942"></a>
-<span class="sourceLineNo">943</span>        throw new IOException(<a name="line.943"></a>
-<span class="sourceLineNo">944</span>          "Underlying FileSystem can't meet stream requirements. See RS log " + "for details.",<a name="line.944"></a>
-<span class="sourceLineNo">945</span>          exception);<a name="line.945"></a>
-<span class="sourceLineNo">946</span>      }<a name="line.946"></a>
-<span class="sourceLineNo">947</span>      return regionsToFlush;<a name="line.947"></a>
-<span class="sourceLineNo">948</span>    } finally {<a name="line.948"></a>
-<span class="sourceLineNo">949</span>      rollWriterLock.unloc