Пример #1
0
 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))
Пример #2
0
 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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
 def watcher(handle, type, state, path):
     log.info("  Connected to zookeeper")
     self.cv.acquire()
     self.connected = True
     self.cv.notify()
     self.cv.release()
Пример #6
0
        '''
        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
Пример #7
0
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)
Пример #8
0
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)