From: Ryota MIBU Date: Mon, 5 Aug 2013 04:42:45 +0000 (+0900) Subject: Make NEC Plugin ignore duplicated messgae from the agent X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=f27fba3ad77d907713e3e1cbfa45d33e0135c08b;p=openstack-build%2Fneutron-build.git Make NEC Plugin ignore duplicated messgae from the agent Fixes: bug #1208708 Change-Id: I7d2b779fd0a7356c03e5ef911a98c164a53903ce --- diff --git a/neutron/plugins/nec/nec_plugin.py b/neutron/plugins/nec/nec_plugin.py index 7f9b97c97..935309e27 100644 --- a/neutron/plugins/nec/nec_plugin.py +++ b/neutron/plugins/nec/nec_plugin.py @@ -537,6 +537,11 @@ class NECPluginV2RPCCallbacks(object): id = p['id'] portinfo = ndb.get_portinfo(session, id) if portinfo: + if (portinfo.datapath_id == datapath_id and + portinfo.port_no == p['port_no']): + LOG.debug(_("update_ports(): ignore unchanged portinfo in " + "port_added message (port_id=%s)."), id) + continue ndb.del_portinfo(session, id) ndb.add_portinfo(session, id, datapath_id, p['port_no'], mac=p.get('mac', '')) diff --git a/neutron/tests/unit/nec/test_nec_plugin.py b/neutron/tests/unit/nec/test_nec_plugin.py index bab4f3d33..c42fe1590 100644 --- a/neutron/tests/unit/nec/test_nec_plugin.py +++ b/neutron/tests/unit/nec/test_nec_plugin.py @@ -283,6 +283,29 @@ class TestNecPortsV2Callback(NecPluginV2TestCase): self.assertEqual(2, self.ofc.create_ofc_port.call_count) self.assertEqual(1, self.ofc.delete_ofc_port.call_count) + def test_portinfo_readd(self): + with self.port() as port: + port_id = port['port']['id'] + self.plugin.get_port(self.context, port_id) + + portinfo = {'id': port_id, 'port_no': 123} + self.rpcapi_update_ports(added=[portinfo]) + + sport = self.plugin.get_port(self.context, port_id) + self.assertEqual(sport['status'], 'ACTIVE') + self.assertEqual(self.ofc.create_ofc_port.call_count, 1) + self.assertEqual(self.ofc.delete_ofc_port.call_count, 0) + self.assertIsNotNone(self._get_portinfo(port_id)) + + portinfo = {'id': port_id, 'port_no': 123} + self.rpcapi_update_ports(added=[portinfo]) + + sport = self.plugin.get_port(self.context, port_id) + self.assertEqual(sport['status'], 'ACTIVE') + self.assertEqual(self.ofc.create_ofc_port.call_count, 1) + self.assertEqual(self.ofc.delete_ofc_port.call_count, 0) + self.assertIsNotNone(self._get_portinfo(port_id)) + class TestNecPluginDbTest(NecPluginV2TestCase):