[
https://issues.apache.org/jira/browse/CURATOR-551?focusedWorklogId=385549&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-385549
]
ASF GitHub Bot logged work on CURATOR-551:
------------------------------------------
Author: ASF GitHub Bot
Created on: 11/Feb/20 23:57
Start Date: 11/Feb/20 23:57
Worklog Time Spent: 10m
Work Description: Randgalt commented on pull request #345: [CURATOR-551]
Fix Handle Holder new connection string
URL: https://github.com/apache/curator/pull/345#discussion_r377970470
##########
File path: curator-client/src/main/java/org/apache/curator/HandleHolder.java
##########
@@ -70,7 +61,16 @@ String getConnectionString()
String getNewConnectionString()
{
String helperConnectionString = (helper != null) ?
helper.getConnectionString() : null;
- return ((helperConnectionString != null) &&
!ensembleProvider.getConnectionString().equals(helperConnectionString)) ?
helperConnectionString : null;
+ String ensembleProviderConnectionString =
ensembleProvider.getConnectionString();
Review comment:
> I have a question. `helper` is `null` until `closeAndReset()` is called,
and new connection string can be sensed only if `helper` is not `null`. Isn't
it possible to have new connection string (from the `EnsembleTracker`) before
`closeAndReset()` was ever called? If it is possible, then it seems like the
new connection string won't be handled, since `helper` would be `null`.
`closeAndReset()` will cause `ensembleProvider.getConnectionString()` to get
called anyway. Does that answer your question? I think the intent of the above
code is to force-close the connection when there's a new connection string.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
Issue Time Tracking
-------------------
Worklog Id: (was: 385549)
Time Spent: 2h 10m (was: 2h)
> 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: 2h 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)