ancillary_ports = set()
tunnel_sync = True
ovs_status = constants.OVS_NORMAL
+ ovs_restarted = False
while self.run_daemon_loop:
start = time.time()
port_stats = {'regular': {'added': 0,
except Exception:
LOG.exception(_LE("Error while synchronizing tunnels"))
tunnel_sync = True
- ovs_restarted = (ovs_status == constants.OVS_RESTARTED)
+ ovs_restarted |= (ovs_status == constants.OVS_RESTARTED)
if self._agent_has_updates(polling_manager) or ovs_restarted:
try:
LOG.debug("Agent rpc_loop - iteration:%(iter_num)d - "
sync = sync | rc
polling_manager.polling_completed()
+ # Keep this flag in the last line of "try" block,
+ # so we can sure that no other Exception occurred.
+ if not sync:
+ ovs_restarted = False
except Exception:
LOG.exception(_LE("Error while processing VIF ports"))
# Put the ports back in self.updated_port
self.agent.tunnel_delete(context=None, **kwargs)
self.assertTrue(clean_tun_fn.called)
- def test_ovs_status(self):
+ def _test_ovs_status(self, *args):
reply2 = {'current': set(['tap0']),
'added': set(['tap2']),
'removed': set([])}
scan_ports.side_effect = [reply2, reply3]
process_network_ports.side_effect = [
False, Exception('Fake exception to get out of the loop')]
- check_ovs_status.side_effect = [constants.OVS_NORMAL,
- constants.OVS_DEAD,
- constants.OVS_RESTARTED]
-
- # This will exit after the third loop
+ check_ovs_status.side_effect = args
try:
self.agent.daemon_loop()
except Exception:
mock.call(set(), set())
])
process_network_ports.assert_has_calls([
- mock.call({'current': set(['tap0']),
- 'removed': set([]),
- 'added': set(['tap2'])}, False),
- mock.call({'current': set(['tap2']),
- 'removed': set(['tap0']),
- 'added': set([])}, True)
+ mock.call(reply2, False),
+ mock.call(reply3, True)
])
self.assertTrue(update_stale.called)
- # Verify the second time through the loop we triggered an
- # OVS restart and re-setup the bridges
+ # Verify the OVS restart we triggered in the loop
+ # re-setup the bridges
setup_int_br.assert_has_calls([mock.call()])
setup_phys_br.assert_has_calls([mock.call({})])
+ def test_ovs_status(self):
+ self._test_ovs_status(constants.OVS_NORMAL,
+ constants.OVS_DEAD,
+ constants.OVS_RESTARTED)
+ # OVS will not DEAD in some exception, like DBConnectionError.
+ self._test_ovs_status(constants.OVS_NORMAL,
+ constants.OVS_RESTARTED)
+
def test_set_rpc_timeout(self):
self.agent._handle_sigterm(None, None)
for rpc_client in (self.agent.plugin_rpc.client,