Uploaded image for project: 'Apache Curator'
  1. Apache Curator
  2. CURATOR-54

No reliable way to cancel leadership in LeaderSelector when connection fails due to edge cases

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.2.0-incubating
    • Fix Version/s: 2.3.0
    • Component/s: Recipes
    • Labels:
      None

      Description

      From a post to user@

      "Hi,

      I'm fairly new with Zookeeper and Curator. I want to achieve a simple leader election process.
      But, I ran into trouble implementing the interruption behavior. I could not find a reliable way to stop the leader (withdraw from leadership).
      I think even the schoolbook example that Curator brings is flawed.
      In leader.ExampleClient:

      @Override
      public void stateChanged(CuratorFramework client, ConnectionState newState)
      {
      // you MUST handle connection state changes. This WILL happen in production code.

      if ( (newState == ConnectionState.LOST) || (newState == ConnectionState.SUSPENDED) )
      {
      if ( ourThread != null )

      { ourThread.interrupt(); }

      }
      }

      So in case of lost leadership, the ourThread thread is interrupted. However, ourThread is set in the 2nd line of the takeLeadership() method. Until then, it is null.

      What happens if the connection is lost immediately after it is established, and ourThread stays null? Won't it be the case that the thread will go on, thinking that it is the leader, despite it being supposed to withdraw?

      Thanks,
      Arie"

        Attachments

          Activity

            People

            • Assignee:
              randgalt Jordan Zimmerman
              Reporter:
              randgalt Jordan Zimmerman
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: