Jeffrey Zhong created HBASE-7384:
------------------------------------
Summary: Introduing waitForCondition function into test cases
Key: HBASE-7384
URL: https://issues.apache.org/jira/browse/HBASE-7384
Project: HBase
Issue Type: Test
Components: test
Reporter: Jeffrey Zhong
Recently I'm working on flaky test cases and found we have many places using
while loop and sleep to wait for a condition to be true. There are several
issues in existing ways:
1) Many similar code doing the same thing
2) When time out happens, different errors are reported without explicitly
indicating a time out situation
3) When we want to increase the max timeout value to verify if a test case
fails due to a not-enough time out value, we have to recompile & redeploy code
I propose to create a waitForCondition function as a test utility function like
the following:
{code}
public interface WaitCheck {
public boolean Check() ;
}
public boolean waitForCondition(int timeOutInMilliSeconds, int
checkIntervalInMilliSeconds, WaitCheck s)
throws InterruptedException {
int multiplier = 1;
String multiplierProp = System.getProperty("extremeWaitMultiplier");
if(multiplierProp != null) {
multiplier = Integer.parseInt(multiplierProp);
if(multiplier < 1) {
LOG.warn(String.format("Invalid extremeWaitMultiplier property
value:%s. is ignored.", multiplierProp));
multiplier = 1;
}
}
int timeElapsed = 0;
while(timeElapsed < timeOutInMilliSeconds * multiplier) {
if(s.Check()) {
return true;
}
Thread.sleep(checkIntervalInMilliSeconds);
timeElapsed += checkIntervalInMilliSeconds;
}
assertTrue("WaitForCondition failed due to time out(" +
timeOutInMilliSeconds + " milliseconds expired)",
false);
return false;
}
{code}
By doing the above way, there are several advantages:
1) Clearly report time out error when such situation happens
2) Use System property extremeWaitMultiplier to increase max time out
dynamically for a quick verification
3) Standardize current wait situations
Pleas let me know what your thoughts on this.
Thanks,
-Jeffrey
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira