@ Nicolaos I really don’t think that will work. When you use this code, it creates a node under /mesos named like: _c_e7007a30-1eaf-4826-bb99-011e8a33ac111-lock-0000000099 because it is gaining leadership. It does not create nodes like mesos does, with names like info_0000000123. It therefore does not play well with mesos.
I don’t think the Curator code matches the mesos code in exactly how it does leadership election. I’ll just scan the mesos-created children of /mesos, they all begin with the string “info” and are ephemeral sequence nodes. Their contents contains the info I need, which I can parse using the mesos protocol buffer definition for MasterInfo. Although I think your substring method would work just as well. At least it will until 0.24 when the content is changed to a JSON string. Best regards, -Don > On Jul 8, 2015, at 11:49 AM, Ken Sipe <kens...@gmail.com> wrote: > > awesome sharing of code! > > I’ll add that if you are using Mesos-DNS, that the dns name master.mesos will > resolve to the masters and leader.mesos will resolve to the leader. > > if you are looking to resolve to marathon leader you would have to use the > code below against zk at the moment. > > - ken > >> On Jul 8, 2015, at 9:42 AM, Nikolaos Ballas neXus >> <nikolaos.bal...@nexusgroup.com <mailto:nikolaos.bal...@nexusgroup.com>> >> wrote: >> >> Don…the bellow code will return leader node for mesos & marathon framework. >> >> import … >> public class SomeClass { >> CuratorFramework client; >> public void init(){ >> client = CuratorFrameworkFactory.newClient(connectionString, new >> ExponentialBackoffRetry(1000, 3)) >> } >> public String getMasterNodeIP(){ >> if(client!=null){ >> client.start(); >> LeaderSelectorListener listener = new >> LeaderSelectorListenerAdapter() { >> public void takeLeadership(CuratorFramework client) throws >> Exception { >> } >> }; >> >> LeaderSelector selector = new LeaderSelector(client, path, listener); >> selector.autoRequeue(); >> selector.start(); >> >> Participant participant = selector.getLeader(); >> String id = >> participant.getId().substring(participant.getId().indexOf("@") + 1, >> participant.getId().indexOf("*")); >> masterNode.add(id); >> } >> } catch (Exception e) { >> logger.error("Failed find out master node", e.getCause()); >> } >> >> } >> } >> Nikolaos Ballas | Software Development Manager >> >> Technology Nexus S.a.r.l. >> 2-4 Rue Eugene Rupert >> 2453 Luxembourg >> Delivery address: 2-3 Rue Eugene Rupert,Vertigo Polaris Building >> Tel: + 3522619113580 >> cont...@nexusgroup.com <mailto:contact...@nexusgroup.com> | nexusgroup.com >> <http://www.nexusgroup.com/> >> LinkedIn.com <http://www.linkedin.com/company/nexus-technology> | Twitter >> <http://www.twitter.com/technologynexus> | Facebook.com >> <https://www.facebook.com/pages/Technology-Nexus/133756470003189> >> >> >> <C5B06FBE-74F4-416B-9BCE-F914341A2E0B_4_.png> >> >>> On 08 Jul 2015, at 16:27, Donald Laidlaw <donlaid...@me.com >>> <mailto:donlaid...@me.com>> wrote: >>> >>> @Nikolaos Ballas neXus >>> I can see no way to instantiate the Curator LeaderSelector without actually >>> becoming a participant in leader election. If I do instantiate that class, >>> it does not accept a null value for the LeaderSelectorListener and so >>> anything instantiating LeaderSelector must also become a participant. >>> >>> Even then, that class provides no way to listen for leadership change. The >>> only listening it does is to discover when it itself becomes the leader. I >>> suppose it would be possible to participate in the leadership election, but >>> immediately relinquish leadership causing a real mesos master to become the >>> leader, but that seems a little too invasive to do. >>> >>> The only solution I can see is to monitor the children of the mesos leader >>> node, and parse through the contents of the ones whose name begins with >>> “info” as per @Marco Massenzio. >>> >>> Best regards, >>> -Don >>> >>>> On Jul 7, 2015, at 12:16 PM, Donald Laidlaw <donlaid...@me.com >>>> <mailto:donlaid...@me.com>> wrote: >>>> >>>> Thank you all. >>>> >>>> I will use the Curator recipe, since I already use Curator for a bunch of >>>> other things. >>>> >>>> If curator can find the leader and the participants that is good enough. >>>> Otherwise I will parse the protocol buffer contents, and provide a way to >>>> parse the future son contents when that happens. >>>> >>>> I’ll reply again with the results of using the Curator recipe to get the >>>> leader and participants. >>>> >>>> Best regards, >>>> -Don >>>> >>>>> On Jul 7, 2015, at 11:04 AM, Dick Davies <d...@hellooperator.net >>>>> <mailto:d...@hellooperator.net>> wrote: >>>>> >>>>> The active master has a flag set in /metrics/snapshot : >>>>> "master/elected" which is 1 for the active >>>>> master and 0 otherwise, so it's easy enough to only load the metrics >>>>> from the active master. >>>>> >>>>> (I use the collectd plugin and push data rather than poll, but the >>>>> same principle should apply). >>>>> >>>>> On 7 July 2015 at 14:02, Donald Laidlaw <donlaid...@me.com >>>>> <mailto:donlaid...@me.com>> wrote: >>>>>> Has anyone ever developed Java code to detect the mesos masters and >>>>>> leader, given a zookeeper connection? >>>>>> >>>>>> The reason I ask is because I would like to monitor mesos to report >>>>>> various metrics reported by the master. This requires detecting and >>>>>> tracking the leading master to query its /metrics/snapshot REST endpoint. >>>>>> >>>>>> Thanks, >>>>>> -Don >>>> >>> >> >