def follow_leader(remote): global currentleader cfm.follow_channel(remote) # The leader has folded, time to startup again... cfm.stop_following() currentleader = None eventlet.spawn_n(start_collective)
def follow_leader(remote, leader): global currentleader cleanexit = False try: cfm.follow_channel(remote) except greenlet.GreenletExit: cleanexit = True finally: if cleanexit: log.log({ 'info': 'Previous following cleanly closed', 'subsystem': 'collective' }) return log.log({ 'info': 'Current leader ({0}) has disappeared, restarting ' 'collective membership'.format(leader), 'subsystem': 'collective' }) # The leader has folded, time to startup again... cfm.stop_following() currentleader = None eventlet.spawn_n(start_collective)
def follow_leader(remote, leader): global currentleader global retrythread global follower cleanexit = False newleader = None try: exitcause = cfm.follow_channel(remote) newleader = exitcause.get('newleader', None) except greenlet.GreenletExit: cleanexit = True finally: if cleanexit: log.log({ 'info': 'Previous following cleanly closed', 'subsystem': 'collective' }) return if newleader: log.log({ 'info': 'Previous leader directed us to join new leader {}'.format( newleader) }) if connect_to_leader(None, get_myname(), newleader): return log.log({ 'info': 'Current leader ({0}) has disappeared, restarting ' 'collective membership'.format(leader), 'subsystem': 'collective' }) # The leader has folded, time to startup again... follower = None cfm.stop_following() currentleader = None if retrythread is None: # start a recovery retrythread = eventlet.spawn_after(random.random(), start_collective)