Dat:

That’s a confusingly-named variable, surely needs a comment. Remembering from a 
long time ago trying to work with PreferredLeader, the problem is that you 
can’t _replace_ the head because that’s the one that actually is the leader. 
You have to spoof that by inserting a node that points to the leader, then 
making the leader go away so election takes place. IIRC (and lots may have 
changed since then), you wind up with a situation where

znode0 is the current leader
znode1 points to znode0
znode2 _also_ points to znode0
znode3 points to znode1
znode 4 points to znode3

znode1 here was the original znode put in the queue to become the next leader. 
znode2 is the one added by the code you’re looking at. When leader election 
actually happens, this situation is detected and znode2 becomes the leader and 
znode3 is changed to point to znode2 WARNING: This is what I remember from code 
I worked on a long time ago, it may have been changed a lot since then. But I’m 
fairly sure that’s what’s behind that code.

Best,
Erick



> On Aug 6, 2020, at 6:18 AM, Cao Mạnh Đạt <da...@apache.org> wrote:
> 
> Hi guys,
> 
> When I look at these lines, 
> if(joinAtHead){
>   log.debug("Node {} trying to join election at the head", id);
>   List<String> nodes = OverseerTaskProcessor.getSortedElectionNodes(zkClient, 
> shardsElectZkPath);
>   if(nodes.size() <2){
>     leaderSeqPath = zkClient.create(shardsElectZkPath + "/" + id + "-n_", 
> null,
>         CreateMode.EPHEMERAL_SEQUENTIAL, false);
>   } else {
>     String firstInLine = nodes.get(1);
>     log.debug("The current head: {}", firstInLine);
>     Matcher m = LEADER_SEQ.matcher(firstInLine);
>     if (!m.matches()) {
>       throw new IllegalStateException("Could not find regex match in:"
>           + firstInLine);
>     }
>     leaderSeqPath = shardsElectZkPath + "/" + id + "-n_"+ m.group(1);
>     zkClient.create(leaderSeqPath, null, CreateMode.EPHEMERAL, false);
>   }
> } else {
> the line firstInLine = nodes.get(1) seems problematic to me. Why do we get 
> the middle of a sorted list and say that it is the first thing in line? 
> Should I open an issue for this?
> 
> Thanks


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to