I'm talking about Ignite 3 only. Though I do not think it will be hard to add awaitility in Ignite 2 as well.
On Wed, Oct 29, 2025 at 5:12 PM Aleksandr Polovtsev <[email protected]> wrote: > It's also worth noting that "waitForCondition" requires "assertTrue", which > is easy to forget and we had a lot of bugs because of that. > > Also, are you talking about both Ignite 2 and Ignite 3? Does Ignite 2 use > Awaitility? > > On Wed, Oct 29, 2025 at 3:07 PM Pavel Tupitsyn <[email protected]> > wrote: > > > +1, sounds great. Did not know about that library. > > > > On Wed, Oct 29, 2025 at 2:58 PM Ivan Zlenko <[email protected]> > wrote: > > > > > > Hi Ignite community! > > > I have a small proposition in regards to our testing. > > > We have an utility method called waitForCondition which we are using, > as > > it > > > implies from the name of the method, to wait until some condition will > be > > > met in the test. As soon as the condition is met this method returns > > true, > > > or false if the specified condition is not met for specified timeout. > > > After that our common pattern is to use assertTrue to verify whether > > > waitForCondition is completed successfully. > > > However we have a library awaitility in our test classpath in many > > modules > > > which are made for similar purposes. The main difference here is that > > this > > > library provides a clear message on what condition failed to meet in > what > > > time frame. > > > Let's take a look at following example: > > > > > > assertTrue(waitForCondition(() -> 60 == 61, 5_000)); > > > > > > In that case result of the assertion will be the following: > > > > > > org.opentest4j.AssertionFailedError: > > > Expected :true > > > Actual :false > > > > > > As we can see it is hard to understand what went wrong. > > > > > > The same scenario using awaitility: > > > > > > await().timeout(Duration.ofSeconds(5)).until(() -> 60, equalTo(61)); > > > > > > Will result in the following error: > > > > > > org.awaitility.core.ConditionTimeoutException: Lambda expression in > > > > > > org.apache.ignite.internal.ItApplyPartitionRaftLogOnAnotherNodesCompatibilityTest > > > expected <61> but was <60> within 5 seconds. > > > > > > Not only is it easier to understand what we want to achieve in the > > > testing scenario, but the error message is much clearer compared to > > > waitForCondition. > > > > > > Also, we have a very huge bug in waitForCondition where it will not > > > work at all if the supplier is frozen or executing more than specified > > > timeout. For example: > > > > > > assertTrue(waitForCondition(() -> { > > > try { > > > Thread.sleep(10_000); > > > } catch (InterruptedException e) { > > > throw new RuntimeException(e); > > > } > > > > > > return true; > > > }, 5_000)); > > > > > > I would've expected that this code snippet would fail after 5 seconds, > > > but it completes successfully after 10 seconds. > > > > > > So my proposition to the community is to deprecate waitForCondition > > > completely and eventually switch to awaitility through the whole > > > Ignite code base. > > > > > > Sincerely yours, > > > > > > Ivan Zlenko. > > > > > -- > With regards, > Aleksandr Polovtsev >
