One current way to check for non-existence (other than catching HelixException on HelixAdmin#getInstanceConfig) is to check if HelixDataAccessor#getProperty(keyBuilder.instanceConfig(instanceName) returns null.
As Kishore said, we will support create if not exists, and it won't throw a RuntimeException. Kanak ________________________________ > Date: Wed, 2 Oct 2013 09:06:37 -0700 > Subject: Re: Restarting a participant with same configuration > From: [email protected] > To: [email protected] > > Hi Matthieu, > > Looks like you setting up the configuration and adding the instance to > Helix when the node starts?. Any reason why instances cannot be added > to cluster upfront using Helix cli. This way the only thing needed by > participant while connecting is instance id. > > If your application does not allow that, then you should able to check > for existing instance before creating new one. > > We are adding new apis to atomically create if not exists cluster, > resource and participant. > > thanks, > Kishore G > > > > On Wed, Oct 2, 2013 at 1:49 AM, Matthieu Morel > <[email protected]<mailto:[email protected]>> wrote: > Hi, > > For a participant to register with Helix, we setup a configuration, > then add an instance to Helix with "HelixAdmin#addInstance(clusterName, > config);" > > When a given participant fails / stops and is restarted, it will reuse > the same Helix configuration that the failed/stopped instance it > replaces (it reads the same config file and runs on the same host > etc...). However since Helix kept the previous instance and > configuration, it will reject this one (throwing a runtime > HelixException). > > One way to overcome this issue is to capture the exception, drop the > instance from Helix (HelixAdmin#dropInstance) and add it again. I'm not > sure that's a very appropriate solution though, and was wondering > whether there was a better way? > > Thanks! > > Matthieu > >
