[ 
https://issues.apache.org/jira/browse/IGNITE-19129?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Aleksandr Polovtcev updated IGNITE-19129:
-----------------------------------------
    Fix Version/s: 3.0.0-beta2

> Remove parallel Watch processing
> --------------------------------
>
>                 Key: IGNITE-19129
>                 URL: https://issues.apache.org/jira/browse/IGNITE-19129
>             Project: Ignite
>          Issue Type: Task
>            Reporter: Aleksandr Polovtcev
>            Assignee: Aleksandr Polovtcev
>            Priority: Major
>              Labels: ignite-3
>             Fix For: 3.0.0-beta2
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Current implementation of Parallel Meta Storage Watches works as following:
> # Every Watch has an associated unique ID and is processed independently from 
> other Watches.
> # After a Watch has finished processing an event, the processed revision and 
> the Watch ID gets saved in the Vault.
> # During recovery, a minimum processed revision is computed among all Watches 
> and events are replayed, starting from that revision. If a Watch has already 
> processed an event, it discards it.
>  
> This approach leads to a problem which can happen during recovery when 
> interacting with the Configuration component:
> # Imagine two Watches, one being the Watch registered by the Configuration 
> component.
> # One Watch has processed a revision 5, and the Configuration Watch has 
> processed a revision 6. After that the node is stopped.
> # When the node is started again, the recovery process kicks in and the 
> Configuration component notifies its listeners about its current state as of 
> revision 6. It means that components that are dependent on the Configuration 
> component have indirectly observed the 6th revision and may have completed 
> their Versioned Values, for example.
> # After that, Meta Storage recovery starts and events get replayed. Events 
> will start from revision 5 as it's the lowest processed revision. Now imagine 
> that, during the replay, the first Watch needs to access a component's 
> Versioned Value and will try to do that using revision 5. However, this 
> Versioned Value will never have a value for this revision, since it has 
> already been completed by the Configuration component with the revision 6.
>  
> Since I don't see viable solution to this problem, it is proposed to disable 
> fully parallel Watch processing and require so that no Watches can process a 
> new revision until all Watches have finished processing events from the 
> previous revision. 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to