[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16544766#comment-16544766 ] Michael Han commented on ZOOKEEPER-2184: committed to master: https://github.com/apache/zookeeper/commit/0a311873deb1847703c9b62716c626ce43d4ba48 branch-3.5: https://github.com/apache/zookeeper/commit/1e65b9f4873fc995308972433ea8a664e98fe41f > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 10h > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16542903#comment-16542903 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1934//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1934//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1934//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 9h 50m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16541853#comment-16541853 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. -1 findbugs. The patch appears to introduce 1 new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1930//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1930//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1930//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 9.5h > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16540621#comment-16540621 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. -1 findbugs. The patch appears to introduce 1 new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1927//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1927//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1927//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 9h 10m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16540221#comment-16540221 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. -1 findbugs. The patch appears to introduce 1 new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. -1 contrib tests. The patch failed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1924//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1924//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1924//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 9h 10m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16515635#comment-16515635 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1842//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1842//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1842//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 8h 20m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16500128#comment-16500128 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1789//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1789//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1789//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 6h 20m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16500057#comment-16500057 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1788//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1788//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1788//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 6h 20m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16500027#comment-16500027 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1787//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1787//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1787//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 6h 20m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16493732#comment-16493732 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1766//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1766//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1766//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 4h 50m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16493723#comment-16493723 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 3 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1765//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1765//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1765//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.6.0, 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 4h 50m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16492825#comment-16492825 ] Michael Han commented on ZOOKEEPER-2184: Patch committed to branch-3.4 as [https://github.com/apache/zookeeper/commit/2e26c8836edc800c60b204a1d3da0285edb415d6] This Jira will be resolved after the patch is ported to branch-3.5 and master. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 4h 10m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16492555#comment-16492555 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 9 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1759//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1759//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1759//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 3h 40m > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16490741#comment-16490741 ] Hadoop QA commented on ZOOKEEPER-2184: -- +1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 9 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. +1 core tests. The patch passed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1757//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1757//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1757//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 2.5h > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16490566#comment-16490566 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 9 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1756//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1756//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/1756//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch, pull-request-available > Fix For: 3.4.13, 3.5.5 > > Attachments: ZOOKEEPER-2184.patch > > Time Spent: 2.5h > Remaining Estimate: 0h > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16411243#comment-16411243 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 @afine @ijuma I've finished refactoring of StaticHostProvider. The implementation follows that I explained in my email as **Option-3**: > - Do not cache IPs, > - Shuffle the names and resolve with getAllByName() every time when next() is called, > - Use getAllByName(), but shuffle the list and return the first IP to properly handle hostnames associated with multiple IPs, > - JDK's built-in caching will prevent name servers from being flooded and will do the re-resolution automatically when cache expires, The `Resolver` interface which is also introduced in this patch is the solution for the problem that @afine raised: to properly mock out the `getAllByName()` call in unit tests. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.13 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16406585#comment-16406585 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 @ijuma I feel your pain. :) No worries, I'm on it. Doing my best to push committers and others to review changes. Additionally I'd like to make a small refactoring to the proposed logic before committing, because I'm not entirely convinced about this manual caching/shuffling logic that was implemented originally. You can see the details in one of my comments above and on the `dev` mailing list. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16406541#comment-16406541 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user ijuma commented on the issue: https://github.com/apache/zookeeper/pull/451 @anmolnar, it's been more than 1 month since the last comment on this PR. Is there anything that still needs to be addressed? The original PR was submitted in January 2017 and it got stalled after a while, I'm hoping the same doesn't happen here. :) > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16393545#comment-16393545 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 @ijuma Sure, no problem. I'm waiting for some feedback from the community here and on the mailing list and I hope I can commit soon. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16392126#comment-16392126 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user ijuma commented on the issue: https://github.com/apache/zookeeper/pull/451 Thanks for picking this up @anmolnar, looking forward to this being fixed. :) > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Andor Molnar >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16369422#comment-16369422 ] Eron Wright commented on ZOOKEEPER-2184: - Linking to an earlier related issue. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16367332#comment-16367332 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168764368 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -119,6 +120,68 @@ public void testTwoInvalidHostAddresses() { new StaticHostProvider(list); } +@Test +public void testReResolvingSingle() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to a single address +list.clear(); --- End diff -- Removed. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16367329#comment-16367329 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168763559 --- Diff: src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java --- @@ -239,13 +243,13 @@ public void testSessionEstablishment() throws Exception { public void testSeekForRwServer() throws Exception { // setup the logger to capture all logs -Layout layout = Logger.getRootLogger().getAppender("CONSOLE") +Layout layout = org.apache.log4j.Logger.getRootLogger().getAppender("CONSOLE") --- End diff -- Makes sense. I revert the changes. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366143#comment-16366143 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168580127 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366135#comment-16366135 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168576884 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -119,6 +120,68 @@ public void testTwoInvalidHostAddresses() { new StaticHostProvider(list); } +@Test +public void testReResolvingSingle() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to a single address +list.clear(); --- End diff -- do we need this? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366137#comment-16366137 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168576090 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -47,59 +51,169 @@ private int currentIndex = -1; +// Don't re-resolve on first next() call +private boolean connectedSinceNext = true; + +private Resolver resolver; + /** * Constructs a SimpleHostSet. - * + * * @param serverAddresses *possibly unresolved ZooKeeper server addresses * @throws IllegalArgumentException * if serverAddresses is empty or resolves to an empty list */ public StaticHostProvider(Collection serverAddresses) { +this.resolver = new Resolver() { +@Override +public InetAddress[] getAllByName(String name) throws UnknownHostException { +return InetAddress.getAllByName(name); +} +}; +init(serverAddresses); +} + +/** + * Introduced for testing purposes. getAllByName() is a static method of InetAddress, therefore cannot be easily mocked. + * By abstraction of Resolver interface we can easily inject a mocked implementation in tests. + * + * @param serverAddresses + *possibly unresolved ZooKeeper server addresses + * @param resolver + *custom resolver implementation + * @throws IllegalArgumentException + * if serverAddresses is empty or resolves to an empty list + */ +public StaticHostProvider(Collection serverAddresses, Resolver resolver) { +this.resolver = resolver; +init(serverAddresses); +} + +/** + * Common init method for all constructors. + * Resolve all unresolved server addresses, put them in a list and shuffle. + */ +private void init(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = this.resolver.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } + Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366134#comment-16366134 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168572502 --- Diff: src/java/test/org/apache/zookeeper/test/ClientPortBindTest.java --- @@ -104,7 +104,7 @@ public void testBindByAddress() throws Exception { try { startSignal.await(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS); -Assert.assertTrue("count == 0", startSignal.getCount() == 0); +Assert.assertTrue("count == " + startSignal.getCount(), startSignal.getCount() == 0); --- End diff -- I'm not a huge fan of calling `getCount` more than once, since I think the value could change between invocations. Why not just use the return value from `await` in the line above? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366132#comment-16366132 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168578617 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366136#comment-16366136 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168575513 --- Diff: src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java --- @@ -239,13 +243,13 @@ public void testSessionEstablishment() throws Exception { public void testSeekForRwServer() throws Exception { // setup the logger to capture all logs -Layout layout = Logger.getRootLogger().getAppender("CONSOLE") +Layout layout = org.apache.log4j.Logger.getRootLogger().getAppender("CONSOLE") --- End diff -- I guess my real question is, do we need any of the changes in this file? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366131#comment-16366131 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168565039 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -18,6 +18,10 @@ package org.apache.zookeeper.client; +import org.apache.yetus.audience.InterfaceAudience; --- End diff -- nit: move this back > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366133#comment-16366133 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168568596 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -47,59 +51,169 @@ private int currentIndex = -1; +// Don't re-resolve on first next() call +private boolean connectedSinceNext = true; + +private Resolver resolver; + /** * Constructs a SimpleHostSet. - * + * * @param serverAddresses *possibly unresolved ZooKeeper server addresses * @throws IllegalArgumentException * if serverAddresses is empty or resolves to an empty list */ public StaticHostProvider(Collection serverAddresses) { +this.resolver = new Resolver() { +@Override +public InetAddress[] getAllByName(String name) throws UnknownHostException { +return InetAddress.getAllByName(name); +} +}; +init(serverAddresses); +} + +/** + * Introduced for testing purposes. getAllByName() is a static method of InetAddress, therefore cannot be easily mocked. + * By abstraction of Resolver interface we can easily inject a mocked implementation in tests. + * + * @param serverAddresses + *possibly unresolved ZooKeeper server addresses + * @param resolver + *custom resolver implementation + * @throws IllegalArgumentException + * if serverAddresses is empty or resolves to an empty list + */ +public StaticHostProvider(Collection serverAddresses, Resolver resolver) { +this.resolver = resolver; +init(serverAddresses); +} + +/** + * Common init method for all constructors. + * Resolve all unresolved server addresses, put them in a list and shuffle. + */ +private void init(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = this.resolver.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } + Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16366059#comment-16366059 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168564981 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -18,6 +18,10 @@ package org.apache.zookeeper.client; +import org.apache.yetus.audience.InterfaceAudience; --- End diff -- nit: move this back > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16365806#comment-16365806 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r168524336 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -117,8 +116,32 @@ public void testTwoInvalidHostAddresses() { list.add(new InetSocketAddress("a", 2181)); list.add(new InetSocketAddress("b", 2181)); new StaticHostProvider(list); + } + +@Test +public void testReResolving() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to multiple addresses +list.add(InetSocketAddress.createUnresolved("www.apache.org", 1234)); --- End diff -- This is done. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16357370#comment-16357370 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r167027624 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -117,8 +116,32 @@ public void testTwoInvalidHostAddresses() { list.add(new InetSocketAddress("a", 2181)); list.add(new InetSocketAddress("b", 2181)); new StaticHostProvider(list); + } + +@Test +public void testReResolving() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to multiple addresses +list.add(InetSocketAddress.createUnresolved("www.apache.org", 1234)); --- End diff -- Makes sense, I'm working on it. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16357361#comment-16357361 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 Going one step back I wonder why we try to deal with multiple addresses at all. HostProvider should just make a transformation from unresolved InetSocketAddresses to resolved InetSocketAddresses. The easiest way as I can see it is to create a new instance of InetSocketAddress if the input is unresolved every time `next()` is called. Otherwise just pass it through. JVM will deal with the rest: resolution, caching and re-resolution once the cache is expires (30 secs). > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16357356#comment-16357356 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r167024767 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16357289#comment-16357289 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r167013851 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16355661#comment-16355661 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166671671 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16355654#comment-16355654 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166670125 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16355652#comment-16355652 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r19488 --- Diff: src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java --- @@ -239,13 +243,13 @@ public void testSessionEstablishment() throws Exception { public void testSeekForRwServer() throws Exception { // setup the logger to capture all logs -Layout layout = Logger.getRootLogger().getAppender("CONSOLE") +Layout layout = org.apache.log4j.Logger.getRootLogger().getAppender("CONSOLE") --- End diff -- slf4j's string formatter feature is being used in these tests. I wouldn't refactor them to be honest. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16354738#comment-16354738 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166479687 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -117,8 +116,32 @@ public void testTwoInvalidHostAddresses() { list.add(new InetSocketAddress("a", 2181)); list.add(new InetSocketAddress("b", 2181)); new StaticHostProvider(list); + } + +@Test +public void testReResolving() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to multiple addresses +list.add(InetSocketAddress.createUnresolved("www.apache.org", 1234)); --- End diff -- Yeah, this is annoying. Although, another possibility would be to put the dns calls in a method and then subclass `StaticHostProvider` for the tests and overriding this method to return what you want. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16354726#comment-16354726 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166476703 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16354716#comment-16354716 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166476047 --- Diff: src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java --- @@ -239,13 +243,13 @@ public void testSessionEstablishment() throws Exception { public void testSeekForRwServer() throws Exception { // setup the logger to capture all logs -Layout layout = Logger.getRootLogger().getAppender("CONSOLE") +Layout layout = org.apache.log4j.Logger.getRootLogger().getAppender("CONSOLE") --- End diff -- not going to push too hard on this, but I think you can just use log4j everywhere like in `QuorumPeerMainTest` > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16354016#comment-16354016 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166341540 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16353975#comment-16353975 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166329760 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -117,8 +116,32 @@ public void testTwoInvalidHostAddresses() { list.add(new InetSocketAddress("a", 2181)); list.add(new InetSocketAddress("b", 2181)); new StaticHostProvider(list); + } + +@Test +public void testReResolving() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to multiple addresses +list.add(InetSocketAddress.createUnresolved("www.apache.org", 1234)); --- End diff -- Good point I spent hours finding a way for it. Unfortunately static members can't be mocked with Mockito. We should use PowerMock for it (as described here https://blog.codecentric.de/en/2016/03/junit-testing-using-mockito-powermock/), but that'd be a new dependency not sure if it's acceptable here. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16353965#comment-16353965 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166328583 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16353845#comment-16353845 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166286605 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + * --- End diff -- Yes it was. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16353843#comment-16353843 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166286530 --- Diff: src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java --- @@ -239,13 +243,13 @@ public void testSessionEstablishment() throws Exception { public void testSeekForRwServer() throws Exception { // setup the logger to capture all logs -Layout layout = Logger.getRootLogger().getAppender("CONSOLE") +Layout layout = org.apache.log4j.Logger.getRootLogger().getAppender("CONSOLE") --- End diff -- I few lines above there're org.apache.log4j references which conflicts with the 'Logger' class, hence it needs to be explicitly referenced. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16352910#comment-16352910 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166105622 --- Diff: src/java/test/org/apache/zookeeper/test/StaticHostProviderTest.java --- @@ -117,8 +116,32 @@ public void testTwoInvalidHostAddresses() { list.add(new InetSocketAddress("a", 2181)); list.add(new InetSocketAddress("b", 2181)); new StaticHostProvider(list); + } + +@Test +public void testReResolving() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to multiple addresses +list.add(InetSocketAddress.createUnresolved("www.apache.org", 1234)); --- End diff -- I'm wondering if it's possible to mock this out? It would be great if our unit tests were not dependent on some other infrastructure. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16352908#comment-16352908 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166103404 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16352909#comment-16352909 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166097161 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -6,9 +6,9 @@ * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * + * --- End diff -- was this accidental? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16352907#comment-16352907 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r166102194 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -58,48 +61,122 @@ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); +InetAddress resolvedAddresses[] = InetAddress.getAllByName(getHostString(address)); for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} +this.serverAddresses.add(new InetSocketAddress(resolvedAddress, address.getPort())); } } catch (UnknownHostException e) { LOG.error("Unable to connect to server: {}", address, e); } } - + if (this.serverAddresses.isEmpty()) { throw new IllegalArgumentException( "A HostProvider may not be empty!"); } Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +public int getNextAdded() { +return nextAdded; +} + +public int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16350461#comment-16350461 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165666521 --- Diff: src/java/test/org/apache/zookeeper/client/StaticHostProviderTest.java --- @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.zookeeper.test; +package org.apache.zookeeper.client; --- End diff -- It was move to client package, because it uses package-private methods of StaticHostProvider. I moved back to 'test' package and change the affected methods to public. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16350447#comment-16350447 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165665505 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -91,15 +79,106 @@ public StaticHostProvider(Collection serverAddresses) { Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +int getNextAdded() { +return nextAdded; +} + +int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress next(long spinDelay) { -++currentIndex; -if (currentIndex == serverAddresses.size()) { -currentIndex = 0; +// Handle possible connection error by re-resolving hostname if possible +if (!connectedSinceNext) { --- End diff -- It should try to re-resolve whenever the client is unable to connect to a server (connectedSinceNext == false). @fpj gives a good explanation in the original Jira: https://issues.apache.org/jira/browse/ZOOKEEPER-2184?focusedCommentId=15873730=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15873730 > I haven't had much time to work on this issue, but here is my current assessment. > This issue seemed easy to fix at first, but it is fairly fundamental with respect to how we resolve host names. Currently, we resolve host names when we start a client and never resolve it again. This is the cause of the problem reported in the issue because in the scenario described, the zookeeper container is re-started and changes addresses, which prevents the client from connecting to the zookeeper server. > The proposed patch here tries to re-resolve the hostname every time the client fails to connect to the resolved address. It kind of works, but it makes StaticHostProvider a bit messy because the expectation with the current wiring is that we won't have to resolve again. > The ideal situation for the problematic scenario is that we resolve the host name every time we try to connect to a server, but that would be a fairly fundamental change to how we resolve addresses in ZooKeeper. > I was also looking at the C client and it might get a bit messy too there because I don't think we currently keep the association between the host name and the resolved address, so we don't really know what to resolve again. It might be possible to do it via the canonical name in getaddrinfo, but I'm not sure how that works with windows. > One specific proposal to avoid having clients never finding a server ever again without deep changes to the current wiring is to resolve again everything in the case the client tries all and none succeeds. That would be a
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16350400#comment-16350400 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165658965 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -57,29 +62,12 @@ */ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { -try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); -for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} -} -} catch (UnknownHostException e) { + try { --- End diff -- Fixing. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16350398#comment-16350398 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165658743 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -25,6 +25,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.lang.reflect.InvocationTargetException; --- End diff -- Good catch, thanks. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16350397#comment-16350397 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 @jeffwidman > Should this PR be targeting branch-3.4 or target trunk and then backport to the 3.4 series? The original PR targets 3.4 which is explained in a comment from @fpj on the jira: https://issues.apache.org/jira/browse/ZOOKEEPER-2184?focusedCommentId=15823099=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-15823099 > For the 3.5 branch, we will need a different patch because of the reconfiguration changes to StaticHostProvider. I'll work on it once the 3.4 patch gets a +1. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16349594#comment-16349594 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165527366 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -57,29 +62,12 @@ */ public StaticHostProvider(Collection serverAddresses) { for (InetSocketAddress address : serverAddresses) { -try { -InetAddress ia = address.getAddress(); -InetAddress resolvedAddresses[] = InetAddress.getAllByName((ia != null) ? ia.getHostAddress() : -address.getHostName()); -for (InetAddress resolvedAddress : resolvedAddresses) { -// If hostName is null but the address is not, we can tell that -// the hostName is an literal IP address. Then we can set the host string as the hostname -// safely to avoid reverse DNS lookup. -// As far as i know, the only way to check if the hostName is null is use toString(). -// Both the two implementations of InetAddress are final class, so we can trust the return value of -// the toString() method. -if (resolvedAddress.toString().startsWith("/") -&& resolvedAddress.getAddress() != null) { -this.serverAddresses.add( -new InetSocketAddress(InetAddress.getByAddress( -address.getHostName(), -resolvedAddress.getAddress()), -address.getPort())); -} else { -this.serverAddresses.add(new InetSocketAddress(resolvedAddress.getHostAddress(), address.getPort())); -} -} -} catch (UnknownHostException e) { + try { --- End diff -- something is wrong with the indentation here > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16349593#comment-16349593 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165525652 --- Diff: src/java/test/org/apache/zookeeper/test/ReadOnlyModeTest.java --- @@ -239,13 +243,13 @@ public void testSessionEstablishment() throws Exception { public void testSeekForRwServer() throws Exception { // setup the logger to capture all logs -Layout layout = Logger.getRootLogger().getAppender("CONSOLE") +Layout layout = org.apache.log4j.Logger.getRootLogger().getAppender("CONSOLE") --- End diff -- why is this necessary? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16349596#comment-16349596 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165524377 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -25,6 +25,8 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import java.lang.reflect.InvocationTargetException; --- End diff -- i think these imports are unused, and there are some others elsewhere in the code > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16349595#comment-16349595 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165529085 --- Diff: src/java/main/org/apache/zookeeper/client/StaticHostProvider.java --- @@ -91,15 +79,106 @@ public StaticHostProvider(Collection serverAddresses) { Collections.shuffle(this.serverAddresses); } +/** + * Evaluate to a hostname if one is available and otherwise it returns the + * string representation of the IP address. + * + * In Java 7, we have a method getHostString, but earlier versions do not support it. + * This method is to provide a replacement for InetSocketAddress.getHostString(). + * + * @param addr + * @return Hostname string of address parameter + */ +private String getHostString(InetSocketAddress addr) { +String hostString = ""; + +if (addr == null) { +return hostString; +} +if (!addr.isUnresolved()) { +InetAddress ia = addr.getAddress(); + +// If the string starts with '/', then it has no hostname +// and we want to avoid the reverse lookup, so we return +// the string representation of the address. +if (ia.toString().startsWith("/")) { +hostString = ia.getHostAddress(); +} else { +hostString = addr.getHostName(); +} +} else { +// According to the Java 6 documentation, if the hostname is +// unresolved, then the string before the colon is the hostname. +String addrString = addr.toString(); +hostString = addrString.substring(0, addrString.lastIndexOf(':')); +} + +return hostString; +} + public int size() { return serverAddresses.size(); } +// Counts the number of addresses added and removed during +// the last call to next. Used mainly for test purposes. +// See StasticHostProviderTest. +private int nextAdded = 0; +private int nextRemoved = 0; + +int getNextAdded() { +return nextAdded; +} + +int getNextRemoved() { +return nextRemoved; +} + public InetSocketAddress next(long spinDelay) { -++currentIndex; -if (currentIndex == serverAddresses.size()) { -currentIndex = 0; +// Handle possible connection error by re-resolving hostname if possible +if (!connectedSinceNext) { --- End diff -- would you mind explaining exactly under which conditions we reresolve the hostname and under which conditions we try the next one in the host list? My reading is that this reresolves everything if the client fails to connect to two hosts in a row. Is this the desired behavior? And do we always reresolve all serverAddresses? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16349592#comment-16349592 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user afine commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r165525113 --- Diff: src/java/test/org/apache/zookeeper/client/StaticHostProviderTest.java --- @@ -16,7 +16,7 @@ * limitations under the License. */ -package org.apache.zookeeper.test; +package org.apache.zookeeper.client; --- End diff -- this doesn't look right > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16349381#comment-16349381 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user jeffwidman commented on the issue: https://github.com/apache/zookeeper/pull/451 Should this PR be targeting `branch-3.4` or target `trunk` and then backport to the 3.4 series? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16348358#comment-16348358 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 @phunt @afine Did you have a chance to take a look? I think we've addressed all issues that were mentioned in the original PR. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
***UNCHECKED*** [jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16341073#comment-16341073 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user mfenes commented on the issue: https://github.com/apache/zookeeper/pull/451 Looking at the static initialization block in InetAddressCachePolicy more deeply, the default TTL is 30 seconds if there is no SecurityManager installed. So caching a positive lookup forever in the Java-level cache is the default only if there is a SecurityManager installed and the TTL is not overridden by "networkaddress.cache.ttl" to a different value. Default caching policy for a negative lookup is 0 (never cache). Now the only question is whether 30 seconds default caching is ok or too much for ZK. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16341046#comment-16341046 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 Just confirmed on 3.4 branch: ZK uses 30 secs cache TTL on my mac. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16341016#comment-16341016 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/451 @mfenes The only solution I can think of is to set DNS cache TTL `networkaddress.cache.ttl` to a configurable, non-infinite value. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16340910#comment-16340910 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user mfenes commented on the issue: https://github.com/apache/zookeeper/pull/451 Re-resolving at StaticHostProvider level may not be sufficient as InetAddress.getAllByName(String host) itself uses a Java-level cache inside InetAddress and turns to name service (e.g. DNS) only if the host could not be found in the Java-level cache. Unfortunately, when Java resolves a new host using the name service, it puts the host and its addresses in the cache with TTL cache FOREVER. This means, once a host gets resolved by Java, it will never again turn to the name service to re-resolve it. If a host's addresses get updated in DNS, the address cache in Java will still contain the old entry forever. So re-resolving at StaticHostProvider won't help in this case, as InetAddress.getAllByName(String host) will still return the old address(es) I think. Check the getCachedAddresses method inside InetAddress, the get() method of static final class Cache inside InetAddress and sun.net.InetAddressCachePolicy.get() which returns cachePolicy with default value -1 (FOREVER) if it is not overridden by Security properties "networkaddress.cache.ttl" and "networkaddress.cache.negative.ttl". > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16337696#comment-16337696 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on a diff in the pull request: https://github.com/apache/zookeeper/pull/451#discussion_r163570637 --- Diff: src/java/test/org/apache/zookeeper/client/StaticHostProviderTest.java --- @@ -117,8 +117,32 @@ public void testTwoInvalidHostAddresses() { list.add(new InetSocketAddress("a", 2181)); list.add(new InetSocketAddress("b", 2181)); new StaticHostProvider(list); + } + +@Test +public void testReResolving() { +byte size = 1; +ArrayList list = new ArrayList(size); + +// Test a hostname that resolves to multiple addresses --- End diff -- Common domain names like facebook.com, google.com or apache.org don't use round-robin DNS anymore for some reason, so they don't resolve to multiple addresses. As a consequence this test doesn't validate the branch related to multiple addresses anymore unfortunately. Not sure how to address that, PowerMock would be the best to mock static `getAllByName()` method, but that would involve introducing a new test dependency. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16337639#comment-16337639 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- GitHub user anmolnar opened a pull request: https://github.com/apache/zookeeper/pull/451 ZOOKEEPER-2184: Zookeeper Client should re-resolve hosts when connection attempts fail This one is the pick-up of @fpj 's original PR: #150 Targeting and rebased on the 3.4 branch. You can merge this pull request into a Git repository by running: $ git pull https://github.com/anmolnar/zookeeper ZOOKEEPER-2184 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/zookeeper/pull/451.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #451 commit 229760d7757f47e271a8e059c1aeac10f0847a2a Author: fpjDate: 2017-01-14T16:58:15Z ZOOKEEPER-2184: Zookeeper Client should re-resolve hosts when connection attempts fail > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16336298#comment-16336298 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user anmolnar commented on the issue: https://github.com/apache/zookeeper/pull/150 @phunt @afine @fpj I'm happy to pick this up tomorrow. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16331472#comment-16331472 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user phunt commented on the issue: https://github.com/apache/zookeeper/pull/150 I suspect folks were out on vacation. I was. :-) It doesn't seem like @fpj has time to look at this - can someone else pick it up and address the recent comments? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16329166#comment-16329166 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user bwmills commented on the issue: https://github.com/apache/zookeeper/pull/150 As noted by @rcillo back in June - this feature is highly valuable for the community. It's certainly of critical importance to our production services in K8s. Any updates are much appreciated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16327585#comment-16327585 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user jeffwidman commented on the issue: https://github.com/apache/zookeeper/pull/150 Any movement on this? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v7.6.3#76005)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16281082#comment-16281082 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user phunt commented on the issue: https://github.com/apache/zookeeper/pull/150 Given the insights from the Kafka and K8s folks this looks like a good one to focus on. @fpj any chance you can update this PR to address the conflicts? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16276730#comment-16276730 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user riccardofreixo commented on the issue: https://github.com/apache/zookeeper/pull/150 @sslavic thanks for the suggestion. We haven't tried that approach, and as far as I can tell it sounds like it would work. You'd still have the re-resolution problem if you deleted/recreated the service, but that should be quite rare. Had we thought of that before, we probably wouldn't have patched the client. Now we have though, we'll keep it patched. I still think this should be fixed on the zk-client, as there are other circumstances other than Kube where the IP addresses may change and you wouldn't have an easy solution such as ClusterIP. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16276711#comment-16276711 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user sslavic commented on the issue: https://github.com/apache/zookeeper/pull/150 @riccardofreixo have you tried using ClusterIP Service for ZooKeeper StatefulSet and providing that ClusterIP (or service hostname) to Kafka / ZooKeeper clients as sole ZooKeeper hostname? StatefulSet can have multiple replicas, but to ZooKeeper clients all of the members no matter how many of them there are (1, 3, 5, ..) would be accessible under single ClusterIP. Even when Pods of StatefulSet die and get re-scheduled for whatever reason, they will likely get new IP, but IP of ClusterIP Service remains stable so ZooKeeper clients should be able to reconnect, without need to reresolve IP address of the host. If there's a quorum, Pod that died does not necessarily have to become available quickly, clients should still be able to connect even without losing session. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16276675#comment-16276675 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user riccardofreixo commented on the issue: https://github.com/apache/zookeeper/pull/150 We're running Kafka in Kubernetes, so this bug was biting us regularly. We applied the patch in the kafka clusters of our client and are running in prod. Solves our problem and created no additional problems for us. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16276584#comment-16276584 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user jorgheymans commented on the issue: https://github.com/apache/zookeeper/pull/150 just got stung by this as well, assumed zk clients would be clever enough to reresolve :-/ Since there is a lot of interest in this why not just rebase-merge and let ppl test out the snapshot builds ? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16235063#comment-16235063 ] Jun Rao commented on ZOOKEEPER-2184: Hi, does anyone know when this issue can be fixed? This is related to https://issues.apache.org/jira/browse/KAFKA-5473. We are wondering if we should have a short term fix in Kafka or just wait for the fix in ZK. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16211123#comment-16211123 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user the-xs commented on the issue: https://github.com/apache/zookeeper/pull/150 Should we still wait or get this moving to fix the merge conflicts? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3, 3.4.11 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.12 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16200382#comment-16200382 ] Patrick Hunt commented on ZOOKEEPER-2184: - This is the remaining blocker for 3.4.11 - any insights [~fpj] ? (see recent comments) Would be nice to get this one in. I don't believe this is a regression - if we don't see movement soon I will likely downgrade the priority and move out to the next release. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16193491#comment-16193491 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user edvorkin commented on the issue: https://github.com/apache/zookeeper/pull/150 +1 one here. This feature is necessary for running Zookeeper in the cloud under AWS ASG. Every time node fails, ASG reassigns new IP for new zookeeper and there is no way kafka will know about it. We need to treat zookeeper servers as cattle, not pets, and kill and spin new one at will without affecting kafka. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16173124#comment-16173124 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user nicorevin commented on the issue: https://github.com/apache/zookeeper/pull/150 @fpj any updates on it? It seems like a blocker for clustering kafka (and everyone using zkclient) in docker/kubernetes. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16121951#comment-16121951 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user hanm commented on the issue: https://github.com/apache/zookeeper/pull/150 We need get this moving, but let's first wait for feedback from @fpj before letting someone else taking over this JIRA. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16107958#comment-16107958 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user djenriquez commented on the issue: https://github.com/apache/zookeeper/pull/150 Hi guys, any update for this PR? Many thanks!! > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Fix For: 3.5.4, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16071340#comment-16071340 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 75 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/848//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/848//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/848//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16063713#comment-16063713 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user hanm commented on the issue: https://github.com/apache/zookeeper/pull/150 This PR has to be rebased first before it can be merged. Hi Flavio - will you follow up with this or you prefer someone else take this over? @fpj @rakeshadr I've updated the JIRA to mark it as a blocker for next release (3.4.11, 3.5.4), to prevent this issue lagging again. Good to get this in given its impact and relatively little effort given the PR is already in a good shape. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.4.7, 3.4.8, 3.4.9, 3.4.10, 3.5.0, 3.5.1, 3.5.2, > 3.5.3 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira >Priority: Blocker > Labels: easyfix, patch > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16063628#comment-16063628 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user djenriquez commented on the issue: https://github.com/apache/zookeeper/pull/150 Any reasons why this hasn't been merged yet or the attention given? I agree whole-heartedly with @rcillo, this is a gigantic feature for anyone depending on Zookeeper in the cloud running on immutable/disposal infrastructure. Would love to get this merged, but it being 6 months old makes me wonder if it has been de-prioritized by project owners/collaborators? If so, can someone explain why has this been de-prioritized? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16059402#comment-16059402 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user rcillo commented on the issue: https://github.com/apache/zookeeper/pull/150 This feature is highly valuable for the community. It could solve the problem of every team deploying Kafka on the cloud. Kafka has a static configuration with the IP addresses of Zookeeper nodes. If you need to replace these nodes and consequently change their IP addresses, you need to change Kafka configuratino file and then restart all Kafka nodes so that they will reload the updated configuration. If this feature is merged, everyone deploying Kafka on the cloud could configure it using a load balancer address, that would be re-resolved from time to time, so that new Zookeeper instances would be automatically reachable from Kafka without the need of restarts. This would greatly improve the availability of Kafka. Looking forward to have this merged. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16052696#comment-16052696 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user geek101 commented on the issue: https://github.com/apache/zookeeper/pull/199 @adyach this patch's goal is to make sure when ever a new connection is being established DNS lookup will be performed. If you have given a hostname in connection string then if the underlying IP is gone the TCP connection will break and new TCP connection will be attempted by Zookeeper code and at this time DNS lookup will again be performed. I hope this helps if you can post your example of connection string it will be more helpful. Zookeeper connection string is supposed to contain the ZK ensemble set/subset hostnames/ips. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16052295#comment-16052295 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user adyach commented on the issue: https://github.com/apache/zookeeper/pull/199 `your.zookeeper.loadbalancer` The problem is that it is resolved only once when connected, but instances behind load balancer can be replaced. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16052089#comment-16052089 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user geek101 commented on the issue: https://github.com/apache/zookeeper/pull/199 @adyach can you give me an example of a connection string that you are implying this will help me understand the problem better. Since the client code needs ip addresses of the ZK ensemble, does the DNS resolution of this load balancer hostname supposed to return that set of ip addresses? > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16051483#comment-16051483 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user adyach commented on the issue: https://github.com/apache/zookeeper/pull/199 Seems like this is https://github.com/apache/zookeeper/pull/150 > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=16051480#comment-16051480 ] ASF GitHub Bot commented on ZOOKEEPER-2184: --- Github user adyach commented on the issue: https://github.com/apache/zookeeper/pull/199 @geek101 will it help to update the list of the ip address in case I use load balancer in connection string? I am asking since I have not found when zookeeper updates list of got ip address. In case we have a situation, when all ip address are not valid anymore. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.4.14#64029)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15931071#comment-15931071 ] Powell Molleti commented on ZOOKEEPER-2184: --- not sure what the failure above is but the cpp unit tests work for me locally for that PR I submitted. {noformat} [exec] [exec] *** Error in `./zktest-mt': corrupted double-linked list: 0x012a5810 *** [exec] [exec] Zookeeper_readOnly::testReadOnly : elapsed 4101 : OK [exec] [exec] OK (74) [exec] [exec] FAIL: zktest-mt [exec] [exec] == [exec] [exec] 1 of 2 tests failed [exec] [exec] Please report to u...@zookeeper.apache.org [exec] [exec] == [exec] [exec] make[1]: Leaving directory `/home/jenkins/jenkins-slave/workspace/PreCommit-ZOOKEEPER-github-pr-build/build/test/test-cppunit' [exec] [exec] /bin/bash: line 5: 8114 Aborted (core dumped) ZKROOT=/home/jenkins/jenkins-slave/workspace/PreCommit-ZOOKEEPER-github-pr-build/src/c/../.. CLASSPATH=$CLASSPATH:$CLOVER_HOME/lib/clover.jar ${dir}$tst [exec] [exec] make[1]: *** [check-TESTS] Error 1 [exec] [exec] make: *** [check-am] Error 2 {noformat} > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15929599#comment-15929599 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 75 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. +1 release audit. The applied patch does not increase the total number of release audit warnings. -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/441//testReport/ Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/441//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/441//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15929571#comment-15929571 ] Hadoop QA commented on ZOOKEEPER-2184: -- -1 overall. GitHub Pull Request Build +1 @author. The patch does not contain any @author tags. +1 tests included. The patch appears to include 75 new or modified tests. +1 javadoc. The javadoc tool did not generate any warning messages. +1 javac. The applied patch does not increase the total number of javac compiler warnings. +1 findbugs. The patch does not introduce any new Findbugs (version 3.0.1) warnings. -1 release audit. The applied patch generated 2 release audit warnings (more than the trunk's current 0 warnings). -1 core tests. The patch failed core unit tests. +1 contrib tests. The patch passed contrib unit tests. Test results: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/440//testReport/ Release audit warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/440//artifact/trunk/patchprocess/patchReleaseAuditProblems.txt Findbugs warnings: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/440//artifact/trunk/build/test/findbugs/newPatchFindbugsWarnings.html Console output: https://builds.apache.org/job/PreCommit-ZOOKEEPER-github-pr-build/440//console This message is automatically generated. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15927537#comment-15927537 ] Powell Molleti commented on ZOOKEEPER-2184: --- Hi All, I have worked on some other issue where I had to change StaticHostProvider to contain ServerCfg class which include the host string provided at config time, the resolved Inetaddress and SSL cert fingerprint. And also fixing all the plumbing everywhere to carry or operate upon ServerCfg. Will this be sufficient to address this issue?. https://github.com/apache/zookeeper/pull/185/files#diff-1b64f5144158570491cfdec2b93b5c79 I have modified this PR to fit needs of having a chance at getting SSL support committed hence I removed these changes and published a different PR: https://github.com/apache/zookeeper/pull/188 (has the StaticHostProvider host changes removed and all the plumbing restored) for your reference to changes with and without StaticHostProvider modified. Let me know if this a direction worth while pursuing I can carve out just the StaticHostProvider changes (without the SSL cert fingerprint in ServerCfg) and publish them as a PR. thanks Powell. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.4, 3.6.0, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.3.15#6346)
[jira] [Commented] (ZOOKEEPER-2184) Zookeeper Client should re-resolve hosts when connection attempts fail
[ https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel=15873747#comment-15873747 ] Benjamin Reed commented on ZOOKEEPER-2184: -- another option would be to have a background worker that periodically wakes up and re-resolves hosts every few minutes. if we ever get a connection failure we could use that to kick the background worker to run right away. > Zookeeper Client should re-resolve hosts when connection attempts fail > -- > > Key: ZOOKEEPER-2184 > URL: https://issues.apache.org/jira/browse/ZOOKEEPER-2184 > Project: ZooKeeper > Issue Type: Bug > Components: java client >Affects Versions: 3.4.6, 3.5.0 > Environment: Ubuntu 14.04 host, Docker containers for Zookeeper & > Kafka >Reporter: Robert P. Thille >Assignee: Flavio Junqueira > Labels: easyfix, patch > Fix For: 3.5.3, 3.4.11 > > Attachments: ZOOKEEPER-2184.patch > > > Testing in a Docker environment with a single Kafka instance using a single > Zookeeper instance. Restarting the Zookeeper container will cause it to > receive a new IP address. Kafka will never be able to reconnect to Zookeeper > and will hang indefinitely. Updating DNS or /etc/hosts with the new IP > address will not help the client to reconnect as the > zookeeper/client/StaticHostProvider resolves the connection string hosts at > creation time and never re-resolves. > A solution would be for the client to notice that connection attempts fail > and attempt to re-resolve the hostnames in the connectString. -- This message was sent by Atlassian JIRA (v6.3.15#6346)