[
https://issues.apache.org/jira/browse/ZOOKEEPER-1683?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alexander Shraer updated ZOOKEEPER-1683:
----------------------------------------
Attachment: ZOOKEEPER-1683.patch
The patch fixes the problem of currentHost being null and also handles the case
of updateServerList being called twice, without migration completing in between
the calls. This case wasn't previously handled.
The idea is that if migration hasn't completed yet, and updateServerList is
called again, we need to complete it "virtually" - we don't need to connect to
the new server, but we should figure out where we should connect to. This is
the case whether or not currentHost is null.
If migration is not in progress, and currentHost is null, we should look on the
last host to which the client was connected, or the first host in the list in
case it hasn't connected to any host yet.
> ZooKeeper client NPE when updating server list on disconnected client
> ---------------------------------------------------------------------
>
> Key: ZOOKEEPER-1683
> URL: https://issues.apache.org/jira/browse/ZOOKEEPER-1683
> Project: ZooKeeper
> Issue Type: Bug
> Reporter: Shevek
> Assignee: Alexander Shraer
> Attachments: ZOOKEEPER-1683.patch
>
>
> 2013-04-04 22:16:15,872 ERROR [pool-4-thread-1]
> com.netflix.curator.ConnectionState.getZooKeeper (ConnectionState.java:84) -
> Background exception caught
> java.lang.NullPointerException
> at
> org.apache.zookeeper.client.StaticHostProvider.updateServerList(StaticHostProvider.java:161)
> ~[zookeeper-3.5.0.jar:3.5.0--1]
> at
> org.apache.zookeeper.ZooKeeper.updateServerList(ZooKeeper.java:183)
> ~[zookeeper-3.5.0.jar:3.5.0--1]
> at
> com.netflix.curator.HandleHolder$1$1.setConnectionString(HandleHolder.java:121)
> ~[curator-client-1.3.5-SNAPSHOT.jar:?]
> The duff code is this:
> ClientCnxnSocket clientCnxnSocket = cnxn.sendThread.getClientCnxnSocket();
> InetSocketAddress currentHost = (InetSocketAddress)
> clientCnxnSocket.getRemoteSocketAddress();
> boolean reconfigMode = hostProvider.updateServerList(serverAddresses,
> currentHost);
> Now, currentHost might be null, if we're not yet connected. But
> StaticHostProvider.updateServerList indirects on it unconditionally.
> This would be caught by findbugs.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira