[ 
https://issues.apache.org/jira/browse/HBASE-27058?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17543143#comment-17543143
 ] 

Andrew Kyle Purtell commented on HBASE-27058:
---------------------------------------------

bq. EnvironmentEdge is inherently problematic, as it's desired behaviour is not 
well defined.

The behavior is well defined -- the injected edge supersedes the actual system 
clock. What you get depends on the particular injected edge. As this is a 
internal test only utility I'm not sure how stringently we must define it but 
if there are specific suggestions they would be welcome. 

Where we do fall short is in implementation, when random contributors and 
committers forget about it and use System#currentTimeMillis instead. In theory 
we could address that with a custom errorProne analysis that would fail the 
build if System#currentTimeMillis is used instead of 
EnvironmentEdgeManager#currentTime but nobody has taken that idea up so it 
remains a nice to have. 

> 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: Major
>              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)

Reply via email to