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