Alexey Goncharuk commented on IGNITE-3464:

[~Jokser] Can you please take a look at the provided PR, given your expertise 
in exchange counters validation? 

> Possible race between partition exchange and prepare/finish requests
> --------------------------------------------------------------------
>                 Key: IGNITE-3464
>                 URL: https://issues.apache.org/jira/browse/IGNITE-3464
>             Project: Ignite
>          Issue Type: Bug
>          Components: cache
>    Affects Versions: ignite-1.4
>            Reporter: Alexey Goncharuk
>            Assignee: Vitaliy Biryukov
>            Priority: Major
>             Fix For: 2.6
> Consider the following scenario:
> Two nodes A (coordinator), B. Node C is joining the grid. Current topology 
> version is 2.
>  - Node A starts a transaction on version 2 and sends a prepare request to 
> node B
>  - Discovery event happens on node A. Exchange future is created, captures 
> the transaction and waits for this transaction to finish.
>  - Discovery event happens on node B. Exchange future is created, but since 
> there is no transaction on this node (the request has not been processed 
> yet), partition release future is completed and exchange waits for an ACK 
> from coordinator.
>  - Prepare request is processed on node B
>  - Node A commits the transaction locally, partition release future is 
> completed. Both finish request and exchange message are sent to the node B.
>  - Node B processes the exchange message first and completes exchange.
>  - Node C starts rebalancing from node B and acquires stale value of the key 
> which was supposed to be updated in the transaction.
>  - Node B processes finish request and commits the transaction.
> As a result, node B and C have different values stored in the cache.

This message was sent by Atlassian JIRA

Reply via email to