def run(self): ''' This runs on a loop. If a leader does not exist, it calls for an election. Else sleeps for a while. ''' self.nominateCandidate() while(True): if ( not self.leaderExists(self.nodename)): log.info(" No leader, Need an election right now..") self.electLeader(self.handle, self.nodename, self.candidateName) time.sleep(float(self.frequency))
def electLeader(self, handle, nodename, candidateName): ''' This method elects the new leader from the list of candidates. The candidate with the lowest sequence Id gets to be the leader. ''' candidates = zookeeper.get_children(handle, nodename) myName = candidateName.rsplit('/',1)[1] leader = sorted(candidates)[0] if ( myName == leader): try: zookeeper.create(handle, nodename+"/leader",myName,[ZOO_OPEN_ACL_UNSAFE],zookeeper.EPHEMERAL) log.info(" I won the elections, I am leader now :)") self.isLeader = True except zookeeper.NodeExistsException,e: log.info(e)
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), ".."),] from pyzookeeper import election from pyzookeeper import log if __name__=="__main__": # Leader will execute the parameter passed below if ( len( sys.argv) < 3): print 'Usage:\n python '+ sys.argv[0]+' zookeeperIP:Port zNodeName failure_script' print 'zookeeperIP:Port - Point to a zookeeper instance' print 'zNodeName - A name to store in zookeeper' sys.exit(0) ipAndPort = sys.argv[1] zNodeName = '/'+sys.argv[2] failure_script = sys.argv[3] e = election(ipAndPort,zNodeName) # The below variable is to make sure the leader/candidate # script is executed only once every change of status. failed = False while(True): if ( not e.leaderExists(zNodeName) ): log.info("Leader not found, so executing failure script") os.system(failure_script) failed=True time.sleep(900) else: if(failed): log.info('Leader is now alive, back to normal') failed=False time.sleep(10)
sys.path[0:0] = [os.path.join(os.path.dirname(__file__), ".."),] from pyzookeeper import election from pyzookeeper import log if __name__=="__main__": # Leader will execute the parameter passed below if ( len( sys.argv) < 4): print 'Usage:\n python '+ sys.argv[0]+' zookeeperIP:Port leader_script candidate_script \n' print 'zookeeperIP:Port - Point to a zookeeper instance' sys.exit(0) ipAndPort = sys.argv[1] leader_script = sys.argv[2] cand_script = sys.argv[3] e = election(ipAndPort,'/spider-election') e.runElection() # The below variable is to make sure the leader/candidate # script is executed only once every change of status. previousScript = '' while(True): if(e.checkLeader() and previousScript != 'leader' ): log.info(' About to execute Leader script') os.system(leader_script) previousScript = 'leader' elif( not (e.checkLeader()) and previousScript != 'candidate'): log.info(' About to execute candidate script') os.system(cand_script) previousScript = 'candidate' else: log.info(" Nothing to do.. sleeping for 10 secs..") time.sleep(10)
def watcher(handle, type, state, path): log.info(" Connected to zookeeper") self.cv.acquire() self.connected = True self.cv.notify() self.cv.release()
''' This method elects the new leader from the list of candidates. The candidate with the lowest sequence Id gets to be the leader. ''' candidates = zookeeper.get_children(handle, nodename) myName = candidateName.rsplit('/',1)[1] leader = sorted(candidates)[0] if ( myName == leader): try: zookeeper.create(handle, nodename+"/leader",myName,[ZOO_OPEN_ACL_UNSAFE],zookeeper.EPHEMERAL) log.info(" I won the elections, I am leader now :)") self.isLeader = True except zookeeper.NodeExistsException,e: log.info(e) else: log.info(" I failed in the elections :(") self.isLeader = False def run(self): ''' This runs on a loop. If a leader does not exist, it calls for an election. Else sleeps for a while. ''' self.nominateCandidate() while(True): if ( not self.leaderExists(self.nodename)): log.info(" No leader, Need an election right now..") self.electLeader(self.handle, self.nodename, self.candidateName) time.sleep(float(self.frequency)) def checkLeader(self): return self.isLeader
from pyzookeeper import election from pyzookeeper import log if __name__ == "__main__": # Leader will execute the parameter passed below if (len(sys.argv) < 3): print 'Usage:\n python ' + sys.argv[ 0] + ' zookeeperIP:Port zNodeName failure_script' print 'zookeeperIP:Port - Point to a zookeeper instance' print 'zNodeName - A name to store in zookeeper' sys.exit(0) ipAndPort = sys.argv[1] zNodeName = '/' + sys.argv[2] failure_script = sys.argv[3] e = election(ipAndPort, zNodeName) # The below variable is to make sure the leader/candidate # script is executed only once every change of status. failed = False while (True): if (not e.leaderExists(zNodeName)): log.info("Leader not found, so executing failure script") os.system(failure_script) failed = True time.sleep(900) else: if (failed): log.info('Leader is now alive, back to normal') failed = False time.sleep(10)
from pyzookeeper import election from pyzookeeper import log if __name__ == "__main__": # Leader will execute the parameter passed below if (len(sys.argv) < 4): print 'Usage:\n python ' + sys.argv[ 0] + ' zookeeperIP:Port leader_script candidate_script \n' print 'zookeeperIP:Port - Point to a zookeeper instance' sys.exit(0) ipAndPort = sys.argv[1] leader_script = sys.argv[2] cand_script = sys.argv[3] e = election(ipAndPort, '/spider-election') e.runElection() # The below variable is to make sure the leader/candidate # script is executed only once every change of status. previousScript = '' while (True): if (e.checkLeader() and previousScript != 'leader'): log.info(' About to execute Leader script') os.system(leader_script) previousScript = 'leader' elif (not (e.checkLeader()) and previousScript != 'candidate'): log.info(' About to execute candidate script') os.system(cand_script) previousScript = 'candidate' else: log.info(" Nothing to do.. sleeping for 10 secs..") time.sleep(10)