[
https://issues.apache.org/jira/browse/IGNITE-23870?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Mirza Aliev updated IGNITE-23870:
---------------------------------
Description:
h3. Motivation
For the purposes of phase 2 of
[IEP-131|https://cwiki.apache.org/confluence/display/IGNITE/IEP-131%3A+Partition+Majority+Unavailability+Handling],
we need to have an ability to receive chain of assignments for the provided
part id, starting form the most recent and until the first stable that was set
gracefully. This is needed when node restarts and tried to understand if raft
node for the provided part id must be started no the node or not
h3. Implementation notes
We introduce new filed in the MS for the partition, let's say
{{assignmnts.chain}}
Every time we do {{doStableKeySwitch}}, we update this filed according to this
rule
{code:java}
on doStableKeySwitch
if !pending.force && !secondPhaseOfReset
ms.chain = pending/stable
else if !pending.force && secondPhaseOfReset
ms.chain.last = stable
else
ms.chain = ms.chain + pending/stable
{code}
For the case of two phase reset, which could be determined by new flag in
{{Assignments.secondPhaseOfReset}} (see
https://issues.apache.org/jira/browse/IGNITE-23879), when we do switch from
single node to several nodes on the second phase, we could rewrite the last
element of a chain that is presented as the single node to a new stable that
contains this node and other nodes.
Also chain must be initialised when stable is initialised.
h3. Definition of done
* It must be possible to receive assignments chain for the provided part id
based on MS.
* This chain must contain all stable changes from the most recent until the
first stable that was set gracefully.
was:
h3. Motivation
For the purposes of phase 2 of
[IEP-131|https://cwiki.apache.org/confluence/display/IGNITE/IEP-131%3A+Partition+Majority+Unavailability+Handling],
we need to have an ability to receive chain of assignments for the provided
part id, starting form the most recent and until the first stable that was set
gracefully. This is needed when node restarts and tried to understand if raft
node for the provided part id must be started no the node or not
h3. Implementation notes
We introduce new filed in the MS for the partition, let's say
{{assignmnts.chain}}
Every time we do {{doStableKeySwitch}}, we update this filed according to this
rule
{code:java}
on doStableKeySwitch
if !pending.force && !secondPhaseOfReset
ms.chain = pending/stable
else if !pending.force && secondPhaseOfReset
ms.chain.last = stable
else
ms.chain = ms.chain + pending/stable
{code}
For the case of two phase reset, which could be determined by new flag in
{{Assignments.secondPhaseOfReset}} (see
https://issues.apache.org/jira/browse/IGNITE-23879), when we do switch from
single node to several nodes on the second phase, we could rewrite the last
element of a chain that is presented as the single node to a new stable that
contains this node and other nodes.
Also chain must be initialised when stable is initialised.
h3. Definition of done
* It must be possible to receive assignments chain for the provided part id
based on MS
* This chain must contain all stable changes from the most recent until the
first stable that was set gracefully
> Implement a method to receive a chain of topology changes
> ---------------------------------------------------------
>
> Key: IGNITE-23870
> URL: https://issues.apache.org/jira/browse/IGNITE-23870
> Project: Ignite
> Issue Type: Improvement
> Reporter: Mirza Aliev
> Assignee: Mirza Aliev
> Priority: Major
> Labels: ignite-3
>
> h3. Motivation
> For the purposes of phase 2 of
> [IEP-131|https://cwiki.apache.org/confluence/display/IGNITE/IEP-131%3A+Partition+Majority+Unavailability+Handling],
>
> we need to have an ability to receive chain of assignments for the provided
> part id, starting form the most recent and until the first stable that was
> set gracefully. This is needed when node restarts and tried to understand if
> raft node for the provided part id must be started no the node or not
> h3. Implementation notes
> We introduce new filed in the MS for the partition, let's say
> {{assignmnts.chain}}
> Every time we do {{doStableKeySwitch}}, we update this filed according to
> this rule
> {code:java}
> on doStableKeySwitch
> if !pending.force && !secondPhaseOfReset
> ms.chain = pending/stable
> else if !pending.force && secondPhaseOfReset
> ms.chain.last = stable
> else
> ms.chain = ms.chain + pending/stable
> {code}
>
> For the case of two phase reset, which could be determined by new flag in
> {{Assignments.secondPhaseOfReset}} (see
> https://issues.apache.org/jira/browse/IGNITE-23879), when we do switch from
> single node to several nodes on the second phase, we could rewrite the last
> element of a chain that is presented as the single node to a new stable that
> contains this node and other nodes.
> Also chain must be initialised when stable is initialised.
>
> h3. Definition of done
> * It must be possible to receive assignments chain for the provided part id
> based on MS.
> * This chain must contain all stable changes from the most recent until the
> first stable that was set gracefully.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)