You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2017/12/18 23:18:00 UTC
[jira] [Commented] (IGNITE-3464) Possible race between partition
exchange and prepare/finish requests
[ 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 <bi...@gmail.com>
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)