[ 
https://issues.apache.org/jira/browse/ZOOKEEPER-2184?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=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)

Reply via email to