[
https://issues.apache.org/jira/browse/HBASE-27058?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17541169#comment-17541169
]
Geoffrey Jacoby commented on HBASE-27058:
-----------------------------------------
Some more context: at a high level, what is needed is a way to _synchronously_
request a major compaction in an IT test and not proceed until after the major
compaction is done.
Since HBase doesn't provide a way to do that directly (I think it did a long
time ago on the Admin API?), Phoenix has some test utilities that use the Admin
API to request a major compaction, and then loop on
Admin.getLastMajorCompactionTimestamp waiting for it to update to confirm the
major compaction has taken place.
This is necessary because Phoenix has some coprocessor hooks that modify
compaction behavior that need to be tested. (For example, Phoenix has an option
to block major compaction from reaping deleted / overwritten / TTL expired
Cells for a certain window of time. This is necessary to keep Phoenix global
index verification and rebuilds from being messed up by an unlucky major
compaction, because HBase has no idea that the base HBase table and index HBase
table are logically linked.)
> Admin#getLastMajorCompactionTimestamp() doesn't get updated when the
> EnvironmentEdgeManager clock is stopped
> ------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-27058
> URL: https://issues.apache.org/jira/browse/HBASE-27058
> Project: HBase
> Issue Type: Bug
> Affects Versions: 2.5.0
> Reporter: Istvan Toth
> Priority: Minor
> Labels: test
>
> In Hbase 2.0-2.4 it is possible to check for a finished compaction by pollingĀ
> Admin.getLastMajorCompactionTimestamp() for the table under compaction, even
> when the clock is stopped via EnvironmentEdgeManager.
> However, in Hbase 2.5 the Admin.getLastMajorCompactionTimestamp() will not be
> updated even after the compaction is finished, and getCompactionState()
> returns NONE.
> I am not even sure that this is bug, however, this has broken one of our
> Phoenix tests, and may cause problems for others.
> This is the test code that breaks:
> [https://github.com/apache/phoenix/blob/8aa825ed88828a99d40fdb68eb2f930981cd8a6b/phoenix-core/src/test/java/org/apache/phoenix/util/TestUtil.java#L818]
> Admin.getLastMajorCompactionTimestamp() seems to take the value from the
> Metrics, so I guess that the metrics no longer get updated somewhere when the
> clock is stopped.
> I did not dig deeper than that.
--
This message was sent by Atlassian Jira
(v8.20.7#820007)