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)

Reply via email to