Thank Erick, I'm not fully understand it, but it kinda makes sense somehow.
Thank you! On Thu, Aug 6, 2020 at 6:40 PM Erick Erickson <erickerick...@gmail.com> wrote: > 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 > > -- *Best regards,* *Cao Mạnh Đạt* *E-mail: caomanhdat...@gmail.com <caomanhdat...@gmail.com>*