You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Jeffrey Zhong (JIRA)" <ji...@apache.org> on 2012/12/19 00:46:12 UTC
[jira] [Created] (HBASE-7384) Introduing waitForCondition function
into test cases
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