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

Denis Chudov commented on IGNITE-28388:
---------------------------------------

It seems to me, that the assertion is fragile: the test listens the requests, 
and fails of there are more than one, but we have a mechanism of durable 
cleanup, which may perform retry of write intent switch due to exception. This 
may cause instability.

In my opinion, the test should check that there were no retries (no write 
intent switch requests) after write intent switch is successfully done. 

Without the check of the fact of the switch, the test cannot determine whether 
the additional request was valid or not.

> ItTxCleanupTest#writeIntentSwitchHappensOncePerTx(readsOnly = false) is flaky
> -----------------------------------------------------------------------------
>
>                 Key: IGNITE-28388
>                 URL: https://issues.apache.org/jira/browse/IGNITE-28388
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Mikhail Efremov
>            Priority: Major
>              Labels: MakeTeamcityGreenAgain, ignite-3
>
> *Subject test*
> {{ItTxCleanupTest#writeIntentSwitchHappensOncePerTx(readsOnly = false)}}
> *Reason to fail*
> {code:java}
> java.lang.AssertionError: 
> Expected: is <1>
>      but: was <2>
> {code}
> *Full stacktrace log*
> {code:java}
> java.lang.AssertionError: 
> Expected: is <1>
>      but: was <2>
> java.lang.AssertionError:
> Expected: is <1>
>      but: was <2>
>   at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:20)
>   at org.hamcrest.MatcherAssert.assertThat(MatcherAssert.java:6)
>   at 
> org.apache.ignite.internal.tx.ItTxCleanupTest.writeIntentSwitchHappensOncePerTx(ItTxCleanupTest.java:82)
>   at java.base/java.lang.reflect.Method.invoke(Method.java:568)
>   at java.base/java.util.Optional.ifPresent(Optional.java:178)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
>   at 
> java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
>   at 
> java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
>   at 
> java.base/java.util.Spliterators$ArraySpliterator.forEachRemaining(Spliterators.java:992)
>   at 
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
>   at 
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
>   at 
> java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>   at 
> java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
>   at 
> java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
>   at 
> java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
>   at 
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
>   at 
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
>   at 
> java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>   at 
> java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
>   at 
> java.base/java.util.stream.ReferencePipeline$7$1.accept(ReferencePipeline.java:276)
>   at 
> java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
>   at 
> java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
>   at 
> java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
>   at 
> java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
>   at 
> java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
>   at 
> java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
>   at 
> java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
>   at 
> java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
>   at 
> java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
>   at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
>   at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to