Andrey N. Gura created IGNITE-15941:
---------------------------------------

             Summary: Flaky test 
FailureProcessorThreadDumpThrottlingTest.testThrottlingPerFailureType
                 Key: IGNITE-15941
                 URL: https://issues.apache.org/jira/browse/IGNITE-15941
             Project: Ignite
          Issue Type: Bug
            Reporter: Andrey N. Gura
            Assignee: Andrey N. Gura
             Fix For: 2.12


The test 
{{FailureProcessorThreadDumpThrottlingTest.testThrottlingPerFailureType}} is 
flaky. See stack trace:

{noformat}
java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.assertTrue(Assert.java:41)
    at org.junit.Assert.assertTrue(Assert.java:52)
    at 
org.apache.ignite.testframework.junits.JUnitAssertAware.assertTrue(JUnitAssertAware.java:33)
    at 
org.apache.ignite.internal.processors.failure.FailureProcessorThreadDumpThrottlingTest.testThrottlingPerFailureType(FailureProcessorThreadDumpThrottlingTest.java:183)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at 
org.apache.ignite.testframework.junits.GridAbstractTest$7.run(GridAbstractTest.java:2402)
    at java.lang.Thread.run(Thread.java:748)
{noformat}

The problem is usage of different sources of time in the test and in a 
production code. While the test uses system timer for sleeping 
({{Thread.sleep}}) the production code uses timer thread which refreshes a 
cached time value periodically ({{IgniteUtils.currentTimeMillis}}). As result 
the following situation is possible: the test's thread sleeps some given time 
(3000 ms), wakes up and check cached time from timer thread which is still lags 
behind the test's thread because timer thread didn't get quantum from thread 
scheduler. Such situation breaks invariant and test fails. 

This could be fixed in two ways:
1. fix the test in such way when the test's thread waits proper time value from 
the timer thread
2. fix production code by changing {{U.currentTimeMillis}} call to 
{{System.currentTimeMillis}}.

Because failure processor is not performance critical component the second way 
is better the the first way because such solution allows to avoid similar bugs 
in other tests.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to