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

Synchronize startup of ExhibitorEnsembleProvider and Zookeeper connection

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Abandoned
    • 2.10.0
    • None
    • Client
    • None

    Description

      Right now starting CuratorFramework with ExhibitorEnsembleProvider could cause faulty zookeeper connection.
      To check this use CuratorFrameworkFactory.Builder and specify ExhibitorEnsembleProvider.
      Call build() and start().
      Internal ConnectionState.start() calls ensembleProvider.start() which should poll for hostnames to produce connectionString.
      Without waiting (for connectionString) ConnectionState calls zooKeeper.closeAndReset() and ClientCnxn is created with empty connectionString. That leads to lame zooKeeper sending requests to localhost.

      2017-01-27T22:56:17,618 INFO  [Agents-0] org.apache.curator.framework.imps.CuratorFrameworkImpl - Starting
      2017-01-27T22:56:17,619 INFO  [Agents-0] org.apache.zookeeper.ZooKeeper - Initiating client connection, connectString= sessionTimeout=60001 watcher=org.apache.curator.ConnectionState@4402fad2
      2017-01-27T22:56:17,625 INFO  [Agents-0-SendThread(127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
      2017-01-27T22:56:18,632 WARN  [Agents-0-SendThread(127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
      java.net.ConnectException: Connection refused: no further information
              at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.8.0_74]
              at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[?:1.8.0_74]
              at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) ~[zookeeper-3.4.5.jar:3.4.5-1392090]
              at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068) [zookeeper-3.4.5.jar:3.4.5-1392090]
      2017-01-27T22:56:19,733 INFO  [Agents-0-SendThread(127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
      2017-01-27T22:56:19,807 INFO  [Curator-ExhibitorEnsembleProvider-0] org.apache.curator.ensemble.exhibitor.ExhibitorEnsembleProvider - Connection string has changed. Old value (), new value (172.19.2.158:2181,172.19.2.15:2181,172.19.2.177:2181,172.19.2.4:2181,172.19.2.89:2181,172.19.2.72:2181)
      2017-01-27T22:56:20,734 WARN  [Agents-0-SendThread(127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn - Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect
      java.net.ConnectException: Connection refused: no further information
              at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) ~[?:1.8.0_74]
              at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) ~[?:1.8.0_74]
              at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:350) ~[zookeeper-3.4.5.jar:3.4.5-1392090]
              at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1068) [zookeeper-3.4.5.jar:3.4.5-1392090]
      2017-01-27T22:56:21,835 INFO  [Agents-0-SendThread(127.0.0.1:2181)] org.apache.zookeeper.ClientCnxn - Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
      

      As a workaround a user could poll for connection string using that provider beforehand.
      The goal of the improvement is to allow user to call CuratorFramework.start() and got a working framework without an additional poll method call. Using poll before start() actually uncovers implementation details and is a vague technique for a general user.

      Attachments

        Activity

          People

            Unassigned Unassigned
            egrs Egor Ryashin
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 72h
                72h
                Remaining:
                Remaining Estimate - 72h
                72h
                Logged:
                Time Spent - Not Specified
                Not Specified