class MasterDetector(object): def __init__(self, uri, agent): self.uri = uri self.agent = agent self.zk = ZKClient(uri, 10) self.masterSeq = None def choose(self, children): children = [child for child in children if child != 'log_replicas'] if not children: self.agent.onNoMasterDetectedMessage() return True masterSeq = min(children) if masterSeq == self.masterSeq: return True self.masterSeq = masterSeq DataWatch(self.zk, '/' + masterSeq, self.notify) return True def notify(self, master_addr, _): self.agent.onNewMasterDetectedMessage(master_addr) return False def start(self): adjust_zk_logging_level() self.zk.start() try: ChildrenWatch(self.zk, '', self.choose) except ZookeeperError: self.agent.onNoMasterDetectedMessage() self.stop() def stop(self): try: self.zk.stop() except: pass
class MasterDetector(object): def __init__(self, uri, agent): self.uri = uri self.agent = agent self.zk = ZKClient(uri, 10) self.masterSeq = None def choose(self, children): if not children: self.agent.onNoMasterDetectedMessage() return True masterSeq = min(children) if masterSeq == self.masterSeq: return True self.masterSeq = masterSeq DataWatch(self.zk, '/' + masterSeq, self.notify) return True def notify(self, master_addr, _): self.agent.onNewMasterDetectedMessage(master_addr) return False def start(self): adjust_zk_logging_level() self.zk.start() try: ChildrenWatch(self.zk, '', self.choose) except ZookeeperError: self.agent.onNoMasterDetectedMessage() self.stop() def stop(self): try: self.zk.stop() except: pass
def __init__(self, uri, agent): self.uri = uri self.agent = agent self.zk = ZKClient(uri, 10) self.masterSeq = None