]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Make NEC Plugin ignore duplicated messgae from the agent
authorRyota MIBU <r-mibu@cq.jp.nec.com>
Mon, 5 Aug 2013 04:42:45 +0000 (13:42 +0900)
committerRyota MIBU <r-mibu@cq.jp.nec.com>
Tue, 6 Aug 2013 08:39:47 +0000 (17:39 +0900)
Fixes: bug #1208708
Change-Id: I7d2b779fd0a7356c03e5ef911a98c164a53903ce

neutron/plugins/nec/nec_plugin.py
neutron/tests/unit/nec/test_nec_plugin.py

index 7f9b97c979cc9fd0e136db3897622e936c47496e..935309e277fe7e90919642dc9098954a54d40eac 100644 (file)
@@ -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', ''))
index bab4f3d33781646b0eb0f6bcd7dcb5071b0701dc..c42fe159054cf16dedf9a5420672c53ea49dfbae 100644 (file)
@@ -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):