[ 
https://issues.apache.org/jira/browse/IGNITE-23566?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17896433#comment-17896433
 ] 

Kirill Gusakov commented on IGNITE-23566:
-----------------------------------------

In fact, every rebalance from the raft node point of view:
 * It's the transition of ConfigurationCtx.stage values STAGE_NONE -> 
STAGE_CATCHING_UP -> STAGE_JOINT -> STAGE_STABLE -> STAGE_NONE
 * If stage is not STAGE_NONE, all other concurrent configuration update will 
receive the RaftError.EBUSY
 * On the any errors we will restart the rebalance process with *the current 
term* again and again with *the target configuration of the current rebalance*

At the same time, any resetPeers operation:
 * Rewrite rebalance pendings assignments
 * Check that the state of configurationCtx is not busy
 * Rewrite node configuration
 * Increment node term
 * Run the appropriate changePeersAndLearnersAsync 

Despite the different possible races between the pending rewrite, reset 
partition onReconfigurationError and on error changePeersAndLearnersAsync:
 * The fact that the onReconfigurationError use the current term and the 
resetPeers increment it on the success reset - save us from the old infinite 
onReconfigurationError listeners. More over, we will stop 
onReconfigurationError cycle if receive the OK status after the request with 
expired term

But, during the investigation I found out another issues and created 
appropriate tickets:
 * If changePeersAndLearnersAsync request failed and sendWithRetry can't fix it 
- we will fail the whole metastore notification future, but we should retry 
instead https://issues.apache.org/jira/browse/IGNITE-23633
 * We have a bug: error on resetPeers is not handling in any way. It's a 
problem for the manual reset at the current time 
https://issues.apache.org/jira/browse/IGNITE-23635

Nice to have:
 * Configuration for onReconfigurationError retries delay 
https://issues.apache.org/jira/browse/IGNITE-23634

> Investigate possible races between resetPartitions and infinite rebalance 
> retries
> ---------------------------------------------------------------------------------
>
>                 Key: IGNITE-23566
>                 URL: https://issues.apache.org/jira/browse/IGNITE-23566
>             Project: Ignite
>          Issue Type: Improvement
>            Reporter: Kirill Gusakov
>            Assignee: Kirill Gusakov
>            Priority: Major
>              Labels: ignite-3
>
> *Motivation*
> For now our rebalance fail-over is a pretty trivial infinite loop of retries:
> - on the any issues on the catch up phase or later we call the 
> onReconfigurationError listener
> - for now this listener just count the retries and call 
> changePeersAndLearnersAsync logic again and again
> At the same time, we can call the resetPartitions logic and rewrite pending 
> assignments, potentially at the any moment. So, we can have a race between 
> rebalance retries and resetPartitions.
> *Definition of done*
> Under this ticket we need to investigate all possible issues, if any, and 
> create appropriate issues to resolve.



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

Reply via email to