[ 
https://issues.apache.org/jira/browse/IGNITE-23259?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Alexander Lapin updated IGNITE-23259:
-------------------------------------
    Description: 
{code:java}
org.opentest4j.AssertionFailedError: expected: <true> but was: <false>  at 
app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
  at 
app//org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
  at app//org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)  at 
app//org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)  at 
app//org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:31)  at 
app//org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:183)  at 
app//org.apache.ignite.internal.placementdriver.PlacementDriverManagerTest.checkLeaseCreated(PlacementDriverManagerTest.java:660)
  at 
app//org.apache.ignite.internal.placementdriver.PlacementDriverManagerTest.testRedirectionAcceptance(PlacementDriverManagerTest.java:614)
 {code}
The reason for the failure is that leaseGrantedMessageResponse may be ignored 
because of agreement cancellation e.g. in case if lease update invoke is 
!success.
{code:java}
msManager.invoke(
        or(notExists(key), value(key).eq(leasesCurrent.leasesBytes())),
        put(key, renewedValue),
        noop()
).whenComplete((success, e) -> {
    ...

    if (!success) {
        LOG.warn("Lease update invocation failed because of concurrent 
update.");

        cancelAgreements(toBeNegotiated.keySet());

        return;
    } {code}
PlacementDriverManagerTest#testRedirectionAcceptance is however doesn't expect 
the response to be ignored and won't repeat redirect proposal on next 
miss-requests.

In other words the flow is following.
 # LeaseUpdater -> leaseGrantedMessage(1234) -> 
testRedirectionAcceptance(host:1234) -> 
leaseGrantedMessageResponse(accepted=false, redirectProposal=1235)
 # In case of test failure, aforementioned response will be skipped, because of 
race on invokes.
 # LeaseUpdater -> retry leaseGrantedMessage(1234) -> 
testRedirectionAcceptance(host:1234) -> 
leaseGrantedMessageResponse(accepted=false) // 
.accepted(redirect.get().equals(handler))
 # Infinite loop for step 3.

  was:
{code:java}
org.opentest4j.AssertionFailedError: expected: <true> but was: <false>  at 
app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
  at 
app//org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
  at app//org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)  at 
app//org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)  at 
app//org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:31)  at 
app//org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:183)  at 
app//org.apache.ignite.internal.placementdriver.PlacementDriverManagerTest.checkLeaseCreated(PlacementDriverManagerTest.java:660)
  at 
app//org.apache.ignite.internal.placementdriver.PlacementDriverManagerTest.testRedirectionAcceptance(PlacementDriverManagerTest.java:614)
 {code}


> PlacementDriverManagerTest.testRedirectionAcceptance may fail with 
> AssertionFailedError: expected: <true> but was: <false>
> --------------------------------------------------------------------------------------------------------------------------
>
>                 Key: IGNITE-23259
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23259
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Alexander Lapin
>            Priority: Major
>              Labels: ignite-3
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> {code:java}
> org.opentest4j.AssertionFailedError: expected: <true> but was: <false>  at 
> app//org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151)
>   at 
> app//org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132)
>   at app//org.junit.jupiter.api.AssertTrue.failNotTrue(AssertTrue.java:63)  
> at app//org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:36)  at 
> app//org.junit.jupiter.api.AssertTrue.assertTrue(AssertTrue.java:31)  at 
> app//org.junit.jupiter.api.Assertions.assertTrue(Assertions.java:183)  at 
> app//org.apache.ignite.internal.placementdriver.PlacementDriverManagerTest.checkLeaseCreated(PlacementDriverManagerTest.java:660)
>   at 
> app//org.apache.ignite.internal.placementdriver.PlacementDriverManagerTest.testRedirectionAcceptance(PlacementDriverManagerTest.java:614)
>  {code}
> The reason for the failure is that leaseGrantedMessageResponse may be ignored 
> because of agreement cancellation e.g. in case if lease update invoke is 
> !success.
> {code:java}
> msManager.invoke(
>         or(notExists(key), value(key).eq(leasesCurrent.leasesBytes())),
>         put(key, renewedValue),
>         noop()
> ).whenComplete((success, e) -> {
>     ...
>     if (!success) {
>         LOG.warn("Lease update invocation failed because of concurrent 
> update.");
>         cancelAgreements(toBeNegotiated.keySet());
>         return;
>     } {code}
> PlacementDriverManagerTest#testRedirectionAcceptance is however doesn't 
> expect the response to be ignored and won't repeat redirect proposal on next 
> miss-requests.
> In other words the flow is following.
>  # LeaseUpdater -> leaseGrantedMessage(1234) -> 
> testRedirectionAcceptance(host:1234) -> 
> leaseGrantedMessageResponse(accepted=false, redirectProposal=1235)
>  # In case of test failure, aforementioned response will be skipped, because 
> of race on invokes.
>  # LeaseUpdater -> retry leaseGrantedMessage(1234) -> 
> testRedirectionAcceptance(host:1234) -> 
> leaseGrantedMessageResponse(accepted=false) // 
> .accepted(redirect.get().equals(handler))
>  # Infinite loop for step 3.



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

Reply via email to