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

Aleksandr Polovtcev updated IGNITE-19129:
-----------------------------------------
    Description: 
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. 

  was:
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:

WIP 


> 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
>
> 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