[ 
https://issues.apache.org/jira/browse/IGNITE-11624?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16816180#comment-16816180
 ] 

Amelchev Nikita commented on IGNITE-11624:
------------------------------------------

I have prepared PR to fix the issue.
I added the future in the DiscoverySpiListener to wait for all previous events 
before the disconnect event will be processed.

Discovery implementations wait for the discovery will be notified on disconnect 
before reconnecting attempt. The future in the discovery listener will wait for 
handling the disconnect event by the event thread. Therefore no one previous 
cluster event will be processed after reconnecting attempt.

[~agoncharuk], Hi, could you take a look, please?


> Discovery SPI: The client can handle events from the previous cluster after 
> reconnect.
> --------------------------------------------------------------------------------------
>
>                 Key: IGNITE-11624
>                 URL: https://issues.apache.org/jira/browse/IGNITE-11624
>             Project: Ignite
>          Issue Type: Bug
>            Reporter: Amelchev Nikita
>            Assignee: Amelchev Nikita
>            Priority: Major
>             Fix For: 2.8
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Discovery has a queue for events. It's processed by event thread. If we hold 
> up event processing using a listener on the client side and restarts cluster 
> - the client will reconnect. After it reconnects it will continue processing 
> events from the previous cluster. 
> This behavior produces bugs in MvccProcessor (IGNITE-11460) and [hanging of 
> partitions exchange|https://github.com/NSAmelchev/ignite/pull/26/files] on 
> the client side. The reason is that discovery notifies components about 
> reconnection in the notifier thread by calling the 'onLocalJoin' method. 
> After it (or at the same time), components can process events from the 
> previous cluster in their listeners and break their logic. 
> The order of events is fine - after processing previous cluster events - it 
> will process client disconnection/reconnection and new cluster events.
> The possible solution is to fix discovery logic. Make a guarantee that no one 
> event from the previous cluster will be processed after the client reconnect 
> ('onLocalJoin' called). For example, wait for the client disconnect event 
> will be processed in the discovery event thread. Then start attempt to 
> reconnect.
> [Dev-list 
> discussion.|http://apache-ignite-developers.2346864.n4.nabble.com/The-client-can-handle-events-from-the-previous-cluster-after-reconnect-td41392.html]
>  [Reproducer.|https://github.com/NSAmelchev/ignite/pull/26/files]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to