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

Jordan Zimmerman edited comment on CURATOR-622 at 11/14/21, 8:53 AM:
---------------------------------------------------------------------

> There is no reason to believe that the instances contending for a latch are 
> random in many operational environments

Why not? If n instances contend for a ZNode at around the same time the 
sequence number they receive is non-deterministic.

> In the current implementation, the LeaderLatch is operating more as a 
> leadership queue than an election system

The current implementation is _fair_. Fairness in locks requires a queue (fair 
locks in the JDK do this).

> By adding a random factor into the internal election process...

This will be very hard to do without completely re-writing the LeaderLatch 
recipe. The current implementation takes advantage of the sequence numbers when 
instances who don't have the lock watch their predecessor - see line 578, the 
watch patch is the ZNode path of the previous node.

I'm very much -1 on this change for LeaderLatch. Instead a new recipe should be 
written to handle your use case.


was (Author: randgalt):
> There is no reason to believe that the instances contending for a latch are 
> random in many operational environments

Why not? If n instances contend for a ZNode at around the same time the 
sequence number they receive is non-deterministic.

> In the current implementation, the LeaderLatch is operating more as a 
> leadership queue than an election system

The current implementation is _fair_. Fairness in locks requires a queue (fair 
locks in the JDK do this).

> By adding a random factor into the internal election process...

This will be very hard to do without completely re-writing the LeaderLatch 
recipe. The current implementation takes advantage of the sequence numbers when 
instances who don't have the lock watch their predecessor - see line 578, the 
watch patch is the ZNode path of the previous node.

I'm very much - 1 on this change for LeaderLatch. Instead a new recipe should 
be written to handle your use case.

> Add Randomness to LeaderLatch Elections
> ---------------------------------------
>
>                 Key: CURATOR-622
>                 URL: https://issues.apache.org/jira/browse/CURATOR-622
>             Project: Apache Curator
>          Issue Type: Improvement
>          Components: Recipes
>            Reporter: Tim Black
>            Priority: Major
>
> Currently, LeaderLatch uses EPHEMERAL_SEQUENTIAL nodes, with the next leader 
> chosen by the lowest numbered node. In a multi-server environment where each 
> server is a participant in multiple elections, the result is that the leader 
> will always be the server that has been up the longest.(Or first to be 
> restarted during a rolling restart)
> Instead of using sequentially numbered nodes, I propose instead that the node 
> number for a new participant be created by adding a random number(From a 
> constrained range) to the current leader number.(Defaults to zero) If a node 
> with that number exists, repeat until an available node is found. After 
> initial node creation, all other aspects of the leader election will remain 
> unchanged.
> I have an implementation for this that I am testing locally and will submit a 
> PR once the tests are complete.



--
This message was sent by Atlassian Jira
(v8.20.1#820001)

Reply via email to