def election(self, handle):
"""
:param handle: Election completed, will call this.
:type handle: callable
:return:
"""
if not callable(handle):
raise err.OctpProgramError('Parameter `handler` must be callable.')
while True:
self._election() # do election
if self._locker.is_acquired:
log.debug('Got locker')
gevent.spawn(self._heartbeat_handler)
handle() # call callback
break # everything finished
else:
log.debug('Get locker failed, start watcher.')
g = gevent.spawn(self._watcher_handler) # watch locker, election again when current locker is expired.
g.join() # wait master lose locker, then retry election
评论列表
文章目录