You can safely ignore the exception as Curator will re-register the service 
when the connection heals. That said, it seems to me that registerService() 
should do its work in the background. Please open an issue for this.

-JZ


From: Olli Miettinen [email protected]
Reply: [email protected] [email protected]
Date: May 14, 2014 at 3:11:22 AM
To: [email protected] [email protected]
Subject:  How to recover if ZK is unavailable at Curator start up?  

Hello,

I'm using Curator Discovery Service to register my application's host IP 
address to Zookeeper.
(Curator 2.4.2 and Zookeeper 3.4.5)

If Zookeeper cluster is unavailable to my application at start-up, an exception 
is thrown from ServiceDiscovery.registerService() after retries are finished.

I need my app to retry until it successfully registers to Discovery Service so 
can't use the RetryPolicy as it seems to have a limited max number of retries.

Should I maybe observe the ZK connection state and register to Discover Service 
only after successfully connected?
Or catch the exception and implement my own retry of registering when 
RetryPolicy runs out of retries?
Other suggestions?

This is my code:

CuratorFramework client = ...
ServiceDiscovery<InstanceDetails> serviceDiscovery =  ...
ServiceInstance<InstanceDetails> serviceInstance = ...

public void start() throws Exception {
    client.start();
    serviceDiscovery.start();
    serviceDiscovery.registerService(serviceInstance);
    // ...
}

Here's the exception I get at serviceDiscovery.registerService()

2014-05-13 16:04:25,315 [main] DEBUG org.apache.curator.RetryLoop : Retry 
policy not allowing retry
Exception in thread "main" 
org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = 
ConnectionLoss for /discovery/myapp/10.36.101.36
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:99)
    at org.apache.zookeeper.KeeperException.create(KeeperException.java:51)
    at org.apache.zookeeper.ZooKeeper.create(ZooKeeper.java:783)
    at 
org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:676)
    at 
org.apache.curator.framework.imps.CreateBuilderImpl$11.call(CreateBuilderImpl.java:660)
    at org.apache.curator.RetryLoop.callWithRetry(RetryLoop.java:107)
    at 
org.apache.curator.framework.imps.CreateBuilderImpl.pathInForeground(CreateBuilderImpl.java:657)
    at 
org.apache.curator.framework.imps.CreateBuilderImpl.protectedPathInForeground(CreateBuilderImpl.java:441)
    at 
org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:431)
    at 
org.apache.curator.framework.imps.CreateBuilderImpl.forPath(CreateBuilderImpl.java:44)
    at 
org.apache.curator.x.discovery.details.ServiceDiscoveryImpl.internalRegisterService(ServiceDiscoveryImpl.java:176)
    at 
org.apache.curator.x.discovery.details.ServiceDiscoveryImpl.registerService(ServiceDiscoveryImpl.java:150)
    at 
com.mycompany.zookeeper.discovery.MyDiscoveryClient.start(MyDiscoveryClient.java:51)

Thanks for any advice,
Olli

Reply via email to