def _create_heart_beat_reporter(self, host): listener = core.Listener( id=host, ppid=os.getppid(), ) self.nb_api.register_listener_callback(self.notify_neutron_server, listener.topic) LOG.info("Register listener %s", listener.id) self.heart_beat_reporter = HeartBeatReporter(self.nb_api, listener) self.heart_beat_reporter.daemonize()
def create_heart_beat_reporter(self, host): listener = self.nb_api.get(core.Listener(id=host)) if listener is None: self._create_heart_beat_reporter(host) else: ppid = listener.ppid my_ppid = os.getppid() LOG.info("Listener %(l)s exists, my ppid is %(ppid)s", {'l': listener, 'ppid': my_ppid}) # FIXME(wangjian): if api_worker is 1, the old ppid could be # equal to my_ppid. I tried to set api_worker=1, still multiple # neutron-server processes were created. if ppid != my_ppid: self.nb_api.delete(listener) self._create_heart_beat_reporter(host)
def test_notify_neutron_server(self): listener = core.Listener(id="1") self.notifier.nb_api = mock.MagicMock() self.notifier.nb_api.get_all.return_value = [listener] with mock.patch("dragonflow.db.db_common.DbUpdate"): self._nofity_neutron_server_call_with_correct_args( "fake_table", "fake_port", "update", "up") self._nofity_neutron_server_call_with_correct_args( "fake_table1", "fake_port1", "create", "down")
def test_valid_heart_beat_reporter_exists(self): listener = core.Listener(id='fake_host', ppid=1) self.notifier.nb_api.get.return_value = listener self.notifier.create_heart_beat_reporter('fake_host') self.notifier.nb_api.register_listener_callback.assert_not_called()
def test_replace_heart_beat_reporter(self): listener = core.Listener(id='fake_host', ppid=6) self.notifier.nb_api.get.return_value = listener self.notifier.create_heart_beat_reporter('fake_host') self.notifier.nb_api.register_listener_callback.assert_called_once()