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

Roman Puchkovskiy updated IGNITE-22916:
---------------------------------------
    Description: 
A joining node will take <revision, checksum> for the latest command it has 
applied on Metastorage recovery as <nodeRevision, nodeChecksum> and will use it 
when validating against the MG leader. It will ask the MG leader to provide its 
current history in the form of <revision, checksum> pairs. Let’s denote min and 
max revisions in the leader’s history as minRevision and maxRevision and 
leader’s checksum for revision R as leaderChecksum(R). Outcomes:
 # minRevision <= nodeRevision <= maxRevision and leaderChecksum(nodeRevision) 
= nodeChecksum -> node is allowed to join
 # minRevision <= nodeRevision <= maxRevision and leaderChecksum(nodeRevision) 
<> nodeChecksum -> the node is not allowed to join
 # nodeRevision > maxRevision -> disallow join (maybe it actually diverged and 
the leader is going to grow its history in another direction while the current 
node is joining)
 # nodeRevision < minRevision (some history is removed due to compaction) -> we 
don’t know if it diverged -> the node is not allowed to join

  was:
A joining node will take <revision, hash> for the latest command it has applied 
on Metastorage recovery as <nodeRevision, nodeHash> and will use it when 
validating against the MG leader. It will ask the MG leader to provide its 
current history in the form of <revision, hash> pairs. Let’s denote min and max 
revisions in the leader’s history as minRevision and maxRevision and leader’s 
hash for revision R as leaderHash(R). Outcomes:
 # minRevision <= nodeRevision <= maxRevision and leaderHash(nodeRevision) = 
nodeHash -> node is allowed to join
 # minRevision <= nodeRevision <= maxRevision and leaderHash(nodeRevision) <> 
nodeHash -> the node is not allowed to join
 # nodeRevision > maxRevision -> disallow join (maybe it actually diverged and 
the leader is going to grow its history in another direction while the current 
node is joining)
 # nodeRevision < minRevision (some history is removed due to compaction) -> we 
don’t know if it diverged -> the node is not allowed to join


> Validate Metastorage for divergency during join
> -----------------------------------------------
>
>                 Key: IGNITE-22916
>                 URL: https://issues.apache.org/jira/browse/IGNITE-22916
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Roman Puchkovskiy
>            Assignee: Roman Puchkovskiy
>            Priority: Major
>              Labels: iep-128, ignite-3
>
> A joining node will take <revision, checksum> for the latest command it has 
> applied on Metastorage recovery as <nodeRevision, nodeChecksum> and will use 
> it when validating against the MG leader. It will ask the MG leader to 
> provide its current history in the form of <revision, checksum> pairs. Let’s 
> denote min and max revisions in the leader’s history as minRevision and 
> maxRevision and leader’s checksum for revision R as leaderChecksum(R). 
> Outcomes:
>  # minRevision <= nodeRevision <= maxRevision and 
> leaderChecksum(nodeRevision) = nodeChecksum -> node is allowed to join
>  # minRevision <= nodeRevision <= maxRevision and 
> leaderChecksum(nodeRevision) <> nodeChecksum -> the node is not allowed to 
> join
>  # nodeRevision > maxRevision -> disallow join (maybe it actually diverged 
> and the leader is going to grow its history in another direction while the 
> current node is joining)
>  # nodeRevision < minRevision (some history is removed due to compaction) -> 
> we don’t know if it diverged -> the node is not allowed to join



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

Reply via email to