You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by gi...@apache.org on 2026/09/19 00:03:42 UTC

(hbase-site) branch asf-site updated: Published site at 1790942bb2d46f41f1b4aed94db85e6f5bd18a1a.

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

asf-gitbox-commits 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 de66251f0c5 Published site at 1790942bb2d46f41f1b4aed94db85e6f5bd18a1a.
de66251f0c5 is described below

commit de66251f0c54279b5a2551be8c89e6dfbc1b82e1
Author: HBase <de...@hbase.apache.org>
AuthorDate: Fri Sep 18 23:59:19 2026 +0000

    Published site at 1790942bb2d46f41f1b4aed94db85e6f5bd18a1a.
---
 books/apache-hbase-reference-guide-dark-mode.pdf   | Bin 38775817 -> 38775817 bytes
 books/apache-hbase-reference-guide.pdf             | Bin 38665189 -> 38665189 bytes
 checkstyle-aggregate.html                          |   6 +-
 dependency-convergence.html                        |   2 +-
 dependency-info.html                               |   2 +-
 dependency-management.html                         |   2 +-
 .../CustomDateTieredCompactionPolicy.html          |  18 +-
 .../CustomDateTieredCompactionPolicy.html          | 247 +++++------
 hbase-website/dependency-convergence.html          |   2 +-
 hbase-website/dependency-info.html                 |   2 +-
 hbase-website/dependency-management.html           |   2 +-
 hbase-website/index.html                           |   2 +-
 hbase-website/issue-management.html                |   2 +-
 hbase-website/licenses.html                        |   2 +-
 hbase-website/mailing-lists.html                   |   2 +-
 hbase-website/plugin-management.html               |   2 +-
 hbase-website/plugins.html                         |   2 +-
 hbase-website/project-info.html                    |   2 +-
 hbase-website/scm.html                             |   2 +-
 hbase-website/summary.html                         |   2 +-
 hbase-website/team.html                            |   2 +-
 issue-management.html                              |   2 +-
 licenses.html                                      |   2 +-
 mailing-lists.html                                 |   2 +-
 plugin-management.html                             |   2 +-
 plugins.html                                       |   2 +-
 project-info.html                                  |   2 +-
 project-reports.html                               |   2 +-
 scm.html                                           |   2 +-
 summary.html                                       |   2 +-
 team.html                                          |   2 +-
 .../TestCustomCellTieredCompactionPolicy.html      | 302 +++++++-------
 ...CellTieredCompactionPolicy.PolicyValidator.html |   4 +-
 .../TestCustomCellTieredCompactionPolicy.html      |  26 +-
 .../compactions/TestCustomCellTieredCompactor.html |   4 +-
 ...CellTieredCompactionPolicy.PolicyValidator.html | 302 +++++++-------
 .../TestCustomCellTieredCompactionPolicy.html      | 302 +++++++-------
 .../compactions/TestCustomCellTieredCompactor.html | 461 ++++++++++-----------
 38 files changed, 850 insertions(+), 874 deletions(-)

diff --git a/books/apache-hbase-reference-guide-dark-mode.pdf b/books/apache-hbase-reference-guide-dark-mode.pdf
index c6ae6d52d84..27cad9ec4e7 100644
Binary files a/books/apache-hbase-reference-guide-dark-mode.pdf and b/books/apache-hbase-reference-guide-dark-mode.pdf differ
diff --git a/books/apache-hbase-reference-guide.pdf b/books/apache-hbase-reference-guide.pdf
index 04340e47f8d..8fe1c005537 100644
Binary files a/books/apache-hbase-reference-guide.pdf and b/books/apache-hbase-reference-guide.pdf differ
diff --git a/checkstyle-aggregate.html b/checkstyle-aggregate.html
index 0f595d579f6..3d9c8f35fa4 100644
--- a/checkstyle-aggregate.html
+++ b/checkstyle-aggregate.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-checkstyle-plugin:3.6.0:checkstyle-aggregate at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
@@ -15792,8 +15792,8 @@
 <td><img src="images/icon_error_sml.gif" />&#160;Error</td>
 <td>sizes</td>
 <td>MethodLength</td>
-<td>Method testCustomCellTieredCompactorWithRowKeyDateTieringValue length is 169 lines (max allowed is 150).</td>
-<td>155</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fregionserver.2Fhandler.2FOpenRegionHandler.java"></a>
+<td>Method testCustomCellTieredCompactorWithRowKeyDateTieringValue length is 167 lines (max allowed is 150).</td>
+<td>152</td></tr></table></section><section><a id="org.2Fapache.2Fhadoop.2Fhbase.2Fregionserver.2Fhandler.2FOpenRegionHandler.java"></a>
 <h3>org/apache/hadoop/hbase/regionserver/handler/OpenRegionHandler.java</h3>
 <table class="table table-striped">
 <tr class="a">
diff --git a/dependency-convergence.html b/dependency-convergence.html
index c9fca009a5f..fa1d93ea9fb 100644
--- a/dependency-convergence.html
+++ b/dependency-convergence.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/dependency-info.html b/dependency-info.html
index d090124ef6c..7bfd690cc9a 100644
--- a/dependency-info.html
+++ b/dependency-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/dependency-management.html b/dependency-management.html
index ef41aeb3878..488c9801582 100644
--- a/dependency-management.html
+++ b/dependency-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/devapidocs/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html b/devapidocs/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html
index 52c4a3e32d5..8ea621e007f 100644
--- a/devapidocs/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html
+++ b/devapidocs/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html
@@ -84,7 +84,7 @@ loadScripts(document, 'script');</script>
 <section class="class-description" id="class-description">
 <hr>
 <div class="type-signature"><span class="annotations">@Private
-</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-46">CustomDateTieredCompactionPolicy</a></span>
+</span><span class="modifiers">public class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-45">CustomDateTieredCompactionPolicy</a></span>
 <span class="extends-implements">extends <a href="DateTieredCompactionPolicy.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">DateTieredCompactionPolicy</a></span></div>
 <div class="block">Custom implementation of DateTieredCompactionPolicy that calculates compaction boundaries based
  on the <b>hbase.hstore.compaction.date.tiered.custom.age.limit.millis</b> configuration property
@@ -195,7 +195,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="AGE_LIMIT_MILLIS">
 <h3>AGE_LIMIT_MILLIS</h3>
-<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-49">AGE_LIMIT_MILLIS</a></span></div>
+<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-48">AGE_LIMIT_MILLIS</a></span></div>
 <dl class="notes">
 <dt>See Also:</dt>
 <dd>
@@ -209,7 +209,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="DEFAULT_AGE_LIMIT_MILLIS">
 <h3>DEFAULT_AGE_LIMIT_MILLIS</h3>
-<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-53">DEFAULT_AGE_LIMIT_MILLIS</a></span></div>
+<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-52">DEFAULT_AGE_LIMIT_MILLIS</a></span></div>
 <dl class="notes">
 <dt>See Also:</dt>
 <dd>
@@ -223,13 +223,13 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="LOG">
 <h3>LOG</h3>
-<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.slf4j.Logger</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-56">LOG</a></span></div>
+<div class="member-signature"><span class="modifiers">private static final</span>&nbsp;<span class="return-type">org.slf4j.Logger</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-55">LOG</a></span></div>
 </section>
 </li>
 <li>
 <section class="detail" id="cutOffTimestamp">
 <h3>cutOffTimestamp</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-58">cutOffTimestamp</a></span></div>
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-57">cutOffTimestamp</a></span></div>
 </section>
 </li>
 </ul>
@@ -243,7 +243,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="&lt;init&gt;(org.apache.hadoop.conf.Configuration,org.apache.hadoop.hbase.regionserver.StoreConfigInformation)">
 <h3>CustomDateTieredCompactionPolicy</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-60">CustomDateTieredCompactionPolicy</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;conf,
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-59">CustomDateTieredCompactionPolicy</a></span><wbr><span class="parameters">(org.apache.hadoop.conf.Configuration&nbsp;conf,
  <a href="../StoreConfigInformation.html" title="interface in org.apache.hadoop.hbase.regionserver">StoreConfigInformation</a>&nbsp;storeConfigInfo)</span>
                                  throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
 <dl class="notes">
@@ -263,7 +263,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="getCompactBoundariesForMajor(java.util.Collection,long)">
 <h3>getCompactBoundariesForMajor</h3>
-<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Long.html" title="class or interface in java.lang" class="external-link">Long</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../.. [...]
+<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/List.html" title="class or interface in java.util" class="external-link">List</a>&lt;<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Long.html" title="class or interface in java.lang" class="external-link">Long</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../.. [...]
  long&nbsp;now)</span></div>
 <div class="block"><span class="descfrm-type-label">Description copied from class:&nbsp;<code><a href="DateTieredCompactionPolicy.html#getCompactBoundariesForMajor(java.util.Collection,long)">DateTieredCompactionPolicy</a></code></span></div>
 <div class="block">Return a list of boundaries for multiple compaction output in ascending order.</div>
@@ -276,7 +276,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="selectMinorCompaction(java.util.ArrayList,boolean,boolean)">
 <h3>selectMinorCompaction</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestImpl</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-106">selectMinorCompaction</a></span><wbr><span class="parameters">(<a href="https://docs.oracle. [...]
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="CompactionRequestImpl.html" title="class in org.apache.hadoop.hbase.regionserver.compactions">CompactionRequestImpl</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-81">selectMinorCompaction</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.c [...]
  boolean&nbsp;mayUseOffPeak,
  boolean&nbsp;mayBeStuck)</span>
                                             throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
@@ -298,7 +298,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="shouldPerformMajorCompaction(java.util.Collection)">
 <h3>shouldPerformMajorCompaction</h3>
-<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-114">shouldPerformMajorCompaction</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html" title="class or interface in java.util" class= [...]
+<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html#line-89">shouldPerformMajorCompaction</a></span><wbr><span class="parameters">(<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Collection.html" title="class or interface in java.util" class=" [...]
                                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
 <dl class="notes">
 <dt>Overrides:</dt>
diff --git a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html
index e6c7c0cabcc..cc4743209b0 100644
--- a/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html
+++ b/devapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/CustomDateTieredCompactionPolicy.html
@@ -36,142 +36,117 @@
 <span class="source-line-no">023</span><span id="line-23">import java.util.ArrayList;</span>
 <span class="source-line-no">024</span><span id="line-24">import java.util.Collection;</span>
 <span class="source-line-no">025</span><span id="line-25">import java.util.List;</span>
