diff --git a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py index db7b92b0cc..6cdca563c2 100644 --- a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py @@ -200,6 +200,9 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin): 'start_flag': True} self.setup_rpc() + # Keep track of int_br's device count for use by _report_state() + self.int_br_device_count = 0 + # Security group agent supprot self.sg_agent = OVSSecurityGroupAgent(self.context, self.plugin_rpc, @@ -213,9 +216,8 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin): def _report_state(self): try: # How many devices are likely used by a VM - ports = self.int_br.get_vif_port_set() - num_devices = len(ports) - self.agent_state.get('configurations')['devices'] = num_devices + self.agent_state.get('configurations')['devices'] = ( + self.int_br_device_count) self.state_rpc.report_state(self.context, self.agent_state) self.agent_state.pop('start_flag', None) @@ -694,6 +696,7 @@ class OVSNeutronAgent(sg_rpc.SecurityGroupAgentRpcCallbackMixin): ports = self.int_br.get_vif_port_set() if ports == registered_ports: return + self.int_br_device_count = len(ports) added = ports - registered_ports removed = registered_ports - ports return {'current': ports, diff --git a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py index 5f6192a382..2764a9592e 100644 --- a/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py +++ b/neutron/tests/unit/openvswitch/test_ovs_neutron_agent.py @@ -222,18 +222,16 @@ class TestOvsNeutronAgent(base.BaseTestCase): self.assertTrue(device_removed.called) def test_report_state(self): - with contextlib.nested( - mock.patch.object(self.agent.int_br, "get_vif_port_set"), - mock.patch.object(self.agent.state_rpc, "report_state") - ) as (get_vif_fn, report_st): - get_vif_fn.return_value = ["vif123", "vif234"] + with mock.patch.object(self.agent.state_rpc, + "report_state") as report_st: + self.agent.int_br_device_count = 5 self.agent._report_state() - self.assertTrue(get_vif_fn.called) report_st.assert_called_with(self.agent.context, self.agent.agent_state) self.assertNotIn("start_flag", self.agent.agent_state) self.assertEqual( - self.agent.agent_state["configurations"]["devices"], 2 + self.agent.agent_state["configurations"]["devices"], + self.agent.int_br_device_count ) def test_network_delete(self):