[
https://issues.apache.org/jira/browse/IGNITE-3464?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16295826#comment-16295826
]
ASF GitHub Bot commented on IGNITE-3464:
----------------------------------------
GitHub user BiryukovVA opened a pull request:
https://github.com/apache/ignite/pull/3250
IGNITE-3464
Fixed bug - race between partition exchange and prepare/finish requests.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/BiryukovVA/ignite IGNITE-3464
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/ignite/pull/3250.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #3250
----
commit a370e2f30008b244f26fcdda0eb0a30e8132f04a
Author: Vitaliy Biryukov <[email protected]>
Date: 2017-12-18T23:15:24Z
IGNITE-3464: Fixed bug - race between partition exchange and prepare/finish
requests.
----
> 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
>
> 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
(v6.4.14#64029)