-<span class="source-line-no">026</span><span id="line-26">import org.apache.commons.lang3.mutable.MutableLong;</span>
-<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.conf.Configuration;</span>
-<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.HDFSBlocksDistribution;</span>
-<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.regionserver.HStoreFile;</span>
-<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.regionserver.StoreConfigInformation;</span>
-<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.regionserver.StoreUtils;</span>
-<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;</span>
-<span class="source-line-no">033</span><span id="line-33">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
-<span class="source-line-no">034</span><span id="line-34">import org.apache.yetus.audience.InterfaceAudience;</span>
-<span class="source-line-no">035</span><span id="line-35">import org.slf4j.Logger;</span>
-<span class="source-line-no">036</span><span id="line-36">import org.slf4j.LoggerFactory;</span>
-<span class="source-line-no">037</span><span id="line-37"></span>
-<span class="source-line-no">038</span><span id="line-38">/**</span>
-<span class="source-line-no">039</span><span id="line-39"> * Custom implementation of DateTieredCompactionPolicy that calculates compaction boundaries based</span>
-<span class="source-line-no">040</span><span id="line-40"> * on the &lt;b&gt;hbase.hstore.compaction.date.tiered.custom.age.limit.millis&lt;/b&gt; configuration property</span>
-<span class="source-line-no">041</span><span id="line-41"> * and the TIERING_CELL_MIN/TIERING_CELL_MAX stored on metadata of each store file. This policy</span>
-<span class="source-line-no">042</span><span id="line-42"> * would produce either one or two tiers: - One tier if either all files data age are older than the</span>
-<span class="source-line-no">043</span><span id="line-43"> * configured age limit or all files data age are younger than the configured age limit. - Two tiers</span>
-<span class="source-line-no">044</span><span id="line-44"> * if files have both younger and older data than the configured age limit.</span>
-<span class="source-line-no">045</span><span id="line-45"> */</span>
-<span class="source-line-no">046</span><span id="line-46">@InterfaceAudience.Private</span>
-<span class="source-line-no">047</span><span id="line-47">public class CustomDateTieredCompactionPolicy extends DateTieredCompactionPolicy {</span>
-<span class="source-line-no">048</span><span id="line-48"></span>
-<span class="source-line-no">049</span><span id="line-49">  public static final String AGE_LIMIT_MILLIS =</span>
-<span class="source-line-no">050</span><span id="line-50">    "hbase.hstore.compaction.date.tiered.custom.age.limit.millis";</span>
-<span class="source-line-no">051</span><span id="line-51"></span>
-<span class="source-line-no">052</span><span id="line-52">  // Defaults to 10 years</span>
-<span class="source-line-no">053</span><span id="line-53">  public static final long DEFAULT_AGE_LIMIT_MILLIS =</span>
-<span class="source-line-no">054</span><span id="line-54">    (long) (10L * 365.25 * 24L * 60L * 60L * 1000L);</span>
-<span class="source-line-no">055</span><span id="line-55"></span>
-<span class="source-line-no">056</span><span id="line-56">  private static final Logger LOG = LoggerFactory.getLogger(CustomDateTieredCompactionPolicy.class);</span>
-<span class="source-line-no">057</span><span id="line-57"></span>
-<span class="source-line-no">058</span><span id="line-58">  private long cutOffTimestamp;</span>
-<span class="source-line-no">059</span><span id="line-59"></span>
-<span class="source-line-no">060</span><span id="line-60">  public CustomDateTieredCompactionPolicy(Configuration conf,</span>
-<span class="source-line-no">061</span><span id="line-61">    StoreConfigInformation storeConfigInfo) throws IOException {</span>
-<span class="source-line-no">062</span><span id="line-62">    super(conf, storeConfigInfo);</span>
-<span class="source-line-no">063</span><span id="line-63">    cutOffTimestamp = EnvironmentEdgeManager.currentTime()</span>
-<span class="source-line-no">064</span><span id="line-64">      - conf.getLong(AGE_LIMIT_MILLIS, DEFAULT_AGE_LIMIT_MILLIS);</span>
-<span class="source-line-no">065</span><span id="line-65"></span>
-<span class="source-line-no">066</span><span id="line-66">  }</span>
-<span class="source-line-no">067</span><span id="line-67"></span>
-<span class="source-line-no">068</span><span id="line-68">  @Override</span>
-<span class="source-line-no">069</span><span id="line-69">  protected List&lt;Long&gt; getCompactBoundariesForMajor(Collection&lt;HStoreFile&gt; filesToCompact,</span>
-<span class="source-line-no">070</span><span id="line-70">    long now) {</span>
-<span class="source-line-no">071</span><span id="line-71">    MutableLong min = new MutableLong(Long.MAX_VALUE);</span>
-<span class="source-line-no">072</span><span id="line-72">    MutableLong max = new MutableLong(0);</span>
-<span class="source-line-no">073</span><span id="line-73">    filesToCompact.forEach(f -&gt; {</span>
-<span class="source-line-no">074</span><span id="line-74">      byte[] timeRangeBytes = f.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">075</span><span id="line-75">      long minCurrent = Long.MAX_VALUE;</span>
-<span class="source-line-no">076</span><span id="line-76">      long maxCurrent = 0;</span>
-<span class="source-line-no">077</span><span id="line-77">      if (timeRangeBytes != null) {</span>
-<span class="source-line-no">078</span><span id="line-78">        try {</span>
-<span class="source-line-no">079</span><span id="line-79">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(timeRangeBytes);</span>
-<span class="source-line-no">080</span><span id="line-80">          timeRangeTracker.getMin();</span>
-<span class="source-line-no">081</span><span id="line-81">          minCurrent = timeRangeTracker.getMin();</span>
-<span class="source-line-no">082</span><span id="line-82">          maxCurrent = timeRangeTracker.getMax();</span>
-<span class="source-line-no">083</span><span id="line-83">        } catch (IOException e) {</span>
-<span class="source-line-no">084</span><span id="line-84">          LOG.warn("Got TIERING_CELL_TIME_RANGE info from file, but failed to parse it:", e);</span>
-<span class="source-line-no">085</span><span id="line-85">        }</span>
-<span class="source-line-no">086</span><span id="line-86">      }</span>
-<span class="source-line-no">087</span><span id="line-87">      if (minCurrent &lt; min.getValue()) {</span>
-<span class="source-line-no">088</span><span id="line-88">        min.setValue(minCurrent);</span>
-<span class="source-line-no">089</span><span id="line-89">      }</span>
-<span class="source-line-no">090</span><span id="line-90">      if (maxCurrent &gt; max.getValue()) {</span>
-<span class="source-line-no">091</span><span id="line-91">        max.setValue(maxCurrent);</span>
-<span class="source-line-no">092</span><span id="line-92">      }</span>
-<span class="source-line-no">093</span><span id="line-93">    });</span>
-<span class="source-line-no">094</span><span id="line-94"></span>
-<span class="source-line-no">095</span><span id="line-95">    List&lt;Long&gt; boundaries = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">096</span><span id="line-96">    boundaries.add(Long.MIN_VALUE);</span>
-<span class="source-line-no">097</span><span id="line-97">    if (min.getValue() &lt; cutOffTimestamp) {</span>
-<span class="source-line-no">098</span><span id="line-98">      boundaries.add(min.getValue());</span>
-<span class="source-line-no">099</span><span id="line-99">      if (max.getValue() &gt; cutOffTimestamp) {</span>
-<span class="source-line-no">100</span><span id="line-100">        boundaries.add(cutOffTimestamp);</span>
-<span class="source-line-no">101</span><span id="line-101">      }</span>
-<span class="source-line-no">102</span><span id="line-102">    }</span>
-<span class="source-line-no">103</span><span id="line-103">    return boundaries;</span>
-<span class="source-line-no">104</span><span id="line-104">  }</span>
-<span class="source-line-no">105</span><span id="line-105"></span>
-<span class="source-line-no">106</span><span id="line-106">  @Override</span>
-<span class="source-line-no">107</span><span id="line-107">  public CompactionRequestImpl selectMinorCompaction(ArrayList&lt;HStoreFile&gt; candidateSelection,</span>
-<span class="source-line-no">108</span><span id="line-108">    boolean mayUseOffPeak, boolean mayBeStuck) throws IOException {</span>
-<span class="source-line-no">109</span><span id="line-109">    ArrayList&lt;HStoreFile&gt; filteredByPolicy = this.compactionPolicyPerWindow</span>
-<span class="source-line-no">110</span><span id="line-110">      .applyCompactionPolicy(candidateSelection, mayUseOffPeak, mayBeStuck);</span>
-<span class="source-line-no">111</span><span id="line-111">    return selectMajorCompaction(filteredByPolicy);</span>
-<span class="source-line-no">112</span><span id="line-112">  }</span>
-<span class="source-line-no">113</span><span id="line-113"></span>
-<span class="source-line-no">114</span><span id="line-114">  @Override</span>
-<span class="source-line-no">115</span><span id="line-115">  public boolean shouldPerformMajorCompaction(Collection&lt;HStoreFile&gt; filesToCompact)</span>
-<span class="source-line-no">116</span><span id="line-116">    throws IOException {</span>
-<span class="source-line-no">117</span><span id="line-117">    long lowTimestamp = StoreUtils.getLowestTimestamp(filesToCompact);</span>
-<span class="source-line-no">118</span><span id="line-118">    long now = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">119</span><span id="line-119">    if (isMajorCompactionTime(filesToCompact, now, lowTimestamp)) {</span>
-<span class="source-line-no">120</span><span id="line-120">      long cfTTL = this.storeConfigInfo.getStoreFileTtl();</span>
-<span class="source-line-no">121</span><span id="line-121">      int countLower = 0;</span>
-<span class="source-line-no">122</span><span id="line-122">      int countHigher = 0;</span>
-<span class="source-line-no">123</span><span id="line-123">      HDFSBlocksDistribution hdfsBlocksDistribution = new HDFSBlocksDistribution();</span>
-<span class="source-line-no">124</span><span id="line-124">      for (HStoreFile f : filesToCompact) {</span>
-<span class="source-line-no">125</span><span id="line-125">        if (checkForTtl(cfTTL, f)) {</span>
-<span class="source-line-no">126</span><span id="line-126">          return true;</span>
-<span class="source-line-no">127</span><span id="line-127">        }</span>
-<span class="source-line-no">128</span><span id="line-128">        if (isMajorOrBulkloadResult(f, now - lowTimestamp)) {</span>
-<span class="source-line-no">129</span><span id="line-129">          return true;</span>
-<span class="source-line-no">130</span><span id="line-130">        }</span>
-<span class="source-line-no">131</span><span id="line-131">        byte[] timeRangeBytes = f.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">132</span><span id="line-132">        // this means this file has not been major compacted by manually triggered compaction at</span>
-<span class="source-line-no">133</span><span id="line-133">        // the time of enabling Custom Time Based Priority, so it needs compaction to have its rows</span>
-<span class="source-line-no">134</span><span id="line-134">        // separated according to the cutOffTimestamp.</span>
-<span class="source-line-no">135</span><span id="line-135">        if (timeRangeBytes == null) {</span>
-<span class="source-line-no">136</span><span id="line-136">          return true;</span>
-<span class="source-line-no">137</span><span id="line-137">        }</span>
-<span class="source-line-no">138</span><span id="line-138">        TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(timeRangeBytes);</span>
-<span class="source-line-no">139</span><span id="line-139">        if (timeRangeTracker.getMin() &lt; cutOffTimestamp) {</span>
-<span class="source-line-no">140</span><span id="line-140">          if (timeRangeTracker.getMax() &gt; cutOffTimestamp) {</span>
-<span class="source-line-no">141</span><span id="line-141">            // Found at least one file crossing the cutOffTimestamp</span>
-<span class="source-line-no">142</span><span id="line-142">            return true;</span>
-<span class="source-line-no">143</span><span id="line-143">          } else {</span>
-<span class="source-line-no">144</span><span id="line-144">            countLower++;</span>
-<span class="source-line-no">145</span><span id="line-145">          }</span>
-<span class="source-line-no">146</span><span id="line-146">        } else {</span>
-<span class="source-line-no">147</span><span id="line-147">          countHigher++;</span>
-<span class="source-line-no">148</span><span id="line-148">        }</span>
-<span class="source-line-no">149</span><span id="line-149">        hdfsBlocksDistribution.add(f.getHDFSBlockDistribution());</span>
-<span class="source-line-no">150</span><span id="line-150">      }</span>
-<span class="source-line-no">151</span><span id="line-151">      // If we haven't found any files crossing the cutOffTimestamp, we have to check</span>
-<span class="source-line-no">152</span><span id="line-152">      // if there are at least more than one file on each tier and if so, perform compaction</span>
-<span class="source-line-no">153</span><span id="line-153">      if (countLower &gt; 1 || countHigher &gt; 1) {</span>
-<span class="source-line-no">154</span><span id="line-154">        return true;</span>
-<span class="source-line-no">155</span><span id="line-155">      }</span>
-<span class="source-line-no">156</span><span id="line-156">      return checkBlockLocality(hdfsBlocksDistribution);</span>
-<span class="source-line-no">157</span><span id="line-157">    }</span>
-<span class="source-line-no">158</span><span id="line-158">    return false;</span>
-<span class="source-line-no">159</span><span id="line-159">  }</span>
-<span class="source-line-no">160</span><span id="line-160"></span>
-<span class="source-line-no">161</span><span id="line-161">}</span>
+<span class="source-line-no">026</span><span id="line-26">import org.apache.hadoop.conf.Configuration;</span>
+<span class="source-line-no">027</span><span id="line-27">import org.apache.hadoop.hbase.HDFSBlocksDistribution;</span>
+<span class="source-line-no">028</span><span id="line-28">import org.apache.hadoop.hbase.regionserver.HStoreFile;</span>
+<span class="source-line-no">029</span><span id="line-29">import org.apache.hadoop.hbase.regionserver.StoreConfigInformation;</span>
+<span class="source-line-no">030</span><span id="line-30">import org.apache.hadoop.hbase.regionserver.StoreUtils;</span>
+<span class="source-line-no">031</span><span id="line-31">import org.apache.hadoop.hbase.regionserver.TimeRangeTracker;</span>
+<span class="source-line-no">032</span><span id="line-32">import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;</span>
+<span class="source-line-no">033</span><span id="line-33">import org.apache.yetus.audience.InterfaceAudience;</span>
+<span class="source-line-no">034</span><span id="line-34">import org.slf4j.Logger;</span>
+<span class="source-line-no">035</span><span id="line-35">import org.slf4j.LoggerFactory;</span>
+<span class="source-line-no">036</span><span id="line-36"></span>
+<span class="source-line-no">037</span><span id="line-37">/**</span>
+<span class="source-line-no">038</span><span id="line-38"> * Custom implementation of DateTieredCompactionPolicy that calculates compaction boundaries based</span>
+<span class="source-line-no">039</span><span id="line-39"> * on the &lt;b&gt;hbase.hstore.compaction.date.tiered.custom.age.limit.millis&lt;/b&gt; configuration property</span>
+<span class="source-line-no">040</span><span id="line-40"> * and the TIERING_CELL_MIN/TIERING_CELL_MAX stored on metadata of each store file. This policy</span>
+<span class="source-line-no">041</span><span id="line-41"> * would produce either one or two tiers: - One tier if either all files data age are older than the</span>
+<span class="source-line-no">042</span><span id="line-42"> * configured age limit or all files data age are younger than the configured age limit. - Two tiers</span>
+<span class="source-line-no">043</span><span id="line-43"> * if files have both younger and older data than the configured age limit.</span>
+<span class="source-line-no">044</span><span id="line-44"> */</span>
+<span class="source-line-no">045</span><span id="line-45">@InterfaceAudience.Private</span>
+<span class="source-line-no">046</span><span id="line-46">public class CustomDateTieredCompactionPolicy extends DateTieredCompactionPolicy {</span>
+<span class="source-line-no">047</span><span id="line-47"></span>
+<span class="source-line-no">048</span><span id="line-48">  public static final String AGE_LIMIT_MILLIS =</span>
+<span class="source-line-no">049</span><span id="line-49">    "hbase.hstore.compaction.date.tiered.custom.age.limit.millis";</span>
+<span class="source-line-no">050</span><span id="line-50"></span>
+<span class="source-line-no">051</span><span id="line-51">  // Defaults to 10 years</span>
+<span class="source-line-no">052</span><span id="line-52">  public static final long DEFAULT_AGE_LIMIT_MILLIS =</span>
+<span class="source-line-no">053</span><span id="line-53">    (long) (10L * 365.25 * 24L * 60L * 60L * 1000L);</span>
+<span class="source-line-no">054</span><span id="line-54"></span>
+<span class="source-line-no">055</span><span id="line-55">  private static final Logger LOG = LoggerFactory.getLogger(CustomDateTieredCompactionPolicy.class);</span>
+<span class="source-line-no">056</span><span id="line-56"></span>
+<span class="source-line-no">057</span><span id="line-57">  private long cutOffTimestamp;</span>
+<span class="source-line-no">058</span><span id="line-58"></span>
+<span class="source-line-no">059</span><span id="line-59">  public CustomDateTieredCompactionPolicy(Configuration conf,</span>
+<span class="source-line-no">060</span><span id="line-60">    StoreConfigInformation storeConfigInfo) throws IOException {</span>
+<span class="source-line-no">061</span><span id="line-61">    super(conf, storeConfigInfo);</span>
+<span class="source-line-no">062</span><span id="line-62">    cutOffTimestamp = EnvironmentEdgeManager.currentTime()</span>
+<span class="source-line-no">063</span><span id="line-63">      - conf.getLong(AGE_LIMIT_MILLIS, DEFAULT_AGE_LIMIT_MILLIS);</span>
+<span class="source-line-no">064</span><span id="line-64"></span>
+<span class="source-line-no">065</span><span id="line-65">  }</span>
+<span class="source-line-no">066</span><span id="line-66"></span>
+<span class="source-line-no">067</span><span id="line-67">  @Override</span>
+<span class="source-line-no">068</span><span id="line-68">  protected List&lt;Long&gt; getCompactBoundariesForMajor(Collection&lt;HStoreFile&gt; filesToCompact,</span>
+<span class="source-line-no">069</span><span id="line-69">    long now) {</span>
+<span class="source-line-no">070</span><span id="line-70">    // CustomTieringMultiFileWriter#append buckets each cell into its tier by comparing against</span>
+<span class="source-line-no">071</span><span id="line-71">    // these boundaries directly, and only commits a file for a tier that actually received data.</span>
+<span class="source-line-no">072</span><span id="line-72">    // There is no need to traverse filesToCompact to inspect CUSTOM_TIERING_TIME_RANGE here:</span>
+<span class="source-line-no">073</span><span id="line-73">    // always offering the cutOffTimestamp boundary is sufficient and avoids missing it when a</span>
+<span class="source-line-no">074</span><span id="line-74">    // file lacks that metadata.</span>
+<span class="source-line-no">075</span><span id="line-75">    List&lt;Long&gt; boundaries = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">076</span><span id="line-76">    boundaries.add(Long.MIN_VALUE);</span>
+<span class="source-line-no">077</span><span id="line-77">    boundaries.add(cutOffTimestamp);</span>
+<span class="source-line-no">078</span><span id="line-78">    return boundaries;</span>
+<span class="source-line-no">079</span><span id="line-79">  }</span>
+<span class="source-line-no">080</span><span id="line-80"></span>
+<span class="source-line-no">081</span><span id="line-81">  @Override</span>
+<span class="source-line-no">082</span><span id="line-82">  public CompactionRequestImpl selectMinorCompaction(ArrayList&lt;HStoreFile&gt; candidateSelection,</span>
+<span class="source-line-no">083</span><span id="line-83">    boolean mayUseOffPeak, boolean mayBeStuck) throws IOException {</span>
+<span class="source-line-no">084</span><span id="line-84">    ArrayList&lt;HStoreFile&gt; filteredByPolicy = this.compactionPolicyPerWindow</span>
+<span class="source-line-no">085</span><span id="line-85">      .applyCompactionPolicy(candidateSelection, mayUseOffPeak, mayBeStuck);</span>
+<span class="source-line-no">086</span><span id="line-86">    return selectMajorCompaction(filteredByPolicy);</span>
+<span class="source-line-no">087</span><span id="line-87">  }</span>
+<span class="source-line-no">088</span><span id="line-88"></span>
+<span class="source-line-no">089</span><span id="line-89">  @Override</span>
+<span class="source-line-no">090</span><span id="line-90">  public boolean shouldPerformMajorCompaction(Collection&lt;HStoreFile&gt; filesToCompact)</span>
+<span class="source-line-no">091</span><span id="line-91">    throws IOException {</span>
+<span class="source-line-no">092</span><span id="line-92">    long lowTimestamp = StoreUtils.getLowestTimestamp(filesToCompact);</span>
+<span class="source-line-no">093</span><span id="line-93">    long now = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">094</span><span id="line-94">    if (isMajorCompactionTime(filesToCompact, now, lowTimestamp)) {</span>
+<span class="source-line-no">095</span><span id="line-95">      long cfTTL = this.storeConfigInfo.getStoreFileTtl();</span>
+<span class="source-line-no">096</span><span id="line-96">      int countLower = 0;</span>
+<span class="source-line-no">097</span><span id="line-97">      int countHigher = 0;</span>
+<span class="source-line-no">098</span><span id="line-98">      HDFSBlocksDistribution hdfsBlocksDistribution = new HDFSBlocksDistribution();</span>
+<span class="source-line-no">099</span><span id="line-99">      for (HStoreFile f : filesToCompact) {</span>
+<span class="source-line-no">100</span><span id="line-100">        if (checkForTtl(cfTTL, f)) {</span>
+<span class="source-line-no">101</span><span id="line-101">          return true;</span>
+<span class="source-line-no">102</span><span id="line-102">        }</span>
+<span class="source-line-no">103</span><span id="line-103">        if (isMajorOrBulkloadResult(f, now - lowTimestamp)) {</span>
+<span class="source-line-no">104</span><span id="line-104">          return true;</span>
+<span class="source-line-no">105</span><span id="line-105">        }</span>
+<span class="source-line-no">106</span><span id="line-106">        byte[] timeRangeBytes = f.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
+<span class="source-line-no">107</span><span id="line-107">        // this means this file has not been major compacted by manually triggered compaction at</span>
+<span class="source-line-no">108</span><span id="line-108">        // the time of enabling Custom Time Based Priority, so it needs compaction to have its rows</span>
+<span class="source-line-no">109</span><span id="line-109">        // separated according to the cutOffTimestamp.</span>
+<span class="source-line-no">110</span><span id="line-110">        if (timeRangeBytes == null) {</span>
+<span class="source-line-no">111</span><span id="line-111">          return true;</span>
+<span class="source-line-no">112</span><span id="line-112">        }</span>
+<span class="source-line-no">113</span><span id="line-113">        TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(timeRangeBytes);</span>
+<span class="source-line-no">114</span><span id="line-114">        if (timeRangeTracker.getMin() &lt; cutOffTimestamp) {</span>
+<span class="source-line-no">115</span><span id="line-115">          if (timeRangeTracker.getMax() &gt; cutOffTimestamp) {</span>
+<span class="source-line-no">116</span><span id="line-116">            // Found at least one file crossing the cutOffTimestamp</span>
+<span class="source-line-no">117</span><span id="line-117">            return true;</span>
+<span class="source-line-no">118</span><span id="line-118">          } else {</span>
+<span class="source-line-no">119</span><span id="line-119">            countLower++;</span>
+<span class="source-line-no">120</span><span id="line-120">          }</span>
+<span class="source-line-no">121</span><span id="line-121">        } else {</span>
+<span class="source-line-no">122</span><span id="line-122">          countHigher++;</span>
+<span class="source-line-no">123</span><span id="line-123">        }</span>
+<span class="source-line-no">124</span><span id="line-124">        hdfsBlocksDistribution.add(f.getHDFSBlockDistribution());</span>
+<span class="source-line-no">125</span><span id="line-125">      }</span>
+<span class="source-line-no">126</span><span id="line-126">      // If we haven't found any files crossing the cutOffTimestamp, we have to check</span>
+<span class="source-line-no">127</span><span id="line-127">      // if there are at least more than one file on each tier and if so, perform compaction</span>
+<span class="source-line-no">128</span><span id="line-128">      if (countLower &gt; 1 || countHigher &gt; 1) {</span>
+<span class="source-line-no">129</span><span id="line-129">        return true;</span>
+<span class="source-line-no">130</span><span id="line-130">      }</span>
+<span class="source-line-no">131</span><span id="line-131">      return checkBlockLocality(hdfsBlocksDistribution);</span>
+<span class="source-line-no">132</span><span id="line-132">    }</span>
+<span class="source-line-no">133</span><span id="line-133">    return false;</span>
+<span class="source-line-no">134</span><span id="line-134">  }</span>
+<span class="source-line-no">135</span><span id="line-135"></span>
+<span class="source-line-no">136</span><span id="line-136">}</span>
 
 
 
diff --git a/hbase-website/dependency-convergence.html b/hbase-website/dependency-convergence.html
index 8062d981155..15459f817ba 100644
--- a/hbase-website/dependency-convergence.html
+++ b/hbase-website/dependency-convergence.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-convergence at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/dependency-info.html b/hbase-website/dependency-info.html
index 6e1bb8e5b3d..72d9474aeb6 100644
--- a/hbase-website/dependency-info.html
+++ b/hbase-website/dependency-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-info at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/dependency-management.html b/hbase-website/dependency-management.html
index 5ff574be07a..c1cafd82418 100644
--- a/hbase-website/dependency-management.html
+++ b/hbase-website/dependency-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:dependency-management at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/index.html b/hbase-website/index.html
index dbdcce72954..e465a825d73 100644
--- a/hbase-website/index.html
+++ b/hbase-website/index.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:index at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/issue-management.html b/hbase-website/issue-management.html
index c69f5cb3ed5..9e157665ce9 100644
--- a/hbase-website/issue-management.html
+++ b/hbase-website/issue-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/licenses.html b/hbase-website/licenses.html
index b7cfb4955b5..443bfd9f121 100644
--- a/hbase-website/licenses.html
+++ b/hbase-website/licenses.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/mailing-lists.html b/hbase-website/mailing-lists.html
index 775264437f0..7447bd715f7 100644
--- a/hbase-website/mailing-lists.html
+++ b/hbase-website/mailing-lists.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/plugin-management.html b/hbase-website/plugin-management.html
index 398c7b6d5ab..1bdf2fdb807 100644
--- a/hbase-website/plugin-management.html
+++ b/hbase-website/plugin-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/plugins.html b/hbase-website/plugins.html
index a33981118fd..51e2921bd18 100644
--- a/hbase-website/plugins.html
+++ b/hbase-website/plugins.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/project-info.html b/hbase-website/project-info.html
index 306762b7bca..199fbd31980 100644
--- a/hbase-website/project-info.html
+++ b/hbase-website/project-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/scm.html b/hbase-website/scm.html
index 8113d19e6ae..f3eafad81ea 100644
--- a/hbase-website/scm.html
+++ b/hbase-website/scm.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/summary.html b/hbase-website/summary.html
index 2863d49bdb2..99624b12883 100644
--- a/hbase-website/summary.html
+++ b/hbase-website/summary.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/hbase-website/team.html b/hbase-website/team.html
index 50692858dae..39a1b41727c 100644
--- a/hbase-website/team.html
+++ b/hbase-website/team.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/issue-management.html b/issue-management.html
index 4c040dbf459..4bcf910b76f 100644
--- a/issue-management.html
+++ b/issue-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:issue-management at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/licenses.html b/licenses.html
index e777ca1c786..d2dc1f1be6e 100644
--- a/licenses.html
+++ b/licenses.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:licenses at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/mailing-lists.html b/mailing-lists.html
index 76edc5bc040..d9f560c6528 100644
--- a/mailing-lists.html
+++ b/mailing-lists.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:mailing-lists at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/plugin-management.html b/plugin-management.html
index c2bdc4e09c2..699f2704f80 100644
--- a/plugin-management.html
+++ b/plugin-management.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugin-management at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/plugins.html b/plugins.html
index 74837fd21d0..336b6c1710b 100644
--- a/plugins.html
+++ b/plugins.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:plugins at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/project-info.html b/project-info.html
index bddb6badb2d..bf89b7ee7ec 100644
--- a/project-info.html
+++ b/project-info.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-info at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/project-reports.html b/project-reports.html
index 35a4ce8ebab..a2d03709ce0 100644
--- a/project-reports.html
+++ b/project-reports.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-site-plugin:3.21.0:project-reports at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/scm.html b/scm.html
index 391240db75c..ae6704825d2 100644
--- a/scm.html
+++ b/scm.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:scm at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/summary.html b/summary.html
index dbc968b3e93..3c6b04dd592 100644
--- a/summary.html
+++ b/summary.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:summary at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/team.html b/team.html
index 65c59152b75..a612be7ba2b 100644
--- a/team.html
+++ b/team.html
@@ -2,7 +2,7 @@
 
 
 <!--
- | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-09-17
+ | Generated by Apache Maven Doxia Site Renderer 2.0.0 from org.apache.maven.plugins:maven-project-info-reports-plugin:3.9.0:team at 2026-09-18
  | Rendered using Apache Maven Fluido Skin 2.0.0-M9
 -->
 <html xmlns="http://www.w3.org/1999/xhtml" lang="en">
diff --git a/testapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html b/testapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
index bb925ecf9b0..113866986dc 100644
--- a/testapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
+++ b/testapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
@@ -126,161 +126,163 @@
 <span class="source-line-no">113</span><span id="line-113">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
 <span class="source-line-no">114</span><span id="line-114">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
 <span class="source-line-no">115</span><span id="line-115">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">116</span><span id="line-116">    assertEquals(1,</span>
