Amelchev Nikita created IGNITE-11460:
----------------------------------------
Summary: MVCC: Possible race on coordinator changing on client
reconnection.
Key: IGNITE-11460
URL: https://issues.apache.org/jira/browse/IGNITE-11460
Project: Ignite
Issue Type: Bug
Reporter: Amelchev Nikita
Assignee: Amelchev Nikita
Fix For: 2.8
I found that the wrong coordinator can be set in case of client reconnect:
{noformat}
assert newCrd.topologyVersion().compareTo(curCrd.topologyVersion()) > 0;
java.lang.AssertionError
at
org.apache.ignite.internal.processors.cache.mvcc.MvccProcessorImpl.onCoordinatorChanged(MvccProcessorImpl.java:541)
at
org.apache.ignite.internal.processors.cache.mvcc.MvccProcessorImpl.onLocalJoin(MvccProcessorImpl.java:416)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.onDiscovery0(GridDiscoveryManager.java:851)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$4.lambda$onDiscovery$0(GridDiscoveryManager.java:601)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body0(GridDiscoveryManager.java:2681)
at
org.apache.ignite.internal.managers.discovery.GridDiscoveryManager$DiscoveryMessageNotifierWorker.body(GridDiscoveryManager.java:2719)
at
org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120)
at java.lang.Thread.run(Thread.java:748)
{noformat}
I have attached reproducer in PR.
The main reason is that coordinator can be changed from discovery event thread
when the client already disconnect (disconnection processed in notifier thread
and change coordinator on onDisconnected method).
Coordinator can be changed in cases:
1. notifier disco thread: onDisconnected method
2. event disco thread: onDiscovery listener.
and events can be processed with some delay and override coordinator that set
in notifier thread.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)