Denis Chudov created IGNITE-24069:
-------------------------------------
Summary: Turn the pending assignments into a queue
Key: IGNITE-24069
URL: https://issues.apache.org/jira/browse/IGNITE-24069
Project: Ignite
Issue Type: Improvement
Reporter: Denis Chudov
*Motivation*
In Raft, the configuration switch requires joint consensus, where the nodes
from old and new configurations are included with corresponding roles. So, we
cannot just include any node as a follower into the new configuration having it
as a learner in the previous one. The rule of joint consensus requires that
this node should be removed as a learner and after that included into the next
configuration as a peer, so there will be two configuration switches. The
downgrading should look the same.
The handlers of the pending and stable assignments’ switch should be aware of
the changes when some node (let’s say, node A) is turned from a learner into
the peer or otherwise, from peer to learner. There should be two consequent
configuration switches for either upgrade or downgrade, where in the first one,
node A will be removed as the learner, in the second one, it will be added as
peer.
The values for meta storage pending assignments prefix "assignments.pending."
should be turned into a queue of pending assignments. It is created for a
replication group by the rebalance trigger or during the switch of planned
assignments to pending, when it is detected that the direct transition from
stable assignments to pending is not possible. It will store the queue of
assignments, where each of them will contain some intermediate state of Raft
configuration, and only the last assignments in the queue will be the target
assignments.
It is important that the whole queue is logically the one rebalance, scheduled
by a single trigger. It can be modified only in the process of rebalancing. The
meaning of stable and planned assignments is not changed, and the stable
assignments’ switch happens only after the whole pending assignments queue has
been processed. So, no replicas should be stopped until that moment (only Raft
configurations may be changed), because replicas are stopped and storages are
deleted only by the stable assignments’ change listener.
*Definition of done*
Pending assignments are turned into a queue without the change in the logic.
This is the pre-requisite for further changes.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)