Egor Ryashin created CURATOR-385:
------------------------------------

             Summary: Synchronize startup of ExhibitorEnsembleProvider and 
Zookeeper connection
                 Key: CURATOR-385
                 URL: https://issues.apache.org/jira/browse/CURATOR-385
             Project: Apache Curator
          Issue Type: Improvement
          Components: Client
    Affects Versions: 2.10.0
            Reporter: Egor Ryashin


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.
{noformat}
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)
{noformat}
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.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to