[
https://issues.apache.org/jira/browse/RATIS-1770?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17699916#comment-17699916
]
Tsz-wo Sze commented on RATIS-1770:
-----------------------------------
bq. ... onFollowerAppendEntriesReply() is then called to retry
sendStartLeaderElection().
That's a good point. Then, let's keep using sendStartLeaderElection() in
onFollowerAppendEntriesReply().
bq. ... TransferLeadership should not fail immediately if the transferee is not
up-to-date ...
Agree. The client should wait in this case.
bq. A leader election should not block the raft group very long by default,
normally within a random election timeout.
I mean the timeout to fail a TransferLeadershipRequest. It should neither be
random nor related to election timeout. We should just use
RaftServerConfigKeys.Rpc.requestTimeout.
bq. Maybe we should make ratis-shell to use
RaftServerConfigKeys.Rpc.requestTimeout as default.
Sure.
bq. Another problem is in the error handling when transferee is not up-to-date
...
How about keep waiting for both cases?
> Yield leader to higher priority peer by TransferLeadership
> ----------------------------------------------------------
>
> Key: RATIS-1770
> URL: https://issues.apache.org/jira/browse/RATIS-1770
> Project: Ratis
> Issue Type: Sub-task
> Reporter: Kaijie Chen
> Assignee: Kaijie Chen
> Priority: Minor
> Attachments: 845_review.patch
>
> Time Spent: 1h 10m
> Remaining Estimate: 0h
>
> Followup RATIS-1762.
> There might be race conditions between priority-based YieldLeadership and
> user-requested TransferLeadership. For example:
> ||Node||Role||Priority||
> |Peer 1|Leader|0|
> |Peer 2|Follower|1|
> |Peer 3|Follower|1|
> If user requested TransferLeadership to peer 3, while the YieldLeadership
> found peer 2 has higher priority than current leader.
> Peer 1 will send StartLeaderElection to both peer 2 and peer 3, and there
> might be a race condition (although it's benign).
> One immediate thought is to use the new TransferLeadership to yield
> leadership to higher priority peer.
> But it may cause following problems as quoted:
> {quote}If the higher priority peer lags behind a lot, it may take some time
> to catch up the latest transaction. If the prior leader reject client
> requests, then the service may be unavailable for a long time.
> {quote}
> To solve this problem, the old leader should only start TransferLeadership
> *iff* the higher priority peer is up-to-date.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)