Alexey Goncharuk created IGNITE-3464:
----------------------------------------
Summary: 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
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.3.4#6332)