-<span class="source-line-no">117</span><span id="line-117">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">118</span><span id="line-118">  }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">  @Test</span>
-<span class="source-line-no">121</span><span id="line-121">  public void testGetCompactBoundariesForMajorAllOld() throws Exception {</span>
-<span class="source-line-no">122</span><span id="line-122">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">123</span><span id="line-123">    Path file = preparePath();</span>
-<span class="source-line-no">124</span><span id="line-124">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">125</span><span id="line-125">    // The default cut off age is 10 years, so any of the min/max value there should get in the old</span>
-<span class="source-line-no">126</span><span id="line-126">    // tier</span>
-<span class="source-line-no">127</span><span id="line-127">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">128</span><span id="line-128">    files.add(createFile(file, 2, 3, 1024, 1));</span>
-<span class="source-line-no">129</span><span id="line-129">    assertEquals(2,</span>
-<span class="source-line-no">130</span><span id="line-130">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">131</span><span id="line-131">  }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133">  @Test</span>
-<span class="source-line-no">134</span><span id="line-134">  public void testGetCompactBoundariesForMajorOneOnEachSide() throws Exception {</span>
-<span class="source-line-no">135</span><span id="line-135">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">136</span><span id="line-136">    Path file = preparePath();</span>
-<span class="source-line-no">137</span><span id="line-137">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">138</span><span id="line-138">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">139</span><span id="line-139">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">140</span><span id="line-140">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">141</span><span id="line-141">    assertEquals(3,</span>
-<span class="source-line-no">142</span><span id="line-142">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">143</span><span id="line-143">  }</span>
-<span class="source-line-no">144</span><span id="line-144"></span>
-<span class="source-line-no">145</span><span id="line-145">  @Test</span>
-<span class="source-line-no">146</span><span id="line-146">  public void testGetCompactBoundariesForMajorOneCrossing() throws Exception {</span>
-<span class="source-line-no">147</span><span id="line-147">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">148</span><span id="line-148">    Path file = preparePath();</span>
-<span class="source-line-no">149</span><span id="line-149">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">150</span><span id="line-150">    files.add(createFile(file, 0, EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
-<span class="source-line-no">151</span><span id="line-151">    assertEquals(3,</span>
-<span class="source-line-no">152</span><span id="line-152">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">153</span><span id="line-153">  }</span>
-<span class="source-line-no">154</span><span id="line-154"></span>
-<span class="source-line-no">155</span><span id="line-155">  @FunctionalInterface</span>
-<span class="source-line-no">156</span><span id="line-156">  interface PolicyValidator&lt;T, U&gt; {</span>
-<span class="source-line-no">157</span><span id="line-157">    void accept(T t, U u) throws Exception;</span>
-<span class="source-line-no">158</span><span id="line-158">  }</span>
-<span class="source-line-no">159</span><span id="line-159"></span>
-<span class="source-line-no">160</span><span id="line-160">  private void testShouldPerformMajorCompaction(long min, long max, int numFiles,</span>
-<span class="source-line-no">161</span><span id="line-161">    PolicyValidator&lt;CustomDateTieredCompactionPolicy, ArrayList&lt;HStoreFile&gt;&gt; validation)</span>
-<span class="source-line-no">162</span><span id="line-162">    throws Exception {</span>
-<span class="source-line-no">163</span><span id="line-163">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">164</span><span id="line-164">    RegionInfo mockedRegionInfo = mockRegionInfo();</span>
-<span class="source-line-no">165</span><span id="line-165">    Path file = preparePath();</span>
-<span class="source-line-no">166</span><span id="line-166">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">167</span><span id="line-167">    ManualEnvironmentEdge timeMachine = new ManualEnvironmentEdge();</span>
-<span class="source-line-no">168</span><span id="line-168">    EnvironmentEdgeManager.injectEdge(timeMachine);</span>
-<span class="source-line-no">169</span><span id="line-169">    for (int i = 0; i &lt; numFiles; i++) {</span>
-<span class="source-line-no">170</span><span id="line-170">      MockHStoreFile mockedSFile = (MockHStoreFile) createFile(mockedRegionInfo, file, min, max,</span>
-<span class="source-line-no">171</span><span id="line-171">        1024, 0, HConstants.DEFAULT_MAJOR_COMPACTION_PERIOD);</span>
-<span class="source-line-no">172</span><span id="line-172">      mockedSFile.setIsMajor(true);</span>
-<span class="source-line-no">173</span><span id="line-173">      files.add(mockedSFile);</span>
-<span class="source-line-no">174</span><span id="line-174">    }</span>
-<span class="source-line-no">175</span><span id="line-175">    EnvironmentEdgeManager.reset();</span>
-<span class="source-line-no">176</span><span id="line-176">    validation.accept(policy, files);</span>
-<span class="source-line-no">177</span><span id="line-177">  }</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179">  @Test</span>
-<span class="source-line-no">180</span><span id="line-180">  public void testShouldPerformMajorCompactionOneFileCrossing() throws Exception {</span>
-<span class="source-line-no">181</span><span id="line-181">    long max = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">182</span><span id="line-182">    testShouldPerformMajorCompaction(0, max, 1,</span>
-<span class="source-line-no">183</span><span id="line-183">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">184</span><span id="line-184">  }</span>
-<span class="source-line-no">185</span><span id="line-185"></span>
-<span class="source-line-no">186</span><span id="line-186">  @Test</span>
-<span class="source-line-no">187</span><span id="line-187">  public void testShouldPerformMajorCompactionOneFileMinMaxLow() throws Exception {</span>
-<span class="source-line-no">188</span><span id="line-188">    testShouldPerformMajorCompaction(0, 1, 1,</span>
-<span class="source-line-no">189</span><span id="line-189">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">190</span><span id="line-190">  }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192">  @Test</span>
-<span class="source-line-no">193</span><span id="line-193">  public void testShouldPerformMajorCompactionOneFileMinMaxHigh() throws Exception {</span>
-<span class="source-line-no">194</span><span id="line-194">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">195</span><span id="line-195">    testShouldPerformMajorCompaction(currentTime, currentTime, 1,</span>
-<span class="source-line-no">196</span><span id="line-196">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">197</span><span id="line-197">  }</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199">  @Test</span>
-<span class="source-line-no">200</span><span id="line-200">  public void testShouldPerformMajorCompactionTwoFilesMinMaxHigh() throws Exception {</span>
-<span class="source-line-no">201</span><span id="line-201">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">202</span><span id="line-202">    testShouldPerformMajorCompaction(currentTime, currentTime, 2,</span>
-<span class="source-line-no">203</span><span id="line-203">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">204</span><span id="line-204">  }</span>
-<span class="source-line-no">205</span><span id="line-205"></span>
-<span class="source-line-no">206</span><span id="line-206">  @Test</span>
-<span class="source-line-no">207</span><span id="line-207">  public void testSelectMinorCompactionTwoFilesNoOld() throws Exception {</span>
-<span class="source-line-no">208</span><span id="line-208">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">209</span><span id="line-209">    Path file = preparePath();</span>
-<span class="source-line-no">210</span><span id="line-210">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">211</span><span id="line-211">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">212</span><span id="line-212">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">116</span><span id="line-116">    // getCompactBoundariesForMajor always offers [MIN_VALUE, cutOffTimestamp] now, regardless of</span>
+<span class="source-line-no">117</span><span id="line-117">    // the files being compacted, so the boundary count is always 2.</span>
+<span class="source-line-no">118</span><span id="line-118">    assertEquals(2,</span>
+<span class="source-line-no">119</span><span id="line-119">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">120</span><span id="line-120">  }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">  @Test</span>
+<span class="source-line-no">123</span><span id="line-123">  public void testGetCompactBoundariesForMajorAllOld() throws Exception {</span>
+<span class="source-line-no">124</span><span id="line-124">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">125</span><span id="line-125">    Path file = preparePath();</span>
+<span class="source-line-no">126</span><span id="line-126">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">127</span><span id="line-127">    // The default cut off age is 10 years, so any of the min/max value there should get in the old</span>
+<span class="source-line-no">128</span><span id="line-128">    // tier</span>
+<span class="source-line-no">129</span><span id="line-129">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">130</span><span id="line-130">    files.add(createFile(file, 2, 3, 1024, 1));</span>
+<span class="source-line-no">131</span><span id="line-131">    assertEquals(2,</span>
+<span class="source-line-no">132</span><span id="line-132">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">133</span><span id="line-133">  }</span>
+<span class="source-line-no">134</span><span id="line-134"></span>
+<span class="source-line-no">135</span><span id="line-135">  @Test</span>
+<span class="source-line-no">136</span><span id="line-136">  public void testGetCompactBoundariesForMajorOneOnEachSide() throws Exception {</span>
+<span class="source-line-no">137</span><span id="line-137">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">138</span><span id="line-138">    Path file = preparePath();</span>
+<span class="source-line-no">139</span><span id="line-139">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">140</span><span id="line-140">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">141</span><span id="line-141">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">142</span><span id="line-142">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">143</span><span id="line-143">    assertEquals(2,</span>
+<span class="source-line-no">144</span><span id="line-144">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">145</span><span id="line-145">  }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147">  @Test</span>
+<span class="source-line-no">148</span><span id="line-148">  public void testGetCompactBoundariesForMajorOneCrossing() throws Exception {</span>
+<span class="source-line-no">149</span><span id="line-149">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">150</span><span id="line-150">    Path file = preparePath();</span>
+<span class="source-line-no">151</span><span id="line-151">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">152</span><span id="line-152">    files.add(createFile(file, 0, EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">153</span><span id="line-153">    assertEquals(2,</span>
+<span class="source-line-no">154</span><span id="line-154">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">155</span><span id="line-155">  }</span>
+<span class="source-line-no">156</span><span id="line-156"></span>
+<span class="source-line-no">157</span><span id="line-157">  @FunctionalInterface</span>
+<span class="source-line-no">158</span><span id="line-158">  interface PolicyValidator&lt;T, U&gt; {</span>
+<span class="source-line-no">159</span><span id="line-159">    void accept(T t, U u) throws Exception;</span>
+<span class="source-line-no">160</span><span id="line-160">  }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162">  private void testShouldPerformMajorCompaction(long min, long max, int numFiles,</span>
+<span class="source-line-no">163</span><span id="line-163">    PolicyValidator&lt;CustomDateTieredCompactionPolicy, ArrayList&lt;HStoreFile&gt;&gt; validation)</span>
+<span class="source-line-no">164</span><span id="line-164">    throws Exception {</span>
+<span class="source-line-no">165</span><span id="line-165">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">166</span><span id="line-166">    RegionInfo mockedRegionInfo = mockRegionInfo();</span>
+<span class="source-line-no">167</span><span id="line-167">    Path file = preparePath();</span>
+<span class="source-line-no">168</span><span id="line-168">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">169</span><span id="line-169">    ManualEnvironmentEdge timeMachine = new ManualEnvironmentEdge();</span>
+<span class="source-line-no">170</span><span id="line-170">    EnvironmentEdgeManager.injectEdge(timeMachine);</span>
+<span class="source-line-no">171</span><span id="line-171">    for (int i = 0; i &lt; numFiles; i++) {</span>
+<span class="source-line-no">172</span><span id="line-172">      MockHStoreFile mockedSFile = (MockHStoreFile) createFile(mockedRegionInfo, file, min, max,</span>
+<span class="source-line-no">173</span><span id="line-173">        1024, 0, HConstants.DEFAULT_MAJOR_COMPACTION_PERIOD);</span>
+<span class="source-line-no">174</span><span id="line-174">      mockedSFile.setIsMajor(true);</span>
+<span class="source-line-no">175</span><span id="line-175">      files.add(mockedSFile);</span>
+<span class="source-line-no">176</span><span id="line-176">    }</span>
+<span class="source-line-no">177</span><span id="line-177">    EnvironmentEdgeManager.reset();</span>
+<span class="source-line-no">178</span><span id="line-178">    validation.accept(policy, files);</span>
+<span class="source-line-no">179</span><span id="line-179">  }</span>
+<span class="source-line-no">180</span><span id="line-180"></span>
+<span class="source-line-no">181</span><span id="line-181">  @Test</span>
+<span class="source-line-no">182</span><span id="line-182">  public void testShouldPerformMajorCompactionOneFileCrossing() throws Exception {</span>
+<span class="source-line-no">183</span><span id="line-183">    long max = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">184</span><span id="line-184">    testShouldPerformMajorCompaction(0, max, 1,</span>
+<span class="source-line-no">185</span><span id="line-185">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">186</span><span id="line-186">  }</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188">  @Test</span>
+<span class="source-line-no">189</span><span id="line-189">  public void testShouldPerformMajorCompactionOneFileMinMaxLow() throws Exception {</span>
+<span class="source-line-no">190</span><span id="line-190">    testShouldPerformMajorCompaction(0, 1, 1,</span>
+<span class="source-line-no">191</span><span id="line-191">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">192</span><span id="line-192">  }</span>
+<span class="source-line-no">193</span><span id="line-193"></span>
+<span class="source-line-no">194</span><span id="line-194">  @Test</span>
+<span class="source-line-no">195</span><span id="line-195">  public void testShouldPerformMajorCompactionOneFileMinMaxHigh() throws Exception {</span>
+<span class="source-line-no">196</span><span id="line-196">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">197</span><span id="line-197">    testShouldPerformMajorCompaction(currentTime, currentTime, 1,</span>
+<span class="source-line-no">198</span><span id="line-198">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">199</span><span id="line-199">  }</span>
+<span class="source-line-no">200</span><span id="line-200"></span>
+<span class="source-line-no">201</span><span id="line-201">  @Test</span>
+<span class="source-line-no">202</span><span id="line-202">  public void testShouldPerformMajorCompactionTwoFilesMinMaxHigh() throws Exception {</span>
+<span class="source-line-no">203</span><span id="line-203">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">204</span><span id="line-204">    testShouldPerformMajorCompaction(currentTime, currentTime, 2,</span>
+<span class="source-line-no">205</span><span id="line-205">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">206</span><span id="line-206">  }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208">  @Test</span>
+<span class="source-line-no">209</span><span id="line-209">  public void testSelectMinorCompactionTwoFilesNoOld() throws Exception {</span>
+<span class="source-line-no">210</span><span id="line-210">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">211</span><span id="line-211">    Path file = preparePath();</span>
+<span class="source-line-no">212</span><span id="line-212">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
 <span class="source-line-no">213</span><span id="line-213">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">214</span><span id="line-214">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">215</span><span id="line-215">    // Shouldn't do minor compaction, as minimum number of files</span>
-<span class="source-line-no">216</span><span id="line-216">    // for minor compactions is 3</span>
-<span class="source-line-no">217</span><span id="line-217">    assertEquals(0, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">218</span><span id="line-218">  }</span>
-<span class="source-line-no">219</span><span id="line-219"></span>
-<span class="source-line-no">220</span><span id="line-220">  @Test</span>
-<span class="source-line-no">221</span><span id="line-221">  public void testSelectMinorCompactionThreeFilesNoOld() throws Exception {</span>
-<span class="source-line-no">222</span><span id="line-222">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">223</span><span id="line-223">    Path file = preparePath();</span>
-<span class="source-line-no">224</span><span id="line-224">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">225</span><span id="line-225">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">226</span><span id="line-226">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">214</span><span id="line-214">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">215</span><span id="line-215">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">216</span><span id="line-216">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">217</span><span id="line-217">    // Shouldn't do minor compaction, as minimum number of files</span>
+<span class="source-line-no">218</span><span id="line-218">    // for minor compactions is 3</span>
+<span class="source-line-no">219</span><span id="line-219">    assertEquals(0, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">220</span><span id="line-220">  }</span>
+<span class="source-line-no">221</span><span id="line-221"></span>
+<span class="source-line-no">222</span><span id="line-222">  @Test</span>
+<span class="source-line-no">223</span><span id="line-223">  public void testSelectMinorCompactionThreeFilesNoOld() throws Exception {</span>
+<span class="source-line-no">224</span><span id="line-224">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">225</span><span id="line-225">    Path file = preparePath();</span>
+<span class="source-line-no">226</span><span id="line-226">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
 <span class="source-line-no">227</span><span id="line-227">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">228</span><span id="line-228">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">228</span><span id="line-228">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
 <span class="source-line-no">229</span><span id="line-229">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">230</span><span id="line-230">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">231</span><span id="line-231">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">232</span><span id="line-232">  }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234">  @Test</span>
-<span class="source-line-no">235</span><span id="line-235">  public void testSelectMinorCompactionThreeFilesAllOld() throws Exception {</span>
-<span class="source-line-no">236</span><span id="line-236">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">237</span><span id="line-237">    Path file = preparePath();</span>
-<span class="source-line-no">238</span><span id="line-238">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">239</span><span id="line-239">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">240</span><span id="line-240">    files.add(createFile(file, 1, 2, 1024, 1));</span>
-<span class="source-line-no">241</span><span id="line-241">    files.add(createFile(file, 3, 4, 1024, 2));</span>
-<span class="source-line-no">242</span><span id="line-242">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">243</span><span id="line-243">  }</span>
-<span class="source-line-no">244</span><span id="line-244"></span>
-<span class="source-line-no">245</span><span id="line-245">  @Test</span>
-<span class="source-line-no">246</span><span id="line-246">  public void testSelectMinorCompactionThreeFilesOneOldTwoNew() throws Exception {</span>
-<span class="source-line-no">247</span><span id="line-247">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">248</span><span id="line-248">    Path file = preparePath();</span>
-<span class="source-line-no">249</span><span id="line-249">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">250</span><span id="line-250">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">251</span><span id="line-251">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">252</span><span id="line-252">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">230</span><span id="line-230">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">231</span><span id="line-231">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">232</span><span id="line-232">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">233</span><span id="line-233">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">234</span><span id="line-234">  }</span>
+<span class="source-line-no">235</span><span id="line-235"></span>
+<span class="source-line-no">236</span><span id="line-236">  @Test</span>
+<span class="source-line-no">237</span><span id="line-237">  public void testSelectMinorCompactionThreeFilesAllOld() throws Exception {</span>
+<span class="source-line-no">238</span><span id="line-238">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">239</span><span id="line-239">    Path file = preparePath();</span>
+<span class="source-line-no">240</span><span id="line-240">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">241</span><span id="line-241">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">242</span><span id="line-242">    files.add(createFile(file, 1, 2, 1024, 1));</span>
+<span class="source-line-no">243</span><span id="line-243">    files.add(createFile(file, 3, 4, 1024, 2));</span>
+<span class="source-line-no">244</span><span id="line-244">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">245</span><span id="line-245">  }</span>
+<span class="source-line-no">246</span><span id="line-246"></span>
+<span class="source-line-no">247</span><span id="line-247">  @Test</span>
+<span class="source-line-no">248</span><span id="line-248">  public void testSelectMinorCompactionThreeFilesOneOldTwoNew() throws Exception {</span>
+<span class="source-line-no">249</span><span id="line-249">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">250</span><span id="line-250">    Path file = preparePath();</span>
+<span class="source-line-no">251</span><span id="line-251">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">252</span><span id="line-252">    files.add(createFile(file, 0, 1, 1024, 0));</span>
 <span class="source-line-no">253</span><span id="line-253">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">254</span><span id="line-254">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">255</span><span id="line-255">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">256</span><span id="line-256">  }</span>
-<span class="source-line-no">257</span><span id="line-257"></span>
-<span class="source-line-no">258</span><span id="line-258">  @Test</span>
-<span class="source-line-no">259</span><span id="line-259">  public void testSelectMinorCompactionThreeFilesTwoOldOneNew() throws Exception {</span>
-<span class="source-line-no">260</span><span id="line-260">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">261</span><span id="line-261">    Path file = preparePath();</span>
-<span class="source-line-no">262</span><span id="line-262">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">263</span><span id="line-263">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">264</span><span id="line-264">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">265</span><span id="line-265">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">254</span><span id="line-254">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">255</span><span id="line-255">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">256</span><span id="line-256">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">257</span><span id="line-257">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">258</span><span id="line-258">  }</span>
+<span class="source-line-no">259</span><span id="line-259"></span>
+<span class="source-line-no">260</span><span id="line-260">  @Test</span>
+<span class="source-line-no">261</span><span id="line-261">  public void testSelectMinorCompactionThreeFilesTwoOldOneNew() throws Exception {</span>
+<span class="source-line-no">262</span><span id="line-262">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">263</span><span id="line-263">    Path file = preparePath();</span>
+<span class="source-line-no">264</span><span id="line-264">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">265</span><span id="line-265">    files.add(createFile(file, 0, 1, 1024, 0));</span>
 <span class="source-line-no">266</span><span id="line-266">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">267</span><span id="line-267">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">268</span><span id="line-268">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">269</span><span id="line-269">  }</span>
-<span class="source-line-no">270</span><span id="line-270">}</span>
+<span class="source-line-no">267</span><span id="line-267">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">268</span><span id="line-268">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">269</span><span id="line-269">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">270</span><span id="line-270">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">271</span><span id="line-271">  }</span>
+<span class="source-line-no">272</span><span id="line-272">}</span>
 
 
 
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html
index a49347aef96..8b7be18b2b5 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html
@@ -83,7 +83,7 @@ loadScripts(document, 'script');</script>
 </dl>
 <hr>
 <div class="type-signature"><span class="annotations"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/FunctionalInterface.html" title="class or interface in java.lang" class="external-link">@FunctionalInterface</a>
-</span><span class="modifiers">static interface </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-155">TestCustomCellTieredCompactionPolicy.PolicyValidator</a>&lt;T,<wbr>U&gt;</span></div>
+</span><span class="modifiers">static interface </span><span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-157">TestCustomCellTieredCompactionPolicy.PolicyValidator</a>&lt;T,<wbr>U&gt;</span></div>
 </section>
 <section class="summary">
 <ul class="summary-list">
@@ -119,7 +119,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="accept(T,U)">
 <h3 id="accept(java.lang.Object,java.lang.Object)">accept</h3>
-<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html#line-157">accept</a></span><wbr><span class="parameters">(<a href="TestCustomCellTieredCompactionPolicy.PolicyValidator.html" title="type parameter in TestCustomCellTieredCompactionPolicy.PolicyValidator">T</a>&nbsp;t,
+<div class="member-signature"><span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html#line-159">accept</a></span><wbr><span class="parameters">(<a href="TestCustomCellTieredCompactionPolicy.PolicyValidator.html" title="type parameter in TestCustomCellTieredCompactionPolicy.PolicyValidator">T</a>&nbsp;t,
  <a href="TestCustomCellTieredCompactionPolicy.PolicyValidator.html" title="type parameter in TestCustomCellTieredCompactionPolicy.PolicyValidator">U</a>&nbsp;u)</span>
      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
index 027eadad2bd..87d0ec46cab 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
@@ -351,7 +351,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testGetCompactBoundariesForMajorAllOld()">
 <h3>testGetCompactBoundariesForMajorAllOld</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-120">testGetCompactBoundariesForMajorAllOld</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-122">testGetCompactBoundariesForMajorAllOld</a></span>()
                                             throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -363,7 +363,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testGetCompactBoundariesForMajorOneOnEachSide()">
 <h3>testGetCompactBoundariesForMajorOneOnEachSide</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-133">testGetCompactBoundariesForMajorOneOnEachSide</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-135">testGetCompactBoundariesForMajorOneOnEachSide</a></span>()
                                                    throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -375,7 +375,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testGetCompactBoundariesForMajorOneCrossing()">
 <h3>testGetCompactBoundariesForMajorOneCrossing</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-145">testGetCompactBoundariesForMajorOneCrossing</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-147">testGetCompactBoundariesForMajorOneCrossing</a></span>()
                                                  throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -386,7 +386,7 @@ loadScripts(document, 'script');</script>
 <li>
 <section class="detail" id="testShouldPerformMajorCompaction(long,long,int,org.apache.hadoop.hbase.regionserver.TestCustomCellTieredCompactionPolicy.PolicyValidator)">
 <h3>testShouldPerformMajorCompaction</h3>
-<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-160">testShouldPerformMajorCompaction</a></span><wbr><span class="parameters">(long&nbsp;min,
+<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-162">testShouldPerformMajorCompaction</a></span><wbr><span class="parameters">(long&nbsp;min,
  long&nbsp;max,
  int&nbsp;numFiles,
  <a href="TestCustomCellTieredCompactionPolicy.PolicyValidator.html" title="interface in org.apache.hadoop.hbase.regionserver">TestCustomCellTieredCompactionPolicy.PolicyValidator</a>&lt;org.apache.hadoop.hbase.regionserver.compactions.CustomDateTieredCompactionPolicy,<wbr><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/ArrayList.html" title="class or interface in java.util" class="external-link">ArrayList</a>&lt;org.apache.hadoop.hbase.regionserver.HStore [...]
@@ -401,7 +401,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testShouldPerformMajorCompactionOneFileCrossing()">
 <h3>testShouldPerformMajorCompactionOneFileCrossing</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-179">testShouldPerformMajorCompactionOneFileCrossing</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-181">testShouldPerformMajorCompactionOneFileCrossing</a></span>()
                                                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -413,7 +413,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testShouldPerformMajorCompactionOneFileMinMaxLow()">
 <h3>testShouldPerformMajorCompactionOneFileMinMaxLow</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-186">testShouldPerformMajorCompactionOneFileMinMaxLow</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-188">testShouldPerformMajorCompactionOneFileMinMaxLow</a></span>()
                                                       throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -425,7 +425,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testShouldPerformMajorCompactionOneFileMinMaxHigh()">
 <h3>testShouldPerformMajorCompactionOneFileMinMaxHigh</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-192">testShouldPerformMajorCompactionOneFileMinMaxHigh</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-194">testShouldPerformMajorCompactionOneFileMinMaxHigh</a></span>()
                                                        throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -437,7 +437,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testShouldPerformMajorCompactionTwoFilesMinMaxHigh()">
 <h3>testShouldPerformMajorCompactionTwoFilesMinMaxHigh</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-199">testShouldPerformMajorCompactionTwoFilesMinMaxHigh</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-201">testShouldPerformMajorCompactionTwoFilesMinMaxHigh</a></span>()
                                                         throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -449,7 +449,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testSelectMinorCompactionTwoFilesNoOld()">
 <h3>testSelectMinorCompactionTwoFilesNoOld</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-206">testSelectMinorCompactionTwoFilesNoOld</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-208">testSelectMinorCompactionTwoFilesNoOld</a></span>()
                                             throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -461,7 +461,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testSelectMinorCompactionThreeFilesNoOld()">
 <h3>testSelectMinorCompactionThreeFilesNoOld</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-220">testSelectMinorCompactionThreeFilesNoOld</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-222">testSelectMinorCompactionThreeFilesNoOld</a></span>()
                                               throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -473,7 +473,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testSelectMinorCompactionThreeFilesAllOld()">
 <h3>testSelectMinorCompactionThreeFilesAllOld</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-234">testSelectMinorCompactionThreeFilesAllOld</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-236">testSelectMinorCompactionThreeFilesAllOld</a></span>()
                                                throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -485,7 +485,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testSelectMinorCompactionThreeFilesOneOldTwoNew()">
 <h3>testSelectMinorCompactionThreeFilesOneOldTwoNew</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-245">testSelectMinorCompactionThreeFilesOneOldTwoNew</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-247">testSelectMinorCompactionThreeFilesOneOldTwoNew</a></span>()
                                                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -497,7 +497,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testSelectMinorCompactionThreeFilesTwoOldOneNew()">
 <h3>testSelectMinorCompactionThreeFilesTwoOldOneNew</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-258">testSelectMinorCompactionThreeFilesTwoOldOneNew</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html#line-260">testSelectMinorCompactionThreeFilesTwoOldOneNew</a></span>()
                                                      throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
diff --git a/testdevapidocs/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html b/testdevapidocs/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html
index 3776f7f06e2..bfa837a9a77 100644
--- a/testdevapidocs/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html
+++ b/testdevapidocs/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html
@@ -240,7 +240,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testCustomCellTieredCompactorWithRowKeyDateTieringValue()">
 <h3>testCustomCellTieredCompactorWithRowKeyDateTieringValue</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html#line-155">testCustomCellTieredCompactorWithRowKeyDateTieringValue</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html#line-152">testCustomCellTieredCompactorWithRowKeyDateTieringValue</a></span>()
                                                              throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
@@ -252,7 +252,7 @@ loadScripts(document, 'script');</script>
 <section class="detail" id="testShouldPerformMajorCompactionWhenTimeRangeMetadataIsNull()">
 <h3>testShouldPerformMajorCompactionWhenTimeRangeMetadataIsNull</h3>
 <div class="member-signature"><span class="annotations">@Test
-</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html#line-326">testShouldPerformMajorCompactionWhenTimeRangeMetadataIsNull</a></span>()
+</span><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html#line-321">testShouldPerformMajorCompactionWhenTimeRangeMetadataIsNull</a></span>()
                                                                  throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Exception.html" title="class or interface in java.lang" class="external-link">Exception</a></span></div>
 <dl class="notes">
 <dt>Throws:</dt>
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html
index 3d0dc477024..6dd3aa6205f 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.PolicyValidator.html
@@ -126,161 +126,163 @@
 <span class="source-line-no">113</span><span id="line-113">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
 <span class="source-line-no">114</span><span id="line-114">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
 <span class="source-line-no">115</span><span id="line-115">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">116</span><span id="line-116">    assertEquals(1,</span>
-<span class="source-line-no">117</span><span id="line-117">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">118</span><span id="line-118">  }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">  @Test</span>
-<span class="source-line-no">121</span><span id="line-121">  public void testGetCompactBoundariesForMajorAllOld() throws Exception {</span>
-<span class="source-line-no">122</span><span id="line-122">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">123</span><span id="line-123">    Path file = preparePath();</span>
-<span class="source-line-no">124</span><span id="line-124">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">125</span><span id="line-125">    // The default cut off age is 10 years, so any of the min/max value there should get in the old</span>
-<span class="source-line-no">126</span><span id="line-126">    // tier</span>
-<span class="source-line-no">127</span><span id="line-127">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">128</span><span id="line-128">    files.add(createFile(file, 2, 3, 1024, 1));</span>
-<span class="source-line-no">129</span><span id="line-129">    assertEquals(2,</span>
-<span class="source-line-no">130</span><span id="line-130">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">131</span><span id="line-131">  }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133">  @Test</span>
-<span class="source-line-no">134</span><span id="line-134">  public void testGetCompactBoundariesForMajorOneOnEachSide() throws Exception {</span>
-<span class="source-line-no">135</span><span id="line-135">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">136</span><span id="line-136">    Path file = preparePath();</span>
-<span class="source-line-no">137</span><span id="line-137">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">138</span><span id="line-138">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">139</span><span id="line-139">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">140</span><span id="line-140">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">141</span><span id="line-141">    assertEquals(3,</span>
-<span class="source-line-no">142</span><span id="line-142">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">143</span><span id="line-143">  }</span>
-<span class="source-line-no">144</span><span id="line-144"></span>
-<span class="source-line-no">145</span><span id="line-145">  @Test</span>
-<span class="source-line-no">146</span><span id="line-146">  public void testGetCompactBoundariesForMajorOneCrossing() throws Exception {</span>
-<span class="source-line-no">147</span><span id="line-147">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">148</span><span id="line-148">    Path file = preparePath();</span>
-<span class="source-line-no">149</span><span id="line-149">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">150</span><span id="line-150">    files.add(createFile(file, 0, EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
-<span class="source-line-no">151</span><span id="line-151">    assertEquals(3,</span>
-<span class="source-line-no">152</span><span id="line-152">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">153</span><span id="line-153">  }</span>
-<span class="source-line-no">154</span><span id="line-154"></span>
-<span class="source-line-no">155</span><span id="line-155">  @FunctionalInterface</span>
-<span class="source-line-no">156</span><span id="line-156">  interface PolicyValidator&lt;T, U&gt; {</span>
-<span class="source-line-no">157</span><span id="line-157">    void accept(T t, U u) throws Exception;</span>
-<span class="source-line-no">158</span><span id="line-158">  }</span>
-<span class="source-line-no">159</span><span id="line-159"></span>
-<span class="source-line-no">160</span><span id="line-160">  private void testShouldPerformMajorCompaction(long min, long max, int numFiles,</span>
-<span class="source-line-no">161</span><span id="line-161">    PolicyValidator&lt;CustomDateTieredCompactionPolicy, ArrayList&lt;HStoreFile&gt;&gt; validation)</span>
-<span class="source-line-no">162</span><span id="line-162">    throws Exception {</span>
-<span class="source-line-no">163</span><span id="line-163">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">164</span><span id="line-164">    RegionInfo mockedRegionInfo = mockRegionInfo();</span>
-<span class="source-line-no">165</span><span id="line-165">    Path file = preparePath();</span>
-<span class="source-line-no">166</span><span id="line-166">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">167</span><span id="line-167">    ManualEnvironmentEdge timeMachine = new ManualEnvironmentEdge();</span>
-<span class="source-line-no">168</span><span id="line-168">    EnvironmentEdgeManager.injectEdge(timeMachine);</span>
-<span class="source-line-no">169</span><span id="line-169">    for (int i = 0; i &lt; numFiles; i++) {</span>
-<span class="source-line-no">170</span><span id="line-170">      MockHStoreFile mockedSFile = (MockHStoreFile) createFile(mockedRegionInfo, file, min, max,</span>
-<span class="source-line-no">171</span><span id="line-171">        1024, 0, HConstants.DEFAULT_MAJOR_COMPACTION_PERIOD);</span>
-<span class="source-line-no">172</span><span id="line-172">      mockedSFile.setIsMajor(true);</span>
-<span class="source-line-no">173</span><span id="line-173">      files.add(mockedSFile);</span>
-<span class="source-line-no">174</span><span id="line-174">    }</span>
-<span class="source-line-no">175</span><span id="line-175">    EnvironmentEdgeManager.reset();</span>
-<span class="source-line-no">176</span><span id="line-176">    validation.accept(policy, files);</span>
-<span class="source-line-no">177</span><span id="line-177">  }</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179">  @Test</span>
-<span class="source-line-no">180</span><span id="line-180">  public void testShouldPerformMajorCompactionOneFileCrossing() throws Exception {</span>
-<span class="source-line-no">181</span><span id="line-181">    long max = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">182</span><span id="line-182">    testShouldPerformMajorCompaction(0, max, 1,</span>
-<span class="source-line-no">183</span><span id="line-183">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">184</span><span id="line-184">  }</span>
-<span class="source-line-no">185</span><span id="line-185"></span>
-<span class="source-line-no">186</span><span id="line-186">  @Test</span>
-<span class="source-line-no">187</span><span id="line-187">  public void testShouldPerformMajorCompactionOneFileMinMaxLow() throws Exception {</span>
-<span class="source-line-no">188</span><span id="line-188">    testShouldPerformMajorCompaction(0, 1, 1,</span>
-<span class="source-line-no">189</span><span id="line-189">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">190</span><span id="line-190">  }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192">  @Test</span>
-<span class="source-line-no">193</span><span id="line-193">  public void testShouldPerformMajorCompactionOneFileMinMaxHigh() throws Exception {</span>
-<span class="source-line-no">194</span><span id="line-194">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">195</span><span id="line-195">    testShouldPerformMajorCompaction(currentTime, currentTime, 1,</span>
-<span class="source-line-no">196</span><span id="line-196">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">197</span><span id="line-197">  }</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199">  @Test</span>
-<span class="source-line-no">200</span><span id="line-200">  public void testShouldPerformMajorCompactionTwoFilesMinMaxHigh() throws Exception {</span>
-<span class="source-line-no">201</span><span id="line-201">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">202</span><span id="line-202">    testShouldPerformMajorCompaction(currentTime, currentTime, 2,</span>
-<span class="source-line-no">203</span><span id="line-203">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">204</span><span id="line-204">  }</span>
-<span class="source-line-no">205</span><span id="line-205"></span>
-<span class="source-line-no">206</span><span id="line-206">  @Test</span>
-<span class="source-line-no">207</span><span id="line-207">  public void testSelectMinorCompactionTwoFilesNoOld() throws Exception {</span>
-<span class="source-line-no">208</span><span id="line-208">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">209</span><span id="line-209">    Path file = preparePath();</span>
-<span class="source-line-no">210</span><span id="line-210">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">211</span><span id="line-211">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">212</span><span id="line-212">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">116</span><span id="line-116">    // getCompactBoundariesForMajor always offers [MIN_VALUE, cutOffTimestamp] now, regardless of</span>
+<span class="source-line-no">117</span><span id="line-117">    // the files being compacted, so the boundary count is always 2.</span>
+<span class="source-line-no">118</span><span id="line-118">    assertEquals(2,</span>
+<span class="source-line-no">119</span><span id="line-119">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">120</span><span id="line-120">  }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">  @Test</span>
+<span class="source-line-no">123</span><span id="line-123">  public void testGetCompactBoundariesForMajorAllOld() throws Exception {</span>
+<span class="source-line-no">124</span><span id="line-124">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">125</span><span id="line-125">    Path file = preparePath();</span>
+<span class="source-line-no">126</span><span id="line-126">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">127</span><span id="line-127">    // The default cut off age is 10 years, so any of the min/max value there should get in the old</span>
+<span class="source-line-no">128</span><span id="line-128">    // tier</span>
+<span class="source-line-no">129</span><span id="line-129">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">130</span><span id="line-130">    files.add(createFile(file, 2, 3, 1024, 1));</span>
+<span class="source-line-no">131</span><span id="line-131">    assertEquals(2,</span>
+<span class="source-line-no">132</span><span id="line-132">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">133</span><span id="line-133">  }</span>
+<span class="source-line-no">134</span><span id="line-134"></span>
+<span class="source-line-no">135</span><span id="line-135">  @Test</span>
+<span class="source-line-no">136</span><span id="line-136">  public void testGetCompactBoundariesForMajorOneOnEachSide() throws Exception {</span>
+<span class="source-line-no">137</span><span id="line-137">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">138</span><span id="line-138">    Path file = preparePath();</span>
+<span class="source-line-no">139</span><span id="line-139">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">140</span><span id="line-140">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">141</span><span id="line-141">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">142</span><span id="line-142">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">143</span><span id="line-143">    assertEquals(2,</span>
+<span class="source-line-no">144</span><span id="line-144">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">145</span><span id="line-145">  }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147">  @Test</span>
+<span class="source-line-no">148</span><span id="line-148">  public void testGetCompactBoundariesForMajorOneCrossing() throws Exception {</span>
+<span class="source-line-no">149</span><span id="line-149">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">150</span><span id="line-150">    Path file = preparePath();</span>
+<span class="source-line-no">151</span><span id="line-151">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">152</span><span id="line-152">    files.add(createFile(file, 0, EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">153</span><span id="line-153">    assertEquals(2,</span>
+<span class="source-line-no">154</span><span id="line-154">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">155</span><span id="line-155">  }</span>
+<span class="source-line-no">156</span><span id="line-156"></span>
+<span class="source-line-no">157</span><span id="line-157">  @FunctionalInterface</span>
+<span class="source-line-no">158</span><span id="line-158">  interface PolicyValidator&lt;T, U&gt; {</span>
+<span class="source-line-no">159</span><span id="line-159">    void accept(T t, U u) throws Exception;</span>
+<span class="source-line-no">160</span><span id="line-160">  }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162">  private void testShouldPerformMajorCompaction(long min, long max, int numFiles,</span>
+<span class="source-line-no">163</span><span id="line-163">    PolicyValidator&lt;CustomDateTieredCompactionPolicy, ArrayList&lt;HStoreFile&gt;&gt; validation)</span>
+<span class="source-line-no">164</span><span id="line-164">    throws Exception {</span>
+<span class="source-line-no">165</span><span id="line-165">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">166</span><span id="line-166">    RegionInfo mockedRegionInfo = mockRegionInfo();</span>
+<span class="source-line-no">167</span><span id="line-167">    Path file = preparePath();</span>
+<span class="source-line-no">168</span><span id="line-168">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">169</span><span id="line-169">    ManualEnvironmentEdge timeMachine = new ManualEnvironmentEdge();</span>
+<span class="source-line-no">170</span><span id="line-170">    EnvironmentEdgeManager.injectEdge(timeMachine);</span>
+<span class="source-line-no">171</span><span id="line-171">    for (int i = 0; i &lt; numFiles; i++) {</span>
+<span class="source-line-no">172</span><span id="line-172">      MockHStoreFile mockedSFile = (MockHStoreFile) createFile(mockedRegionInfo, file, min, max,</span>
+<span class="source-line-no">173</span><span id="line-173">        1024, 0, HConstants.DEFAULT_MAJOR_COMPACTION_PERIOD);</span>
+<span class="source-line-no">174</span><span id="line-174">      mockedSFile.setIsMajor(true);</span>
+<span class="source-line-no">175</span><span id="line-175">      files.add(mockedSFile);</span>
+<span class="source-line-no">176</span><span id="line-176">    }</span>
+<span class="source-line-no">177</span><span id="line-177">    EnvironmentEdgeManager.reset();</span>
+<span class="source-line-no">178</span><span id="line-178">    validation.accept(policy, files);</span>
+<span class="source-line-no">179</span><span id="line-179">  }</span>
+<span class="source-line-no">180</span><span id="line-180"></span>
+<span class="source-line-no">181</span><span id="line-181">  @Test</span>
+<span class="source-line-no">182</span><span id="line-182">  public void testShouldPerformMajorCompactionOneFileCrossing() throws Exception {</span>
+<span class="source-line-no">183</span><span id="line-183">    long max = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">184</span><span id="line-184">    testShouldPerformMajorCompaction(0, max, 1,</span>
+<span class="source-line-no">185</span><span id="line-185">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">186</span><span id="line-186">  }</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188">  @Test</span>
+<span class="source-line-no">189</span><span id="line-189">  public void testShouldPerformMajorCompactionOneFileMinMaxLow() throws Exception {</span>
+<span class="source-line-no">190</span><span id="line-190">    testShouldPerformMajorCompaction(0, 1, 1,</span>
+<span class="source-line-no">191</span><span id="line-191">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">192</span><span id="line-192">  }</span>
+<span class="source-line-no">193</span><span id="line-193"></span>
+<span class="source-line-no">194</span><span id="line-194">  @Test</span>
+<span class="source-line-no">195</span><span id="line-195">  public void testShouldPerformMajorCompactionOneFileMinMaxHigh() throws Exception {</span>
+<span class="source-line-no">196</span><span id="line-196">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">197</span><span id="line-197">    testShouldPerformMajorCompaction(currentTime, currentTime, 1,</span>
+<span class="source-line-no">198</span><span id="line-198">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">199</span><span id="line-199">  }</span>
+<span class="source-line-no">200</span><span id="line-200"></span>
+<span class="source-line-no">201</span><span id="line-201">  @Test</span>
+<span class="source-line-no">202</span><span id="line-202">  public void testShouldPerformMajorCompactionTwoFilesMinMaxHigh() throws Exception {</span>
+<span class="source-line-no">203</span><span id="line-203">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">204</span><span id="line-204">    testShouldPerformMajorCompaction(currentTime, currentTime, 2,</span>
+<span class="source-line-no">205</span><span id="line-205">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">206</span><span id="line-206">  }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208">  @Test</span>
+<span class="source-line-no">209</span><span id="line-209">  public void testSelectMinorCompactionTwoFilesNoOld() throws Exception {</span>
+<span class="source-line-no">210</span><span id="line-210">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">211</span><span id="line-211">    Path file = preparePath();</span>
+<span class="source-line-no">212</span><span id="line-212">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
 <span class="source-line-no">213</span><span id="line-213">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">214</span><span id="line-214">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">215</span><span id="line-215">    // Shouldn't do minor compaction, as minimum number of files</span>
-<span class="source-line-no">216</span><span id="line-216">    // for minor compactions is 3</span>
-<span class="source-line-no">217</span><span id="line-217">    assertEquals(0, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">218</span><span id="line-218">  }</span>
-<span class="source-line-no">219</span><span id="line-219"></span>
-<span class="source-line-no">220</span><span id="line-220">  @Test</span>
-<span class="source-line-no">221</span><span id="line-221">  public void testSelectMinorCompactionThreeFilesNoOld() throws Exception {</span>
-<span class="source-line-no">222</span><span id="line-222">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">223</span><span id="line-223">    Path file = preparePath();</span>
-<span class="source-line-no">224</span><span id="line-224">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">225</span><span id="line-225">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">226</span><span id="line-226">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">214</span><span id="line-214">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">215</span><span id="line-215">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">216</span><span id="line-216">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">217</span><span id="line-217">    // Shouldn't do minor compaction, as minimum number of files</span>
+<span class="source-line-no">218</span><span id="line-218">    // for minor compactions is 3</span>
+<span class="source-line-no">219</span><span id="line-219">    assertEquals(0, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">220</span><span id="line-220">  }</span>
+<span class="source-line-no">221</span><span id="line-221"></span>
+<span class="source-line-no">222</span><span id="line-222">  @Test</span>
+<span class="source-line-no">223</span><span id="line-223">  public void testSelectMinorCompactionThreeFilesNoOld() throws Exception {</span>
+<span class="source-line-no">224</span><span id="line-224">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">225</span><span id="line-225">    Path file = preparePath();</span>
+<span class="source-line-no">226</span><span id="line-226">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
 <span class="source-line-no">227</span><span id="line-227">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">228</span><span id="line-228">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">228</span><span id="line-228">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
 <span class="source-line-no">229</span><span id="line-229">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">230</span><span id="line-230">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">231</span><span id="line-231">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">232</span><span id="line-232">  }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234">  @Test</span>
-<span class="source-line-no">235</span><span id="line-235">  public void testSelectMinorCompactionThreeFilesAllOld() throws Exception {</span>
-<span class="source-line-no">236</span><span id="line-236">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">237</span><span id="line-237">    Path file = preparePath();</span>
-<span class="source-line-no">238</span><span id="line-238">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">239</span><span id="line-239">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">240</span><span id="line-240">    files.add(createFile(file, 1, 2, 1024, 1));</span>
-<span class="source-line-no">241</span><span id="line-241">    files.add(createFile(file, 3, 4, 1024, 2));</span>
-<span class="source-line-no">242</span><span id="line-242">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">243</span><span id="line-243">  }</span>
-<span class="source-line-no">244</span><span id="line-244"></span>
-<span class="source-line-no">245</span><span id="line-245">  @Test</span>
-<span class="source-line-no">246</span><span id="line-246">  public void testSelectMinorCompactionThreeFilesOneOldTwoNew() throws Exception {</span>
-<span class="source-line-no">247</span><span id="line-247">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">248</span><span id="line-248">    Path file = preparePath();</span>
-<span class="source-line-no">249</span><span id="line-249">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">250</span><span id="line-250">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">251</span><span id="line-251">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">252</span><span id="line-252">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">230</span><span id="line-230">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">231</span><span id="line-231">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">232</span><span id="line-232">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">233</span><span id="line-233">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">234</span><span id="line-234">  }</span>
+<span class="source-line-no">235</span><span id="line-235"></span>
+<span class="source-line-no">236</span><span id="line-236">  @Test</span>
+<span class="source-line-no">237</span><span id="line-237">  public void testSelectMinorCompactionThreeFilesAllOld() throws Exception {</span>
+<span class="source-line-no">238</span><span id="line-238">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">239</span><span id="line-239">    Path file = preparePath();</span>
+<span class="source-line-no">240</span><span id="line-240">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">241</span><span id="line-241">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">242</span><span id="line-242">    files.add(createFile(file, 1, 2, 1024, 1));</span>
+<span class="source-line-no">243</span><span id="line-243">    files.add(createFile(file, 3, 4, 1024, 2));</span>
+<span class="source-line-no">244</span><span id="line-244">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">245</span><span id="line-245">  }</span>
+<span class="source-line-no">246</span><span id="line-246"></span>
+<span class="source-line-no">247</span><span id="line-247">  @Test</span>
+<span class="source-line-no">248</span><span id="line-248">  public void testSelectMinorCompactionThreeFilesOneOldTwoNew() throws Exception {</span>
+<span class="source-line-no">249</span><span id="line-249">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">250</span><span id="line-250">    Path file = preparePath();</span>
+<span class="source-line-no">251</span><span id="line-251">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">252</span><span id="line-252">    files.add(createFile(file, 0, 1, 1024, 0));</span>
 <span class="source-line-no">253</span><span id="line-253">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">254</span><span id="line-254">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">255</span><span id="line-255">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">256</span><span id="line-256">  }</span>
-<span class="source-line-no">257</span><span id="line-257"></span>
-<span class="source-line-no">258</span><span id="line-258">  @Test</span>
-<span class="source-line-no">259</span><span id="line-259">  public void testSelectMinorCompactionThreeFilesTwoOldOneNew() throws Exception {</span>
-<span class="source-line-no">260</span><span id="line-260">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">261</span><span id="line-261">    Path file = preparePath();</span>
-<span class="source-line-no">262</span><span id="line-262">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">263</span><span id="line-263">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">264</span><span id="line-264">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">265</span><span id="line-265">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">254</span><span id="line-254">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">255</span><span id="line-255">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">256</span><span id="line-256">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">257</span><span id="line-257">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">258</span><span id="line-258">  }</span>
+<span class="source-line-no">259</span><span id="line-259"></span>
+<span class="source-line-no">260</span><span id="line-260">  @Test</span>
+<span class="source-line-no">261</span><span id="line-261">  public void testSelectMinorCompactionThreeFilesTwoOldOneNew() throws Exception {</span>
+<span class="source-line-no">262</span><span id="line-262">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">263</span><span id="line-263">    Path file = preparePath();</span>
+<span class="source-line-no">264</span><span id="line-264">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">265</span><span id="line-265">    files.add(createFile(file, 0, 1, 1024, 0));</span>
 <span class="source-line-no">266</span><span id="line-266">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">267</span><span id="line-267">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">268</span><span id="line-268">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">269</span><span id="line-269">  }</span>
-<span class="source-line-no">270</span><span id="line-270">}</span>
+<span class="source-line-no">267</span><span id="line-267">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">268</span><span id="line-268">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">269</span><span id="line-269">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">270</span><span id="line-270">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">271</span><span id="line-271">  }</span>
+<span class="source-line-no">272</span><span id="line-272">}</span>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
index bb925ecf9b0..113866986dc 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/TestCustomCellTieredCompactionPolicy.html
@@ -126,161 +126,163 @@
 <span class="source-line-no">113</span><span id="line-113">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
 <span class="source-line-no">114</span><span id="line-114">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
 <span class="source-line-no">115</span><span id="line-115">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">116</span><span id="line-116">    assertEquals(1,</span>
-<span class="source-line-no">117</span><span id="line-117">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">118</span><span id="line-118">  }</span>
-<span class="source-line-no">119</span><span id="line-119"></span>
-<span class="source-line-no">120</span><span id="line-120">  @Test</span>
-<span class="source-line-no">121</span><span id="line-121">  public void testGetCompactBoundariesForMajorAllOld() throws Exception {</span>
-<span class="source-line-no">122</span><span id="line-122">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">123</span><span id="line-123">    Path file = preparePath();</span>
-<span class="source-line-no">124</span><span id="line-124">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">125</span><span id="line-125">    // The default cut off age is 10 years, so any of the min/max value there should get in the old</span>
-<span class="source-line-no">126</span><span id="line-126">    // tier</span>
-<span class="source-line-no">127</span><span id="line-127">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">128</span><span id="line-128">    files.add(createFile(file, 2, 3, 1024, 1));</span>
-<span class="source-line-no">129</span><span id="line-129">    assertEquals(2,</span>
-<span class="source-line-no">130</span><span id="line-130">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">131</span><span id="line-131">  }</span>
-<span class="source-line-no">132</span><span id="line-132"></span>
-<span class="source-line-no">133</span><span id="line-133">  @Test</span>
-<span class="source-line-no">134</span><span id="line-134">  public void testGetCompactBoundariesForMajorOneOnEachSide() throws Exception {</span>
-<span class="source-line-no">135</span><span id="line-135">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">136</span><span id="line-136">    Path file = preparePath();</span>
-<span class="source-line-no">137</span><span id="line-137">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">138</span><span id="line-138">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">139</span><span id="line-139">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">140</span><span id="line-140">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">141</span><span id="line-141">    assertEquals(3,</span>
-<span class="source-line-no">142</span><span id="line-142">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">143</span><span id="line-143">  }</span>
-<span class="source-line-no">144</span><span id="line-144"></span>
-<span class="source-line-no">145</span><span id="line-145">  @Test</span>
-<span class="source-line-no">146</span><span id="line-146">  public void testGetCompactBoundariesForMajorOneCrossing() throws Exception {</span>
-<span class="source-line-no">147</span><span id="line-147">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">148</span><span id="line-148">    Path file = preparePath();</span>
-<span class="source-line-no">149</span><span id="line-149">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">150</span><span id="line-150">    files.add(createFile(file, 0, EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
-<span class="source-line-no">151</span><span id="line-151">    assertEquals(3,</span>
-<span class="source-line-no">152</span><span id="line-152">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
-<span class="source-line-no">153</span><span id="line-153">  }</span>
-<span class="source-line-no">154</span><span id="line-154"></span>
-<span class="source-line-no">155</span><span id="line-155">  @FunctionalInterface</span>
-<span class="source-line-no">156</span><span id="line-156">  interface PolicyValidator&lt;T, U&gt; {</span>
-<span class="source-line-no">157</span><span id="line-157">    void accept(T t, U u) throws Exception;</span>
-<span class="source-line-no">158</span><span id="line-158">  }</span>
-<span class="source-line-no">159</span><span id="line-159"></span>
-<span class="source-line-no">160</span><span id="line-160">  private void testShouldPerformMajorCompaction(long min, long max, int numFiles,</span>
-<span class="source-line-no">161</span><span id="line-161">    PolicyValidator&lt;CustomDateTieredCompactionPolicy, ArrayList&lt;HStoreFile&gt;&gt; validation)</span>
-<span class="source-line-no">162</span><span id="line-162">    throws Exception {</span>
-<span class="source-line-no">163</span><span id="line-163">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">164</span><span id="line-164">    RegionInfo mockedRegionInfo = mockRegionInfo();</span>
-<span class="source-line-no">165</span><span id="line-165">    Path file = preparePath();</span>
-<span class="source-line-no">166</span><span id="line-166">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">167</span><span id="line-167">    ManualEnvironmentEdge timeMachine = new ManualEnvironmentEdge();</span>
-<span class="source-line-no">168</span><span id="line-168">    EnvironmentEdgeManager.injectEdge(timeMachine);</span>
-<span class="source-line-no">169</span><span id="line-169">    for (int i = 0; i &lt; numFiles; i++) {</span>
-<span class="source-line-no">170</span><span id="line-170">      MockHStoreFile mockedSFile = (MockHStoreFile) createFile(mockedRegionInfo, file, min, max,</span>
-<span class="source-line-no">171</span><span id="line-171">        1024, 0, HConstants.DEFAULT_MAJOR_COMPACTION_PERIOD);</span>
-<span class="source-line-no">172</span><span id="line-172">      mockedSFile.setIsMajor(true);</span>
-<span class="source-line-no">173</span><span id="line-173">      files.add(mockedSFile);</span>
-<span class="source-line-no">174</span><span id="line-174">    }</span>
-<span class="source-line-no">175</span><span id="line-175">    EnvironmentEdgeManager.reset();</span>
-<span class="source-line-no">176</span><span id="line-176">    validation.accept(policy, files);</span>
-<span class="source-line-no">177</span><span id="line-177">  }</span>
-<span class="source-line-no">178</span><span id="line-178"></span>
-<span class="source-line-no">179</span><span id="line-179">  @Test</span>
-<span class="source-line-no">180</span><span id="line-180">  public void testShouldPerformMajorCompactionOneFileCrossing() throws Exception {</span>
-<span class="source-line-no">181</span><span id="line-181">    long max = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">182</span><span id="line-182">    testShouldPerformMajorCompaction(0, max, 1,</span>
-<span class="source-line-no">183</span><span id="line-183">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">184</span><span id="line-184">  }</span>
-<span class="source-line-no">185</span><span id="line-185"></span>
-<span class="source-line-no">186</span><span id="line-186">  @Test</span>
-<span class="source-line-no">187</span><span id="line-187">  public void testShouldPerformMajorCompactionOneFileMinMaxLow() throws Exception {</span>
-<span class="source-line-no">188</span><span id="line-188">    testShouldPerformMajorCompaction(0, 1, 1,</span>
-<span class="source-line-no">189</span><span id="line-189">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">190</span><span id="line-190">  }</span>
-<span class="source-line-no">191</span><span id="line-191"></span>
-<span class="source-line-no">192</span><span id="line-192">  @Test</span>
-<span class="source-line-no">193</span><span id="line-193">  public void testShouldPerformMajorCompactionOneFileMinMaxHigh() throws Exception {</span>
-<span class="source-line-no">194</span><span id="line-194">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">195</span><span id="line-195">    testShouldPerformMajorCompaction(currentTime, currentTime, 1,</span>
-<span class="source-line-no">196</span><span id="line-196">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">197</span><span id="line-197">  }</span>
-<span class="source-line-no">198</span><span id="line-198"></span>
-<span class="source-line-no">199</span><span id="line-199">  @Test</span>
-<span class="source-line-no">200</span><span id="line-200">  public void testShouldPerformMajorCompactionTwoFilesMinMaxHigh() throws Exception {</span>
-<span class="source-line-no">201</span><span id="line-201">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
-<span class="source-line-no">202</span><span id="line-202">    testShouldPerformMajorCompaction(currentTime, currentTime, 2,</span>
-<span class="source-line-no">203</span><span id="line-203">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
-<span class="source-line-no">204</span><span id="line-204">  }</span>
-<span class="source-line-no">205</span><span id="line-205"></span>
-<span class="source-line-no">206</span><span id="line-206">  @Test</span>
-<span class="source-line-no">207</span><span id="line-207">  public void testSelectMinorCompactionTwoFilesNoOld() throws Exception {</span>
-<span class="source-line-no">208</span><span id="line-208">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">209</span><span id="line-209">    Path file = preparePath();</span>
-<span class="source-line-no">210</span><span id="line-210">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">211</span><span id="line-211">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">212</span><span id="line-212">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">116</span><span id="line-116">    // getCompactBoundariesForMajor always offers [MIN_VALUE, cutOffTimestamp] now, regardless of</span>
+<span class="source-line-no">117</span><span id="line-117">    // the files being compacted, so the boundary count is always 2.</span>
+<span class="source-line-no">118</span><span id="line-118">    assertEquals(2,</span>
+<span class="source-line-no">119</span><span id="line-119">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">120</span><span id="line-120">  }</span>
+<span class="source-line-no">121</span><span id="line-121"></span>
+<span class="source-line-no">122</span><span id="line-122">  @Test</span>
+<span class="source-line-no">123</span><span id="line-123">  public void testGetCompactBoundariesForMajorAllOld() throws Exception {</span>
+<span class="source-line-no">124</span><span id="line-124">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">125</span><span id="line-125">    Path file = preparePath();</span>
+<span class="source-line-no">126</span><span id="line-126">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">127</span><span id="line-127">    // The default cut off age is 10 years, so any of the min/max value there should get in the old</span>
+<span class="source-line-no">128</span><span id="line-128">    // tier</span>
+<span class="source-line-no">129</span><span id="line-129">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">130</span><span id="line-130">    files.add(createFile(file, 2, 3, 1024, 1));</span>
+<span class="source-line-no">131</span><span id="line-131">    assertEquals(2,</span>
+<span class="source-line-no">132</span><span id="line-132">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">133</span><span id="line-133">  }</span>
+<span class="source-line-no">134</span><span id="line-134"></span>
+<span class="source-line-no">135</span><span id="line-135">  @Test</span>
+<span class="source-line-no">136</span><span id="line-136">  public void testGetCompactBoundariesForMajorOneOnEachSide() throws Exception {</span>
+<span class="source-line-no">137</span><span id="line-137">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">138</span><span id="line-138">    Path file = preparePath();</span>
+<span class="source-line-no">139</span><span id="line-139">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">140</span><span id="line-140">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">141</span><span id="line-141">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">142</span><span id="line-142">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">143</span><span id="line-143">    assertEquals(2,</span>
+<span class="source-line-no">144</span><span id="line-144">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">145</span><span id="line-145">  }</span>
+<span class="source-line-no">146</span><span id="line-146"></span>
+<span class="source-line-no">147</span><span id="line-147">  @Test</span>
+<span class="source-line-no">148</span><span id="line-148">  public void testGetCompactBoundariesForMajorOneCrossing() throws Exception {</span>
+<span class="source-line-no">149</span><span id="line-149">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">150</span><span id="line-150">    Path file = preparePath();</span>
+<span class="source-line-no">151</span><span id="line-151">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">152</span><span id="line-152">    files.add(createFile(file, 0, EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">153</span><span id="line-153">    assertEquals(2,</span>
+<span class="source-line-no">154</span><span id="line-154">      ((DateTieredCompactionRequest) policy.selectMajorCompaction(files)).getBoundaries().size());</span>
+<span class="source-line-no">155</span><span id="line-155">  }</span>
+<span class="source-line-no">156</span><span id="line-156"></span>
+<span class="source-line-no">157</span><span id="line-157">  @FunctionalInterface</span>
+<span class="source-line-no">158</span><span id="line-158">  interface PolicyValidator&lt;T, U&gt; {</span>
+<span class="source-line-no">159</span><span id="line-159">    void accept(T t, U u) throws Exception;</span>
+<span class="source-line-no">160</span><span id="line-160">  }</span>
+<span class="source-line-no">161</span><span id="line-161"></span>
+<span class="source-line-no">162</span><span id="line-162">  private void testShouldPerformMajorCompaction(long min, long max, int numFiles,</span>
+<span class="source-line-no">163</span><span id="line-163">    PolicyValidator&lt;CustomDateTieredCompactionPolicy, ArrayList&lt;HStoreFile&gt;&gt; validation)</span>
+<span class="source-line-no">164</span><span id="line-164">    throws Exception {</span>
+<span class="source-line-no">165</span><span id="line-165">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">166</span><span id="line-166">    RegionInfo mockedRegionInfo = mockRegionInfo();</span>
+<span class="source-line-no">167</span><span id="line-167">    Path file = preparePath();</span>
+<span class="source-line-no">168</span><span id="line-168">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">169</span><span id="line-169">    ManualEnvironmentEdge timeMachine = new ManualEnvironmentEdge();</span>
+<span class="source-line-no">170</span><span id="line-170">    EnvironmentEdgeManager.injectEdge(timeMachine);</span>
+<span class="source-line-no">171</span><span id="line-171">    for (int i = 0; i &lt; numFiles; i++) {</span>
+<span class="source-line-no">172</span><span id="line-172">      MockHStoreFile mockedSFile = (MockHStoreFile) createFile(mockedRegionInfo, file, min, max,</span>
+<span class="source-line-no">173</span><span id="line-173">        1024, 0, HConstants.DEFAULT_MAJOR_COMPACTION_PERIOD);</span>
+<span class="source-line-no">174</span><span id="line-174">      mockedSFile.setIsMajor(true);</span>
+<span class="source-line-no">175</span><span id="line-175">      files.add(mockedSFile);</span>
+<span class="source-line-no">176</span><span id="line-176">    }</span>
+<span class="source-line-no">177</span><span id="line-177">    EnvironmentEdgeManager.reset();</span>
+<span class="source-line-no">178</span><span id="line-178">    validation.accept(policy, files);</span>
+<span class="source-line-no">179</span><span id="line-179">  }</span>
+<span class="source-line-no">180</span><span id="line-180"></span>
+<span class="source-line-no">181</span><span id="line-181">  @Test</span>
+<span class="source-line-no">182</span><span id="line-182">  public void testShouldPerformMajorCompactionOneFileCrossing() throws Exception {</span>
+<span class="source-line-no">183</span><span id="line-183">    long max = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">184</span><span id="line-184">    testShouldPerformMajorCompaction(0, max, 1,</span>
+<span class="source-line-no">185</span><span id="line-185">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">186</span><span id="line-186">  }</span>
+<span class="source-line-no">187</span><span id="line-187"></span>
+<span class="source-line-no">188</span><span id="line-188">  @Test</span>
+<span class="source-line-no">189</span><span id="line-189">  public void testShouldPerformMajorCompactionOneFileMinMaxLow() throws Exception {</span>
+<span class="source-line-no">190</span><span id="line-190">    testShouldPerformMajorCompaction(0, 1, 1,</span>
+<span class="source-line-no">191</span><span id="line-191">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">192</span><span id="line-192">  }</span>
+<span class="source-line-no">193</span><span id="line-193"></span>
+<span class="source-line-no">194</span><span id="line-194">  @Test</span>
+<span class="source-line-no">195</span><span id="line-195">  public void testShouldPerformMajorCompactionOneFileMinMaxHigh() throws Exception {</span>
+<span class="source-line-no">196</span><span id="line-196">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">197</span><span id="line-197">    testShouldPerformMajorCompaction(currentTime, currentTime, 1,</span>
+<span class="source-line-no">198</span><span id="line-198">      (p, f) -&gt; assertFalse(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">199</span><span id="line-199">  }</span>
+<span class="source-line-no">200</span><span id="line-200"></span>
+<span class="source-line-no">201</span><span id="line-201">  @Test</span>
+<span class="source-line-no">202</span><span id="line-202">  public void testShouldPerformMajorCompactionTwoFilesMinMaxHigh() throws Exception {</span>
+<span class="source-line-no">203</span><span id="line-203">    long currentTime = EnvironmentEdgeManager.currentTime();</span>
+<span class="source-line-no">204</span><span id="line-204">    testShouldPerformMajorCompaction(currentTime, currentTime, 2,</span>
+<span class="source-line-no">205</span><span id="line-205">      (p, f) -&gt; assertTrue(p.shouldPerformMajorCompaction(f)));</span>
+<span class="source-line-no">206</span><span id="line-206">  }</span>
+<span class="source-line-no">207</span><span id="line-207"></span>
+<span class="source-line-no">208</span><span id="line-208">  @Test</span>
+<span class="source-line-no">209</span><span id="line-209">  public void testSelectMinorCompactionTwoFilesNoOld() throws Exception {</span>
+<span class="source-line-no">210</span><span id="line-210">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">211</span><span id="line-211">    Path file = preparePath();</span>
+<span class="source-line-no">212</span><span id="line-212">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
 <span class="source-line-no">213</span><span id="line-213">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">214</span><span id="line-214">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
-<span class="source-line-no">215</span><span id="line-215">    // Shouldn't do minor compaction, as minimum number of files</span>
-<span class="source-line-no">216</span><span id="line-216">    // for minor compactions is 3</span>
-<span class="source-line-no">217</span><span id="line-217">    assertEquals(0, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">218</span><span id="line-218">  }</span>
-<span class="source-line-no">219</span><span id="line-219"></span>
-<span class="source-line-no">220</span><span id="line-220">  @Test</span>
-<span class="source-line-no">221</span><span id="line-221">  public void testSelectMinorCompactionThreeFilesNoOld() throws Exception {</span>
-<span class="source-line-no">222</span><span id="line-222">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">223</span><span id="line-223">    Path file = preparePath();</span>
-<span class="source-line-no">224</span><span id="line-224">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">225</span><span id="line-225">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">226</span><span id="line-226">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">214</span><span id="line-214">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
+<span class="source-line-no">215</span><span id="line-215">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">216</span><span id="line-216">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">217</span><span id="line-217">    // Shouldn't do minor compaction, as minimum number of files</span>
+<span class="source-line-no">218</span><span id="line-218">    // for minor compactions is 3</span>
+<span class="source-line-no">219</span><span id="line-219">    assertEquals(0, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">220</span><span id="line-220">  }</span>
+<span class="source-line-no">221</span><span id="line-221"></span>
+<span class="source-line-no">222</span><span id="line-222">  @Test</span>
+<span class="source-line-no">223</span><span id="line-223">  public void testSelectMinorCompactionThreeFilesNoOld() throws Exception {</span>
+<span class="source-line-no">224</span><span id="line-224">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">225</span><span id="line-225">    Path file = preparePath();</span>
+<span class="source-line-no">226</span><span id="line-226">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
 <span class="source-line-no">227</span><span id="line-227">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">228</span><span id="line-228">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">228</span><span id="line-228">      EnvironmentEdgeManager.currentTime(), 1024, 0));</span>
 <span class="source-line-no">229</span><span id="line-229">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">230</span><span id="line-230">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">231</span><span id="line-231">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">232</span><span id="line-232">  }</span>
-<span class="source-line-no">233</span><span id="line-233"></span>
-<span class="source-line-no">234</span><span id="line-234">  @Test</span>
-<span class="source-line-no">235</span><span id="line-235">  public void testSelectMinorCompactionThreeFilesAllOld() throws Exception {</span>
-<span class="source-line-no">236</span><span id="line-236">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">237</span><span id="line-237">    Path file = preparePath();</span>
-<span class="source-line-no">238</span><span id="line-238">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">239</span><span id="line-239">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">240</span><span id="line-240">    files.add(createFile(file, 1, 2, 1024, 1));</span>
-<span class="source-line-no">241</span><span id="line-241">    files.add(createFile(file, 3, 4, 1024, 2));</span>
-<span class="source-line-no">242</span><span id="line-242">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">243</span><span id="line-243">  }</span>
-<span class="source-line-no">244</span><span id="line-244"></span>
-<span class="source-line-no">245</span><span id="line-245">  @Test</span>
-<span class="source-line-no">246</span><span id="line-246">  public void testSelectMinorCompactionThreeFilesOneOldTwoNew() throws Exception {</span>
-<span class="source-line-no">247</span><span id="line-247">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">248</span><span id="line-248">    Path file = preparePath();</span>
-<span class="source-line-no">249</span><span id="line-249">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">250</span><span id="line-250">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">251</span><span id="line-251">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">252</span><span id="line-252">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">230</span><span id="line-230">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">231</span><span id="line-231">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">232</span><span id="line-232">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">233</span><span id="line-233">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">234</span><span id="line-234">  }</span>
+<span class="source-line-no">235</span><span id="line-235"></span>
+<span class="source-line-no">236</span><span id="line-236">  @Test</span>
+<span class="source-line-no">237</span><span id="line-237">  public void testSelectMinorCompactionThreeFilesAllOld() throws Exception {</span>
+<span class="source-line-no">238</span><span id="line-238">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">239</span><span id="line-239">    Path file = preparePath();</span>
+<span class="source-line-no">240</span><span id="line-240">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">241</span><span id="line-241">    files.add(createFile(file, 0, 1, 1024, 0));</span>
+<span class="source-line-no">242</span><span id="line-242">    files.add(createFile(file, 1, 2, 1024, 1));</span>
+<span class="source-line-no">243</span><span id="line-243">    files.add(createFile(file, 3, 4, 1024, 2));</span>
+<span class="source-line-no">244</span><span id="line-244">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">245</span><span id="line-245">  }</span>
+<span class="source-line-no">246</span><span id="line-246"></span>
+<span class="source-line-no">247</span><span id="line-247">  @Test</span>
+<span class="source-line-no">248</span><span id="line-248">  public void testSelectMinorCompactionThreeFilesOneOldTwoNew() throws Exception {</span>
+<span class="source-line-no">249</span><span id="line-249">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">250</span><span id="line-250">    Path file = preparePath();</span>
+<span class="source-line-no">251</span><span id="line-251">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">252</span><span id="line-252">    files.add(createFile(file, 0, 1, 1024, 0));</span>
 <span class="source-line-no">253</span><span id="line-253">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">254</span><span id="line-254">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">255</span><span id="line-255">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">256</span><span id="line-256">  }</span>
-<span class="source-line-no">257</span><span id="line-257"></span>
-<span class="source-line-no">258</span><span id="line-258">  @Test</span>
-<span class="source-line-no">259</span><span id="line-259">  public void testSelectMinorCompactionThreeFilesTwoOldOneNew() throws Exception {</span>
-<span class="source-line-no">260</span><span id="line-260">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
-<span class="source-line-no">261</span><span id="line-261">    Path file = preparePath();</span>
-<span class="source-line-no">262</span><span id="line-262">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
-<span class="source-line-no">263</span><span id="line-263">    files.add(createFile(file, 0, 1, 1024, 0));</span>
-<span class="source-line-no">264</span><span id="line-264">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">265</span><span id="line-265">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">254</span><span id="line-254">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">255</span><span id="line-255">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">256</span><span id="line-256">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">257</span><span id="line-257">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">258</span><span id="line-258">  }</span>
+<span class="source-line-no">259</span><span id="line-259"></span>
+<span class="source-line-no">260</span><span id="line-260">  @Test</span>
+<span class="source-line-no">261</span><span id="line-261">  public void testSelectMinorCompactionThreeFilesTwoOldOneNew() throws Exception {</span>
+<span class="source-line-no">262</span><span id="line-262">    CustomDateTieredCompactionPolicy policy = mockAndCreatePolicy();</span>
+<span class="source-line-no">263</span><span id="line-263">    Path file = preparePath();</span>
+<span class="source-line-no">264</span><span id="line-264">    ArrayList&lt;HStoreFile&gt; files = new ArrayList&lt;&gt;();</span>
+<span class="source-line-no">265</span><span id="line-265">    files.add(createFile(file, 0, 1, 1024, 0));</span>
 <span class="source-line-no">266</span><span id="line-266">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
-<span class="source-line-no">267</span><span id="line-267">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
-<span class="source-line-no">268</span><span id="line-268">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
-<span class="source-line-no">269</span><span id="line-269">  }</span>
-<span class="source-line-no">270</span><span id="line-270">}</span>
+<span class="source-line-no">267</span><span id="line-267">      EnvironmentEdgeManager.currentTime(), 1024, 1));</span>
+<span class="source-line-no">268</span><span id="line-268">    files.add(createFile(file, EnvironmentEdgeManager.currentTime(),</span>
+<span class="source-line-no">269</span><span id="line-269">      EnvironmentEdgeManager.currentTime(), 1024, 2));</span>
+<span class="source-line-no">270</span><span id="line-270">    assertEquals(3, policy.selectMinorCompaction(files, true, true).getFiles().size());</span>
+<span class="source-line-no">271</span><span id="line-271">  }</span>
+<span class="source-line-no">272</span><span id="line-272">}</span>
 
 
 
diff --git a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html
index e7e01c40755..0425cced890 100644
--- a/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html
+++ b/testdevapidocs/src-html/org/apache/hadoop/hbase/regionserver/compactions/TestCustomCellTieredCompactor.html
@@ -126,176 +126,176 @@
 <span class="source-line-no">113</span><span id="line-113">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(tableName)</span>
 <span class="source-line-no">114</span><span id="line-114">          &gt; firstCompactionTime);</span>
 <span class="source-line-no">115</span><span id="line-115">    long numHFiles = utility.getNumHFiles(tableName, FAMILY);</span>
-<span class="source-line-no">116</span><span id="line-116">    // The first major compaction would have no means to detect more than one tier,</span>
-<span class="source-line-no">117</span><span id="line-117">    // because without the min/max values available in the file info portion of the selected files</span>
-<span class="source-line-no">118</span><span id="line-118">    // for compaction, CustomCellDateTieredCompactionPolicy has no means</span>
-<span class="source-line-no">119</span><span id="line-119">    // to calculate the proper boundaries.</span>
-<span class="source-line-no">120</span><span id="line-120">    assertEquals(1, numHFiles);</span>
-<span class="source-line-no">121</span><span id="line-121">    utility.getMiniHBaseCluster().getRegions(tableName).get(0).getStore(FAMILY).getStorefiles()</span>
-<span class="source-line-no">122</span><span id="line-122">      .forEach(file -&gt; {</span>
-<span class="source-line-no">123</span><span id="line-123">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">124</span><span id="line-124">        assertNotNull(rangeBytes);</span>
-<span class="source-line-no">125</span><span id="line-125">        try {</span>
-<span class="source-line-no">126</span><span id="line-126">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
-<span class="source-line-no">127</span><span id="line-127">          assertEquals((recordTime - (11L * 366L * 24L * 60L * 60L * 1000L)),</span>
-<span class="source-line-no">128</span><span id="line-128">            timeRangeTracker.getMin());</span>
-<span class="source-line-no">129</span><span id="line-129">          assertEquals(recordTime, timeRangeTracker.getMax());</span>
-<span class="source-line-no">130</span><span id="line-130">        } catch (IOException e) {</span>
-<span class="source-line-no">131</span><span id="line-131">          fail(e.getMessage());</span>
-<span class="source-line-no">132</span><span id="line-132">        }</span>
-<span class="source-line-no">133</span><span id="line-133">      });</span>
-<span class="source-line-no">134</span><span id="line-134">    // now do major compaction again, to make sure we write two separate files</span>
-<span class="source-line-no">135</span><span id="line-135">    long secondCompactionTime = System.currentTimeMillis();</span>
-<span class="source-line-no">136</span><span id="line-136">    utility.getAdmin().majorCompact(tableName);</span>
-<span class="source-line-no">137</span><span id="line-137">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
-<span class="source-line-no">138</span><span id="line-138">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(tableName)</span>
-<span class="source-line-no">139</span><span id="line-139">          &gt; secondCompactionTime);</span>
-<span class="source-line-no">140</span><span id="line-140">    numHFiles = utility.getNumHFiles(tableName, FAMILY);</span>
-<span class="source-line-no">141</span><span id="line-141">    assertEquals(2, numHFiles);</span>
-<span class="source-line-no">142</span><span id="line-142">    utility.getMiniHBaseCluster().getRegions(tableName).get(0).getStore(FAMILY).getStorefiles()</span>
-<span class="source-line-no">143</span><span id="line-143">      .forEach(file -&gt; {</span>
-<span class="source-line-no">144</span><span id="line-144">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">145</span><span id="line-145">        assertNotNull(rangeBytes);</span>
-<span class="source-line-no">146</span><span id="line-146">        try {</span>
-<span class="source-line-no">147</span><span id="line-147">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
-<span class="source-line-no">148</span><span id="line-148">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
-<span class="source-line-no">149</span><span id="line-149">        } catch (IOException e) {</span>
-<span class="source-line-no">150</span><span id="line-150">          fail(e.getMessage());</span>
-<span class="source-line-no">151</span><span id="line-151">        }</span>
-<span class="source-line-no">152</span><span id="line-152">      });</span>
-<span class="source-line-no">153</span><span id="line-153">  }</span>
-<span class="source-line-no">154</span><span id="line-154"></span>
-<span class="source-line-no">155</span><span id="line-155">  @Test</span>
-<span class="source-line-no">156</span><span id="line-156">  public void testCustomCellTieredCompactorWithRowKeyDateTieringValue() throws Exception {</span>
-<span class="source-line-no">157</span><span id="line-157">    // Restart mini cluster with RowKeyDateTieringValueProvider</span>
-<span class="source-line-no">158</span><span id="line-158">    utility.shutdownMiniCluster();</span>
-<span class="source-line-no">159</span><span id="line-159">    utility.getConfiguration().set(TIERING_VALUE_PROVIDER,</span>
-<span class="source-line-no">160</span><span id="line-160">      RowKeyDateTieringValueProvider.class.getName());</span>
-<span class="source-line-no">161</span><span id="line-161">    utility.startMiniCluster();</span>
+<span class="source-line-no">116</span><span id="line-116">    // getCompactBoundariesForMajor always offers the cutOffTimestamp boundary now, so the first</span>
+<span class="source-line-no">117</span><span id="line-117">    // major compaction already splits the old and recent cells into separate tiers without</span>
+<span class="source-line-no">118</span><span id="line-118">    // relying on CUSTOM_TIERING_TIME_RANGE file metadata.</span>
+<span class="source-line-no">119</span><span id="line-119">    assertEquals(2, numHFiles);</span>
+<span class="source-line-no">120</span><span id="line-120">    utility.getMiniHBaseCluster().getRegions(tableName).get(0).getStore(FAMILY).getStorefiles()</span>
+<span class="source-line-no">121</span><span id="line-121">      .forEach(file -&gt; {</span>
+<span class="source-line-no">122</span><span id="line-122">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
+<span class="source-line-no">123</span><span id="line-123">        assertNotNull(rangeBytes);</span>
+<span class="source-line-no">124</span><span id="line-124">        try {</span>
+<span class="source-line-no">125</span><span id="line-125">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
+<span class="source-line-no">126</span><span id="line-126">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
+<span class="source-line-no">127</span><span id="line-127">        } catch (IOException e) {</span>
+<span class="source-line-no">128</span><span id="line-128">          fail(e.getMessage());</span>
+<span class="source-line-no">129</span><span id="line-129">        }</span>
+<span class="source-line-no">130</span><span id="line-130">      });</span>
+<span class="source-line-no">131</span><span id="line-131">    // now do major compaction again, to make sure the two tiers stay separate</span>
+<span class="source-line-no">132</span><span id="line-132">    long secondCompactionTime = System.currentTimeMillis();</span>
+<span class="source-line-no">133</span><span id="line-133">    utility.getAdmin().majorCompact(tableName);</span>
+<span class="source-line-no">134</span><span id="line-134">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
+<span class="source-line-no">135</span><span id="line-135">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(tableName)</span>
+<span class="source-line-no">136</span><span id="line-136">          &gt; secondCompactionTime);</span>
+<span class="source-line-no">137</span><span id="line-137">    numHFiles = utility.getNumHFiles(tableName, FAMILY);</span>
+<span class="source-line-no">138</span><span id="line-138">    assertEquals(2, numHFiles);</span>
+<span class="source-line-no">139</span><span id="line-139">    utility.getMiniHBaseCluster().getRegions(tableName).get(0).getStore(FAMILY).getStorefiles()</span>
+<span class="source-line-no">140</span><span id="line-140">      .forEach(file -&gt; {</span>
+<span class="source-line-no">141</span><span id="line-141">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
+<span class="source-line-no">142</span><span id="line-142">        assertNotNull(rangeBytes);</span>
+<span class="source-line-no">143</span><span id="line-143">        try {</span>
+<span class="source-line-no">144</span><span id="line-144">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
+<span class="source-line-no">145</span><span id="line-145">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
+<span class="source-line-no">146</span><span id="line-146">        } catch (IOException e) {</span>
+<span class="source-line-no">147</span><span id="line-147">          fail(e.getMessage());</span>
+<span class="source-line-no">148</span><span id="line-148">        }</span>
+<span class="source-line-no">149</span><span id="line-149">      });</span>
+<span class="source-line-no">150</span><span id="line-150">  }</span>
+<span class="source-line-no">151</span><span id="line-151"></span>
+<span class="source-line-no">152</span><span id="line-152">  @Test</span>
+<span class="source-line-no">153</span><span id="line-153">  public void testCustomCellTieredCompactorWithRowKeyDateTieringValue() throws Exception {</span>
+<span class="source-line-no">154</span><span id="line-154">    // Restart mini cluster with RowKeyDateTieringValueProvider</span>
+<span class="source-line-no">155</span><span id="line-155">    utility.shutdownMiniCluster();</span>
+<span class="source-line-no">156</span><span id="line-156">    utility.getConfiguration().set(TIERING_VALUE_PROVIDER,</span>
+<span class="source-line-no">157</span><span id="line-157">      RowKeyDateTieringValueProvider.class.getName());</span>
+<span class="source-line-no">158</span><span id="line-158">    utility.startMiniCluster();</span>
+<span class="source-line-no">159</span><span id="line-159"></span>
+<span class="source-line-no">160</span><span id="line-160">    ColumnFamilyDescriptorBuilder clmBuilder = ColumnFamilyDescriptorBuilder.newBuilder(FAMILY);</span>
+<span class="source-line-no">161</span><span id="line-161">    clmBuilder.setValue("hbase.hstore.engine.class", CustomTieredStoreEngine.class.getName());</span>
 <span class="source-line-no">162</span><span id="line-162"></span>
-<span class="source-line-no">163</span><span id="line-163">    ColumnFamilyDescriptorBuilder clmBuilder = ColumnFamilyDescriptorBuilder.newBuilder(FAMILY);</span>
-<span class="source-line-no">164</span><span id="line-164">    clmBuilder.setValue("hbase.hstore.engine.class", CustomTieredStoreEngine.class.getName());</span>
-<span class="source-line-no">165</span><span id="line-165"></span>
-<span class="source-line-no">166</span><span id="line-166">    // Table 1: Date at end with format yyyyMMddHHmmssSSS</span>
-<span class="source-line-no">167</span><span id="line-167">    TableName table1Name = TableName.valueOf("testTable1");</span>
-<span class="source-line-no">168</span><span id="line-168">    TableDescriptorBuilder tbl1Builder = TableDescriptorBuilder.newBuilder(table1Name);</span>
-<span class="source-line-no">169</span><span id="line-169">    tbl1Builder.setColumnFamily(clmBuilder.build());</span>
-<span class="source-line-no">170</span><span id="line-170">    tbl1Builder.setValue(TIERING_KEY_DATE_PATTERN, "(\\d{17})$");</span>
-<span class="source-line-no">171</span><span id="line-171">    tbl1Builder.setValue(TIERING_KEY_DATE_FORMAT, "yyyyMMddHHmmssSSS");</span>
-<span class="source-line-no">172</span><span id="line-172">    utility.getAdmin().createTable(tbl1Builder.build());</span>
-<span class="source-line-no">173</span><span id="line-173">    utility.waitTableAvailable(table1Name);</span>
-<span class="source-line-no">174</span><span id="line-174"></span>
-<span class="source-line-no">175</span><span id="line-175">    // Table 2: Date at beginning with format yyyy-MM-dd HH:mm:ss</span>
-<span class="source-line-no">176</span><span id="line-176">    TableName table2Name = TableName.valueOf("testTable2");</span>
-<span class="source-line-no">177</span><span id="line-177">    TableDescriptorBuilder tbl2Builder = TableDescriptorBuilder.newBuilder(table2Name);</span>
-<span class="source-line-no">178</span><span id="line-178">    tbl2Builder.setColumnFamily(clmBuilder.build());</span>
-<span class="source-line-no">179</span><span id="line-179">    tbl2Builder.setValue(TIERING_KEY_DATE_PATTERN, "^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})");</span>
-<span class="source-line-no">180</span><span id="line-180">    tbl2Builder.setValue(TIERING_KEY_DATE_FORMAT, "yyyy-MM-dd HH:mm:ss");</span>
-<span class="source-line-no">181</span><span id="line-181">    utility.getAdmin().createTable(tbl2Builder.build());</span>
-<span class="source-line-no">182</span><span id="line-182">    utility.waitTableAvailable(table2Name);</span>
-<span class="source-line-no">183</span><span id="line-183"></span>
-<span class="source-line-no">184</span><span id="line-184">    Connection connection = utility.getConnection();</span>
-<span class="source-line-no">185</span><span id="line-185">    long recordTime = System.currentTimeMillis();</span>
-<span class="source-line-no">186</span><span id="line-186">    long oldTime = recordTime - (11L * 366L * 24L * 60L * 60L * 1000L);</span>
+<span class="source-line-no">163</span><span id="line-163">    // Table 1: Date at end with format yyyyMMddHHmmssSSS</span>
+<span class="source-line-no">164</span><span id="line-164">    TableName table1Name = TableName.valueOf("testTable1");</span>
+<span class="source-line-no">165</span><span id="line-165">    TableDescriptorBuilder tbl1Builder = TableDescriptorBuilder.newBuilder(table1Name);</span>
+<span class="source-line-no">166</span><span id="line-166">    tbl1Builder.setColumnFamily(clmBuilder.build());</span>
+<span class="source-line-no">167</span><span id="line-167">    tbl1Builder.setValue(TIERING_KEY_DATE_PATTERN, "(\\d{17})$");</span>
+<span class="source-line-no">168</span><span id="line-168">    tbl1Builder.setValue(TIERING_KEY_DATE_FORMAT, "yyyyMMddHHmmssSSS");</span>
+<span class="source-line-no">169</span><span id="line-169">    utility.getAdmin().createTable(tbl1Builder.build());</span>
+<span class="source-line-no">170</span><span id="line-170">    utility.waitTableAvailable(table1Name);</span>
+<span class="source-line-no">171</span><span id="line-171"></span>
+<span class="source-line-no">172</span><span id="line-172">    // Table 2: Date at beginning with format yyyy-MM-dd HH:mm:ss</span>
+<span class="source-line-no">173</span><span id="line-173">    TableName table2Name = TableName.valueOf("testTable2");</span>
+<span class="source-line-no">174</span><span id="line-174">    TableDescriptorBuilder tbl2Builder = TableDescriptorBuilder.newBuilder(table2Name);</span>
+<span class="source-line-no">175</span><span id="line-175">    tbl2Builder.setColumnFamily(clmBuilder.build());</span>
+<span class="source-line-no">176</span><span id="line-176">    tbl2Builder.setValue(TIERING_KEY_DATE_PATTERN, "^(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})");</span>
+<span class="source-line-no">177</span><span id="line-177">    tbl2Builder.setValue(TIERING_KEY_DATE_FORMAT, "yyyy-MM-dd HH:mm:ss");</span>
+<span class="source-line-no">178</span><span id="line-178">    utility.getAdmin().createTable(tbl2Builder.build());</span>
+<span class="source-line-no">179</span><span id="line-179">    utility.waitTableAvailable(table2Name);</span>
+<span class="source-line-no">180</span><span id="line-180"></span>
+<span class="source-line-no">181</span><span id="line-181">    Connection connection = utility.getConnection();</span>
+<span class="source-line-no">182</span><span id="line-182">    long recordTime = System.currentTimeMillis();</span>
+<span class="source-line-no">183</span><span id="line-183">    long oldTime = recordTime - (11L * 366L * 24L * 60L * 60L * 1000L);</span>
+<span class="source-line-no">184</span><span id="line-184"></span>
+<span class="source-line-no">185</span><span id="line-185">    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS");</span>
+<span class="source-line-no">186</span><span id="line-186">    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");</span>
 <span class="source-line-no">187</span><span id="line-187"></span>
-<span class="source-line-no">188</span><span id="line-188">    SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMddHHmmssSSS");</span>
-<span class="source-line-no">189</span><span id="line-189">    SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");</span>
-<span class="source-line-no">190</span><span id="line-190"></span>
-<span class="source-line-no">191</span><span id="line-191">    // Write to Table 1 with date at end</span>
-<span class="source-line-no">192</span><span id="line-192">    Table table1 = connection.getTable(table1Name);</span>
-<span class="source-line-no">193</span><span id="line-193">    for (int i = 0; i &lt; 6; i++) {</span>
-<span class="source-line-no">194</span><span id="line-194">      List&lt;Put&gt; puts = new ArrayList&lt;&gt;(2);</span>
-<span class="source-line-no">195</span><span id="line-195"></span>
-<span class="source-line-no">196</span><span id="line-196">      // Old data</span>
-<span class="source-line-no">197</span><span id="line-197">      String oldDate = sdf1.format(new Date(oldTime));</span>
-<span class="source-line-no">198</span><span id="line-198">      Put put = new Put(Bytes.toBytes("row_" + i + "_" + oldDate));</span>
-<span class="source-line-no">199</span><span id="line-199">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + i));</span>
-<span class="source-line-no">200</span><span id="line-200">      puts.add(put);</span>
-<span class="source-line-no">201</span><span id="line-201"></span>
-<span class="source-line-no">202</span><span id="line-202">      // Recent data</span>
-<span class="source-line-no">203</span><span id="line-203">      String recentDate = sdf1.format(new Date(recordTime));</span>
-<span class="source-line-no">204</span><span id="line-204">      put = new Put(Bytes.toBytes("row_" + (i + 1000) + "_" + recentDate));</span>
-<span class="source-line-no">205</span><span id="line-205">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + (i + 1000)));</span>
-<span class="source-line-no">206</span><span id="line-206">      puts.add(put);</span>
-<span class="source-line-no">207</span><span id="line-207"></span>
-<span class="source-line-no">208</span><span id="line-208">      table1.put(puts);</span>
-<span class="source-line-no">209</span><span id="line-209">      utility.flush(table1Name);</span>
-<span class="source-line-no">210</span><span id="line-210">    }</span>
-<span class="source-line-no">211</span><span id="line-211">    table1.close();</span>
-<span class="source-line-no">212</span><span id="line-212"></span>
-<span class="source-line-no">213</span><span id="line-213">    // Write to Table 2 with date at beginning</span>
-<span class="source-line-no">214</span><span id="line-214">    Table table2 = connection.getTable(table2Name);</span>
-<span class="source-line-no">215</span><span id="line-215">    for (int i = 0; i &lt; 6; i++) {</span>
-<span class="source-line-no">216</span><span id="line-216">      List&lt;Put&gt; puts = new ArrayList&lt;&gt;(2);</span>
-<span class="source-line-no">217</span><span id="line-217"></span>
-<span class="source-line-no">218</span><span id="line-218">      // Old data</span>
-<span class="source-line-no">219</span><span id="line-219">      String oldDate = sdf2.format(new Date(oldTime));</span>
-<span class="source-line-no">220</span><span id="line-220">      Put put = new Put(Bytes.toBytes(oldDate + "_row_" + i));</span>
-<span class="source-line-no">221</span><span id="line-221">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + i));</span>
-<span class="source-line-no">222</span><span id="line-222">      puts.add(put);</span>
-<span class="source-line-no">223</span><span id="line-223"></span>
-<span class="source-line-no">224</span><span id="line-224">      // Recent data</span>
-<span class="source-line-no">225</span><span id="line-225">      String recentDate = sdf2.format(new Date(recordTime));</span>
-<span class="source-line-no">226</span><span id="line-226">      put = new Put(Bytes.toBytes(recentDate + "_row_" + (i + 1000)));</span>
-<span class="source-line-no">227</span><span id="line-227">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + (i + 1000)));</span>
-<span class="source-line-no">228</span><span id="line-228">      puts.add(put);</span>
-<span class="source-line-no">229</span><span id="line-229"></span>
-<span class="source-line-no">230</span><span id="line-230">      table2.put(puts);</span>
-<span class="source-line-no">231</span><span id="line-231">      utility.flush(table2Name);</span>
-<span class="source-line-no">232</span><span id="line-232">    }</span>
-<span class="source-line-no">233</span><span id="line-233">    table2.close();</span>
-<span class="source-line-no">234</span><span id="line-234"></span>
-<span class="source-line-no">235</span><span id="line-235">    // First compaction for Table 1</span>
-<span class="source-line-no">236</span><span id="line-236">    long compactionTime1 = System.currentTimeMillis();</span>
-<span class="source-line-no">237</span><span id="line-237">    utility.getAdmin().majorCompact(table1Name);</span>
-<span class="source-line-no">238</span><span id="line-238">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
-<span class="source-line-no">239</span><span id="line-239">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table1Name)</span>
-<span class="source-line-no">240</span><span id="line-240">          &gt; compactionTime1);</span>
-<span class="source-line-no">241</span><span id="line-241"></span>
-<span class="source-line-no">242</span><span id="line-242">    assertEquals(1, utility.getNumHFiles(table1Name, FAMILY));</span>
-<span class="source-line-no">243</span><span id="line-243"></span>
-<span class="source-line-no">244</span><span id="line-244">    utility.getMiniHBaseCluster().getRegions(table1Name).get(0).getStore(FAMILY).getStorefiles()</span>
-<span class="source-line-no">245</span><span id="line-245">      .forEach(file -&gt; {</span>
-<span class="source-line-no">246</span><span id="line-246">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">247</span><span id="line-247">        assertNotNull(rangeBytes);</span>
-<span class="source-line-no">248</span><span id="line-248">        try {</span>
-<span class="source-line-no">249</span><span id="line-249">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
-<span class="source-line-no">250</span><span id="line-250">          assertEquals(oldTime, timeRangeTracker.getMin());</span>
-<span class="source-line-no">251</span><span id="line-251">          assertEquals(recordTime, timeRangeTracker.getMax());</span>
-<span class="source-line-no">252</span><span id="line-252">        } catch (IOException e) {</span>
-<span class="source-line-no">253</span><span id="line-253">          fail(e.getMessage());</span>
-<span class="source-line-no">254</span><span id="line-254">        }</span>
-<span class="source-line-no">255</span><span id="line-255">      });</span>
-<span class="source-line-no">256</span><span id="line-256"></span>
-<span class="source-line-no">257</span><span id="line-257">    // Second compaction for Table 1</span>
-<span class="source-line-no">258</span><span id="line-258">    long secondCompactionTime1 = System.currentTimeMillis();</span>
-<span class="source-line-no">259</span><span id="line-259">    utility.getAdmin().majorCompact(table1Name);</span>
-<span class="source-line-no">260</span><span id="line-260">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
-<span class="source-line-no">261</span><span id="line-261">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table1Name)</span>
-<span class="source-line-no">262</span><span id="line-262">          &gt; secondCompactionTime1);</span>
+<span class="source-line-no">188</span><span id="line-188">    // Write to Table 1 with date at end</span>
+<span class="source-line-no">189</span><span id="line-189">    Table table1 = connection.getTable(table1Name);</span>
+<span class="source-line-no">190</span><span id="line-190">    for (int i = 0; i &lt; 6; i++) {</span>
+<span class="source-line-no">191</span><span id="line-191">      List&lt;Put&gt; puts = new ArrayList&lt;&gt;(2);</span>
+<span class="source-line-no">192</span><span id="line-192"></span>
+<span class="source-line-no">193</span><span id="line-193">      // Old data</span>
+<span class="source-line-no">194</span><span id="line-194">      String oldDate = sdf1.format(new Date(oldTime));</span>
+<span class="source-line-no">195</span><span id="line-195">      Put put = new Put(Bytes.toBytes("row_" + i + "_" + oldDate));</span>
+<span class="source-line-no">196</span><span id="line-196">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + i));</span>
+<span class="source-line-no">197</span><span id="line-197">      puts.add(put);</span>
+<span class="source-line-no">198</span><span id="line-198"></span>
+<span class="source-line-no">199</span><span id="line-199">      // Recent data</span>
+<span class="source-line-no">200</span><span id="line-200">      String recentDate = sdf1.format(new Date(recordTime));</span>
+<span class="source-line-no">201</span><span id="line-201">      put = new Put(Bytes.toBytes("row_" + (i + 1000) + "_" + recentDate));</span>
+<span class="source-line-no">202</span><span id="line-202">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + (i + 1000)));</span>
+<span class="source-line-no">203</span><span id="line-203">      puts.add(put);</span>
+<span class="source-line-no">204</span><span id="line-204"></span>
+<span class="source-line-no">205</span><span id="line-205">      table1.put(puts);</span>
+<span class="source-line-no">206</span><span id="line-206">      utility.flush(table1Name);</span>
+<span class="source-line-no">207</span><span id="line-207">    }</span>
+<span class="source-line-no">208</span><span id="line-208">    table1.close();</span>
+<span class="source-line-no">209</span><span id="line-209"></span>
+<span class="source-line-no">210</span><span id="line-210">    // Write to Table 2 with date at beginning</span>
+<span class="source-line-no">211</span><span id="line-211">    Table table2 = connection.getTable(table2Name);</span>
+<span class="source-line-no">212</span><span id="line-212">    for (int i = 0; i &lt; 6; i++) {</span>
+<span class="source-line-no">213</span><span id="line-213">      List&lt;Put&gt; puts = new ArrayList&lt;&gt;(2);</span>
+<span class="source-line-no">214</span><span id="line-214"></span>
+<span class="source-line-no">215</span><span id="line-215">      // Old data</span>
+<span class="source-line-no">216</span><span id="line-216">      String oldDate = sdf2.format(new Date(oldTime));</span>
+<span class="source-line-no">217</span><span id="line-217">      Put put = new Put(Bytes.toBytes(oldDate + "_row_" + i));</span>
+<span class="source-line-no">218</span><span id="line-218">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + i));</span>
+<span class="source-line-no">219</span><span id="line-219">      puts.add(put);</span>
+<span class="source-line-no">220</span><span id="line-220"></span>
+<span class="source-line-no">221</span><span id="line-221">      // Recent data</span>
+<span class="source-line-no">222</span><span id="line-222">      String recentDate = sdf2.format(new Date(recordTime));</span>
+<span class="source-line-no">223</span><span id="line-223">      put = new Put(Bytes.toBytes(recentDate + "_row_" + (i + 1000)));</span>
+<span class="source-line-no">224</span><span id="line-224">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + (i + 1000)));</span>
+<span class="source-line-no">225</span><span id="line-225">      puts.add(put);</span>
+<span class="source-line-no">226</span><span id="line-226"></span>
+<span class="source-line-no">227</span><span id="line-227">      table2.put(puts);</span>
+<span class="source-line-no">228</span><span id="line-228">      utility.flush(table2Name);</span>
+<span class="source-line-no">229</span><span id="line-229">    }</span>
+<span class="source-line-no">230</span><span id="line-230">    table2.close();</span>
+<span class="source-line-no">231</span><span id="line-231"></span>
+<span class="source-line-no">232</span><span id="line-232">    // First compaction for Table 1</span>
+<span class="source-line-no">233</span><span id="line-233">    long compactionTime1 = System.currentTimeMillis();</span>
+<span class="source-line-no">234</span><span id="line-234">    utility.getAdmin().majorCompact(table1Name);</span>
+<span class="source-line-no">235</span><span id="line-235">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
+<span class="source-line-no">236</span><span id="line-236">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table1Name)</span>
+<span class="source-line-no">237</span><span id="line-237">          &gt; compactionTime1);</span>
+<span class="source-line-no">238</span><span id="line-238"></span>
+<span class="source-line-no">239</span><span id="line-239">    // getCompactBoundariesForMajor always offers the cutOffTimestamp boundary now, so the first</span>
+<span class="source-line-no">240</span><span id="line-240">    // major compaction already splits the old and recent cells into separate tiers.</span>
+<span class="source-line-no">241</span><span id="line-241">    assertEquals(2, utility.getNumHFiles(table1Name, FAMILY));</span>
+<span class="source-line-no">242</span><span id="line-242"></span>
+<span class="source-line-no">243</span><span id="line-243">    utility.getMiniHBaseCluster().getRegions(table1Name).get(0).getStore(FAMILY).getStorefiles()</span>
+<span class="source-line-no">244</span><span id="line-244">      .forEach(file -&gt; {</span>
+<span class="source-line-no">245</span><span id="line-245">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
+<span class="source-line-no">246</span><span id="line-246">        assertNotNull(rangeBytes);</span>
+<span class="source-line-no">247</span><span id="line-247">        try {</span>
+<span class="source-line-no">248</span><span id="line-248">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
+<span class="source-line-no">249</span><span id="line-249">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
+<span class="source-line-no">250</span><span id="line-250">        } catch (IOException e) {</span>
+<span class="source-line-no">251</span><span id="line-251">          fail(e.getMessage());</span>
+<span class="source-line-no">252</span><span id="line-252">        }</span>
+<span class="source-line-no">253</span><span id="line-253">      });</span>
+<span class="source-line-no">254</span><span id="line-254"></span>
+<span class="source-line-no">255</span><span id="line-255">    // Second compaction for Table 1</span>
+<span class="source-line-no">256</span><span id="line-256">    long secondCompactionTime1 = System.currentTimeMillis();</span>
+<span class="source-line-no">257</span><span id="line-257">    utility.getAdmin().majorCompact(table1Name);</span>
+<span class="source-line-no">258</span><span id="line-258">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
+<span class="source-line-no">259</span><span id="line-259">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table1Name)</span>
+<span class="source-line-no">260</span><span id="line-260">          &gt; secondCompactionTime1);</span>
+<span class="source-line-no">261</span><span id="line-261"></span>
+<span class="source-line-no">262</span><span id="line-262">    assertEquals(2, utility.getNumHFiles(table1Name, FAMILY));</span>
 <span class="source-line-no">263</span><span id="line-263"></span>
-<span class="source-line-no">264</span><span id="line-264">    assertEquals(2, utility.getNumHFiles(table1Name, FAMILY));</span>
-<span class="source-line-no">265</span><span id="line-265"></span>
-<span class="source-line-no">266</span><span id="line-266">    utility.getMiniHBaseCluster().getRegions(table1Name).get(0).getStore(FAMILY).getStorefiles()</span>
-<span class="source-line-no">267</span><span id="line-267">      .forEach(file -&gt; {</span>
-<span class="source-line-no">268</span><span id="line-268">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">269</span><span id="line-269">        assertNotNull(rangeBytes);</span>
-<span class="source-line-no">270</span><span id="line-270">        try {</span>
-<span class="source-line-no">271</span><span id="line-271">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
-<span class="source-line-no">272</span><span id="line-272">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
-<span class="source-line-no">273</span><span id="line-273">        } catch (IOException e) {</span>
-<span class="source-line-no">274</span><span id="line-274">          fail(e.getMessage());</span>
-<span class="source-line-no">275</span><span id="line-275">        }</span>
-<span class="source-line-no">276</span><span id="line-276">      });</span>
-<span class="source-line-no">277</span><span id="line-277"></span>
-<span class="source-line-no">278</span><span id="line-278">    // First compaction for Table 2</span>
-<span class="source-line-no">279</span><span id="line-279">    long compactionTime2 = System.currentTimeMillis();</span>
-<span class="source-line-no">280</span><span id="line-280">    utility.getAdmin().majorCompact(table2Name);</span>
-<span class="source-line-no">281</span><span id="line-281">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
-<span class="source-line-no">282</span><span id="line-282">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table2Name)</span>
-<span class="source-line-no">283</span><span id="line-283">          &gt; compactionTime2);</span>
-<span class="source-line-no">284</span><span id="line-284"></span>
-<span class="source-line-no">285</span><span id="line-285">    assertEquals(1, utility.getNumHFiles(table2Name, FAMILY));</span>
+<span class="source-line-no">264</span><span id="line-264">    utility.getMiniHBaseCluster().getRegions(table1Name).get(0).getStore(FAMILY).getStorefiles()</span>
+<span class="source-line-no">265</span><span id="line-265">      .forEach(file -&gt; {</span>
+<span class="source-line-no">266</span><span id="line-266">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
+<span class="source-line-no">267</span><span id="line-267">        assertNotNull(rangeBytes);</span>
+<span class="source-line-no">268</span><span id="line-268">        try {</span>
+<span class="source-line-no">269</span><span id="line-269">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
+<span class="source-line-no">270</span><span id="line-270">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
+<span class="source-line-no">271</span><span id="line-271">        } catch (IOException e) {</span>
+<span class="source-line-no">272</span><span id="line-272">          fail(e.getMessage());</span>
+<span class="source-line-no">273</span><span id="line-273">        }</span>
+<span class="source-line-no">274</span><span id="line-274">      });</span>
+<span class="source-line-no">275</span><span id="line-275"></span>
+<span class="source-line-no">276</span><span id="line-276">    // First compaction for Table 2</span>
+<span class="source-line-no">277</span><span id="line-277">    long compactionTime2 = System.currentTimeMillis();</span>
+<span class="source-line-no">278</span><span id="line-278">    utility.getAdmin().majorCompact(table2Name);</span>
+<span class="source-line-no">279</span><span id="line-279">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
+<span class="source-line-no">280</span><span id="line-280">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table2Name)</span>
+<span class="source-line-no">281</span><span id="line-281">          &gt; compactionTime2);</span>
+<span class="source-line-no">282</span><span id="line-282"></span>
+<span class="source-line-no">283</span><span id="line-283">    // getCompactBoundariesForMajor always offers the cutOffTimestamp boundary now, so the first</span>
+<span class="source-line-no">284</span><span id="line-284">    // major compaction already splits the old and recent cells into separate tiers.</span>
+<span class="source-line-no">285</span><span id="line-285">    assertEquals(2, utility.getNumHFiles(table2Name, FAMILY));</span>
 <span class="source-line-no">286</span><span id="line-286"></span>
 <span class="source-line-no">287</span><span id="line-287">    utility.getMiniHBaseCluster().getRegions(table2Name).get(0).getStore(FAMILY).getStorefiles()</span>
 <span class="source-line-no">288</span><span id="line-288">      .forEach(file -&gt; {</span>
@@ -303,72 +303,67 @@
 <span class="source-line-no">290</span><span id="line-290">        assertNotNull(rangeBytes);</span>
 <span class="source-line-no">291</span><span id="line-291">        try {</span>
 <span class="source-line-no">292</span><span id="line-292">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
-<span class="source-line-no">293</span><span id="line-293">          // Table 2 uses yyyy-MM-dd HH:mm:ss format, so we need to account for second precision</span>
-<span class="source-line-no">294</span><span id="line-294">          // The parsed time will be truncated to second precision (no milliseconds)</span>
-<span class="source-line-no">295</span><span id="line-295">          long expectedOldTime = (oldTime / 1000) * 1000;</span>
-<span class="source-line-no">296</span><span id="line-296">          long expectedRecentTime = (recordTime / 1000) * 1000;</span>
-<span class="source-line-no">297</span><span id="line-297">          assertEquals(expectedOldTime, timeRangeTracker.getMin());</span>
-<span class="source-line-no">298</span><span id="line-298">          assertEquals(expectedRecentTime, timeRangeTracker.getMax());</span>
-<span class="source-line-no">299</span><span id="line-299">        } catch (IOException e) {</span>
-<span class="source-line-no">300</span><span id="line-300">          fail(e.getMessage());</span>
-<span class="source-line-no">301</span><span id="line-301">        }</span>
-<span class="source-line-no">302</span><span id="line-302">      });</span>
-<span class="source-line-no">303</span><span id="line-303"></span>
-<span class="source-line-no">304</span><span id="line-304">    // Second compaction for Table 2</span>
-<span class="source-line-no">305</span><span id="line-305">    long secondCompactionTime2 = System.currentTimeMillis();</span>
-<span class="source-line-no">306</span><span id="line-306">    utility.getAdmin().majorCompact(table2Name);</span>
-<span class="source-line-no">307</span><span id="line-307">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
-<span class="source-line-no">308</span><span id="line-308">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table2Name)</span>
-<span class="source-line-no">309</span><span id="line-309">          &gt; secondCompactionTime2);</span>
-<span class="source-line-no">310</span><span id="line-310"></span>
-<span class="source-line-no">311</span><span id="line-311">    assertEquals(2, utility.getNumHFiles(table2Name, FAMILY));</span>
-<span class="source-line-no">312</span><span id="line-312"></span>
-<span class="source-line-no">313</span><span id="line-313">    utility.getMiniHBaseCluster().getRegions(table2Name).get(0).getStore(FAMILY).getStorefiles()</span>
-<span class="source-line-no">314</span><span id="line-314">      .forEach(file -&gt; {</span>
-<span class="source-line-no">315</span><span id="line-315">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
-<span class="source-line-no">316</span><span id="line-316">        assertNotNull(rangeBytes);</span>
-<span class="source-line-no">317</span><span id="line-317">        try {</span>
-<span class="source-line-no">318</span><span id="line-318">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
-<span class="source-line-no">319</span><span id="line-319">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
-<span class="source-line-no">320</span><span id="line-320">        } catch (IOException e) {</span>
-<span class="source-line-no">321</span><span id="line-321">          fail(e.getMessage());</span>
-<span class="source-line-no">322</span><span id="line-322">        }</span>
-<span class="source-line-no">323</span><span id="line-323">      });</span>
-<span class="source-line-no">324</span><span id="line-324">  }</span>
-<span class="source-line-no">325</span><span id="line-325"></span>
-<span class="source-line-no">326</span><span id="line-326">  @Test</span>
-<span class="source-line-no">327</span><span id="line-327">  public void testShouldPerformMajorCompactionWhenTimeRangeMetadataIsNull() throws Exception {</span>
-<span class="source-line-no">328</span><span id="line-328">    ColumnFamilyDescriptorBuilder clmBuilder = ColumnFamilyDescriptorBuilder.newBuilder(FAMILY);</span>
-<span class="source-line-no">329</span><span id="line-329">    clmBuilder.setValue("hbase.hstore.engine.class", CustomTieredStoreEngine.class.getName());</span>
-<span class="source-line-no">330</span><span id="line-330">    clmBuilder.setValue(TIERING_CELL_QUALIFIER, "date");</span>
-<span class="source-line-no">331</span><span id="line-331">    TableName tableName = TableName.valueOf("testShouldCompactWhenNoTimeRangeMetadata");</span>
-<span class="source-line-no">332</span><span id="line-332">    TableDescriptorBuilder tblBuilder = TableDescriptorBuilder.newBuilder(tableName);</span>
-<span class="source-line-no">333</span><span id="line-333">    tblBuilder.setColumnFamily(clmBuilder.build());</span>
-<span class="source-line-no">334</span><span id="line-334">    utility.getAdmin().createTable(tblBuilder.build());</span>
-<span class="source-line-no">335</span><span id="line-335">    utility.waitTableAvailable(tableName);</span>
-<span class="source-line-no">336</span><span id="line-336">    Connection connection = utility.getConnection();</span>
-<span class="source-line-no">337</span><span id="line-337">    Table table = connection.getTable(tableName);</span>
-<span class="source-line-no">338</span><span id="line-338">    long recordTime = System.currentTimeMillis();</span>
-<span class="source-line-no">339</span><span id="line-339">    // Write data and flush to create store files without CUSTOM_TIERING_TIME_RANGE metadata</span>
-<span class="source-line-no">340</span><span id="line-340">    for (int i = 0; i &lt; 2; i++) {</span>
-<span class="source-line-no">341</span><span id="line-341">      Put put = new Put(Bytes.toBytes(i));</span>
-<span class="source-line-no">342</span><span id="line-342">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + i));</span>
-<span class="source-line-no">343</span><span id="line-343">      put.addColumn(FAMILY, Bytes.toBytes("date"), Bytes.toBytes(recordTime));</span>
-<span class="source-line-no">344</span><span id="line-344">      table.put(put);</span>
-<span class="source-line-no">345</span><span id="line-345">      utility.flush(tableName);</span>
-<span class="source-line-no">346</span><span id="line-346">    }</span>
-<span class="source-line-no">347</span><span id="line-347">    table.close();</span>
-<span class="source-line-no">348</span><span id="line-348"></span>
-<span class="source-line-no">349</span><span id="line-349">    HStore store =</span>
-<span class="source-line-no">350</span><span id="line-350">      (HStore) utility.getMiniHBaseCluster().getRegions(tableName).get(0).getStore(FAMILY);</span>
-<span class="source-line-no">351</span><span id="line-351">    // Verify that flushed files do not have CUSTOM_TIERING_TIME_RANGE metadata</span>
-<span class="source-line-no">352</span><span id="line-352">    for (HStoreFile sf : store.getStorefiles()) {</span>
-<span class="source-line-no">353</span><span id="line-353">      assertNull(sf.getMetadataValue(CUSTOM_TIERING_TIME_RANGE));</span>
-<span class="source-line-no">354</span><span id="line-354">    }</span>
-<span class="source-line-no">355</span><span id="line-355">    // shouldPerformMajorCompaction must return true due to null timeRangeBytes</span>
-<span class="source-line-no">356</span><span id="line-356">    assertTrue(store.shouldPerformMajorCompaction());</span>
-<span class="source-line-no">357</span><span id="line-357">  }</span>
-<span class="source-line-no">358</span><span id="line-358">}</span>
+<span class="source-line-no">293</span><span id="line-293">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
+<span class="source-line-no">294</span><span id="line-294">        } catch (IOException e) {</span>
+<span class="source-line-no">295</span><span id="line-295">          fail(e.getMessage());</span>
+<span class="source-line-no">296</span><span id="line-296">        }</span>
+<span class="source-line-no">297</span><span id="line-297">      });</span>
+<span class="source-line-no">298</span><span id="line-298"></span>
+<span class="source-line-no">299</span><span id="line-299">    // Second compaction for Table 2</span>
+<span class="source-line-no">300</span><span id="line-300">    long secondCompactionTime2 = System.currentTimeMillis();</span>
+<span class="source-line-no">301</span><span id="line-301">    utility.getAdmin().majorCompact(table2Name);</span>
+<span class="source-line-no">302</span><span id="line-302">    Waiter.waitFor(utility.getConfiguration(), 5000,</span>
+<span class="source-line-no">303</span><span id="line-303">      () -&gt; utility.getMiniHBaseCluster().getMaster().getLastMajorCompactionTimestamp(table2Name)</span>
+<span class="source-line-no">304</span><span id="line-304">          &gt; secondCompactionTime2);</span>
+<span class="source-line-no">305</span><span id="line-305"></span>
+<span class="source-line-no">306</span><span id="line-306">    assertEquals(2, utility.getNumHFiles(table2Name, FAMILY));</span>
+<span class="source-line-no">307</span><span id="line-307"></span>
+<span class="source-line-no">308</span><span id="line-308">    utility.getMiniHBaseCluster().getRegions(table2Name).get(0).getStore(FAMILY).getStorefiles()</span>
+<span class="source-line-no">309</span><span id="line-309">      .forEach(file -&gt; {</span>
+<span class="source-line-no">310</span><span id="line-310">        byte[] rangeBytes = file.getMetadataValue(CUSTOM_TIERING_TIME_RANGE);</span>
+<span class="source-line-no">311</span><span id="line-311">        assertNotNull(rangeBytes);</span>
+<span class="source-line-no">312</span><span id="line-312">        try {</span>
+<span class="source-line-no">313</span><span id="line-313">          TimeRangeTracker timeRangeTracker = TimeRangeTracker.parseFrom(rangeBytes);</span>
+<span class="source-line-no">314</span><span id="line-314">          assertEquals(timeRangeTracker.getMin(), timeRangeTracker.getMax());</span>
+<span class="source-line-no">315</span><span id="line-315">        } catch (IOException e) {</span>
+<span class="source-line-no">316</span><span id="line-316">          fail(e.getMessage());</span>
+<span class="source-line-no">317</span><span id="line-317">        }</span>
+<span class="source-line-no">318</span><span id="line-318">      });</span>
+<span class="source-line-no">319</span><span id="line-319">  }</span>
+<span class="source-line-no">320</span><span id="line-320"></span>
+<span class="source-line-no">321</span><span id="line-321">  @Test</span>
+<span class="source-line-no">322</span><span id="line-322">  public void testShouldPerformMajorCompactionWhenTimeRangeMetadataIsNull() throws Exception {</span>
+<span class="source-line-no">323</span><span id="line-323">    ColumnFamilyDescriptorBuilder clmBuilder = ColumnFamilyDescriptorBuilder.newBuilder(FAMILY);</span>
+<span class="source-line-no">324</span><span id="line-324">    clmBuilder.setValue("hbase.hstore.engine.class", CustomTieredStoreEngine.class.getName());</span>
+<span class="source-line-no">325</span><span id="line-325">    clmBuilder.setValue(TIERING_CELL_QUALIFIER, "date");</span>
+<span class="source-line-no">326</span><span id="line-326">    TableName tableName = TableName.valueOf("testShouldCompactWhenNoTimeRangeMetadata");</span>
+<span class="source-line-no">327</span><span id="line-327">    TableDescriptorBuilder tblBuilder = TableDescriptorBuilder.newBuilder(tableName);</span>
+<span class="source-line-no">328</span><span id="line-328">    tblBuilder.setColumnFamily(clmBuilder.build());</span>
+<span class="source-line-no">329</span><span id="line-329">    utility.getAdmin().createTable(tblBuilder.build());</span>
+<span class="source-line-no">330</span><span id="line-330">    utility.waitTableAvailable(tableName);</span>
+<span class="source-line-no">331</span><span id="line-331">    Connection connection = utility.getConnection();</span>
+<span class="source-line-no">332</span><span id="line-332">    Table table = connection.getTable(tableName);</span>
+<span class="source-line-no">333</span><span id="line-333">    long recordTime = System.currentTimeMillis();</span>
+<span class="source-line-no">334</span><span id="line-334">    // Write data and flush to create store files without CUSTOM_TIERING_TIME_RANGE metadata</span>
+<span class="source-line-no">335</span><span id="line-335">    for (int i = 0; i &lt; 2; i++) {</span>
+<span class="source-line-no">336</span><span id="line-336">      Put put = new Put(Bytes.toBytes(i));</span>
+<span class="source-line-no">337</span><span id="line-337">      put.addColumn(FAMILY, Bytes.toBytes("val"), Bytes.toBytes("v" + i));</span>
+<span class="source-line-no">338</span><span id="line-338">      put.addColumn(FAMILY, Bytes.toBytes("date"), Bytes.toBytes(recordTime));</span>
+<span class="source-line-no">339</span><span id="line-339">      table.put(put);</span>
+<span class="source-line-no">340</span><span id="line-340">      utility.flush(tableName);</span>
+<span class="source-line-no">341</span><span id="line-341">    }</span>
+<span class="source-line-no">342</span><span id="line-342">    table.close();</span>
+<span class="source-line-no">343</span><span id="line-343"></span>
+<span class="source-line-no">344</span><span id="line-344">    HStore store =</span>
+<span class="source-line-no">345</span><span id="line-345">      (HStore) utility.getMiniHBaseCluster().getRegions(tableName).get(0).getStore(FAMILY);</span>
+<span class="source-line-no">346</span><span id="line-346">    // Verify that flushed files do not have CUSTOM_TIERING_TIME_RANGE metadata</span>
+<span class="source-line-no">347</span><span id="line-347">    for (HStoreFile sf : store.getStorefiles()) {</span>
+<span class="source-line-no">348</span><span id="line-348">      assertNull(sf.getMetadataValue(CUSTOM_TIERING_TIME_RANGE));</span>
+<span class="source-line-no">349</span><span id="line-349">    }</span>
+<span class="source-line-no">350</span><span id="line-350">    // shouldPerformMajorCompaction must return true due to null timeRangeBytes</span>
+<span class="source-line-no">351</span><span id="line-351">    assertTrue(store.shouldPerformMajorCompaction());</span>
+<span class="source-line-no">352</span><span id="line-352">  }</span>
+<span class="source-line-no">353</span><span id="line-353">}</span>