def test_zk_master_detector_creation(self): class WrappedZookeeperMasterDetector(ZookeeperMasterDetector): def __init__(self, *args, **kw): super(WrappedZookeeperMasterDetector, self).__init__(*args, **kw) self.changed = threading.Event() def on_change(self, membership): self.changed.set() super(WrappedZookeeperMasterDetector, self).on_change(membership) event = threading.Event() leader_queue = [] def appointed_callback(future): leader_queue.append(future.result()) event.set() self.create_root() # construct master detector and detect master detector = WrappedZookeeperMasterDetector.from_uri(self.uri) leader_future = detector.detect().add_done_callback(appointed_callback) # trigger detection by registering master master_pid = PID('10.1.2.3', 12345, 'master(1)') self.register_master(master_pid) detector.changed.wait(timeout=10) assert detector.changed.is_set() event.wait(timeout=10) assert event.is_set() assert leader_queue == [master_pid] leader_queue = [] event.clear() # start new detection loop when existing master changes leader_future = detector.detect(master_pid).add_done_callback( appointed_callback) detector.changed.clear() # register new master (won't trigger detection until original master is gone.) new_master_pid = PID('10.2.3.4', 12345, 'master(1)') self.register_master(new_master_pid) detector.changed.wait(timeout=10) assert detector.changed.is_set() detector.changed.clear() assert leader_queue == [] assert not event.is_set() # failover existing master assert self.unregister_master(master_pid) # make sure new master is detected. detector.changed.wait(timeout=10) assert detector.changed.is_set() event.wait(timeout=10) assert event.is_set() assert leader_queue == [new_master_pid]
def send_run_task(self, to, framework_id, task): message = internal.RunTaskMessage( framework_id=framework_id, framework=self._framework_map[framework_id.value], task=task, # this appears to be no longer used though it is a required field. pid=str(PID('127.0.0.1', 31337, 'not_used(123)')), ) self.send(to, message)