[
https://issues.apache.org/jira/browse/IGNITE-25146?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17947810#comment-17947810
]
Vladislav Pyatkov commented on IGNITE-25146:
--------------------------------------------
Merged e76041c2e667de37bcb3d7101e1fc9dcf0ba8c29
> Data loss after rebalance
> -------------------------
>
> Key: IGNITE-25146
> URL: https://issues.apache.org/jira/browse/IGNITE-25146
> Project: Ignite
> Issue Type: Bug
> Reporter: Denis Chudov
> Assignee: Denis Chudov
> Priority: Major
> Labels: ignite-3
> Time Spent: 50m
> Remaining Estimate: 0h
>
> The root cause is the optimization preventing the double storage update. We
> keep the primary replica as the most up-to-date one, and its storage is
> updated before the changes are replicated to raft. In raft state machine
> those changes are not applied if this condition itn’t met:
> {{}}
> {code:java}
> if (cmd.full() ||
> !localNodeId.equals(storageLeaseInfo.primaryReplicaNodeId())){code}
> {{ }}
> In the case of non-full transaction, we write to the storage only if the
> local node is not the same as the previously chosen primary replica
> (storageLeaseInfo is the value saved to the storage). So, *the actual
> scenario* was the following:
> * node0 is saved as the primary replica leaseholder for partition N;
> * value X is written to the storage of partition N on node0 before
> replication (because node0 is primary);
> * value X is replicated and is not written to the storage once more;
> * filter is changed, partition N is moved to node1, evicted from node0;
> * filter is changed again and partition N is moved back;
> * during the rebalance, we apply raft log (no snapshot), so the commands are
> applied: PrimaryReplicaChangeCommand (writing node0 as the primary to the
> storage), UpdateAllCommand, WriteIntentSwitchCommand;
> * on UpdateAllCommand,
> {{localNodeId.equals(storageLeaseInfo.primaryReplicaNodeId()}} is true and no
> changes are written to the storage.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)