Пример #1
0
    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]
Пример #2
0
 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)