[
https://issues.apache.org/jira/browse/CURATOR-551?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17029334#comment-17029334
]
Jordan Zimmerman commented on CURATOR-551:
------------------------------------------
PLEASE PLEASE PLEASE review https://github.com/apache/curator/pull/345 - this
is a very low level change and makes me nervous. I'd really love to see some
review by the community.
> 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
> Assignee: Jordan Zimmerman
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> 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)