kelgon wu created CURATOR-551:
---------------------------------
Summary: Curator client always call updateServerList with original
serverList value, not the ones updated by EnsembleTracker
Key: CURATOR-551
URL: https://issues.apache.org/jira/browse/CURATOR-551
Project: Apache Curator
Issue Type: Bug
Components: Client
Affects Versions: 4.2.0
Reporter: kelgon wu
Whenever ConnectionState.handleNewConnectionString is triggered, the value of
newConnectionString is always the value used to construct the
FixedEnsembleProvider
in ConnectionState:
{code:java}
String newConnectionString = zooKeeper.getNewConnectionString();
if ( newConnectionString != null ) {
handleNewConnectionString(newConnectionString);
}
...
if ( ensembleProvider.updateServerListEnabled() ) {
zooKeeper.updateServerList(newConnectionString);
} else {
reset();
}{code}
in HandleHolder:
{code:java}
String getNewConnectionString() {
String helperConnectionString = (helper != null) ?
helper.getConnectionString() : null;
return ((helperConnectionString != null) &&
!ensembleProvider.getConnectionString().equals(helperConnectionString)) ?
helperConnectionString : null;
}{code}
code above shows that the newConnectionString is provided by
helper.getConnectionString(), which only instantiated on first call of
getZookeeper:
{code:java}
@Override
public ZooKeeper getZooKeeper() throws Exception
{
synchronized(this)
{
if ( zooKeeperHandle == null )
{
connectionString = ensembleProvider.getConnectionString();
zooKeeperHandle = zookeeperFactory.newZooKeeper(connectionString,
sessionTimeout, watcher, canBeReadOnly);
}
...{code}
As a result, when I reconfig zookeeper serverList, curator client always call
updateServerList with the initial value, not the ones I just reconfigured
--
This message was sent by Atlassian Jira
(v8.3.4#803005)