From 2de5a5f64ac18f46ba2cd0e93eaeb61bdaf0e473 Mon Sep 17 00:00:00 2001 From: Dima Kuznetsov Date: Mon, 13 Nov 2017 10:20:02 +0200 Subject: [PATCH] Topology: remove local cache of OVS ports A previous patch moves all OvsPort filtering to vswitch_impl. This makes all updates valid for topology. This patch removes the local cache in favor of using DbStore. Partial-Bug: #1737339 Change-Id: I686ec4dc99eda643db85b2a4f706250e58155e89 --- dragonflow/controller/topology.py | 15 +++------------ dragonflow/tests/unit/test_topology.py | 4 +--- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/dragonflow/controller/topology.py b/dragonflow/controller/topology.py index cd3477df9..1aa432d2a 100644 --- a/dragonflow/controller/topology.py +++ b/dragonflow/controller/topology.py @@ -42,7 +42,6 @@ class Topology(object): self.topic_subscribed = {} self.enable_selective_topo_dist = \ enable_selective_topology_distribution - self.ovs_ports = {} self.ovs_to_lport_mapping = {} self.controller = controller @@ -64,14 +63,11 @@ class Topology(object): @return : None """ LOG.info("Ovs port updated: %s", ovs_port) - port_id = ovs_port.id - old_port = self.ovs_ports.get(port_id) - if old_port is None: + if orig_ovs_port is None: action = "added" else: action = 'updated' - self.ovs_ports[port_id] = ovs_port port_type = ovs_port.type if port_type not in _OVS_PORT_TYPES: LOG.info("Unmanaged port online: %s", ovs_port) @@ -96,10 +92,6 @@ class Topology(object): @param ovs_port: @return : None """ - ovs_port = self.ovs_ports.get(ovs_port.id) - if ovs_port is None: - return - port_type = ovs_port.type if port_type not in _OVS_PORT_TYPES: LOG.info("Unmanaged port offline: %s", ovs_port) @@ -116,8 +108,6 @@ class Topology(object): except Exception: LOG.exception("Exception occurred when handling " "ovs port offline event") - finally: - del self.ovs_ports[ovs_port.id] def _tunnel_port_added(self, ovs_port): self._tunnel_port_updated(ovs_port) @@ -284,7 +274,8 @@ class Topology(object): new_ovs_to_lport_mapping = {} add_ovs_to_lport_mapping = {} delete_ovs_to_lport_mapping = self.ovs_to_lport_mapping - for key, ovs_port in self.ovs_ports.items(): + for ovs_port in self.db_store.get_all(ovs.OvsPort): + key = ovs_port.id if ovs_port.type == constants.OVS_VM_INTERFACE: lport = self._get_lport(ovs_port) if lport is None: diff --git a/dragonflow/tests/unit/test_topology.py b/dragonflow/tests/unit/test_topology.py index 1239bd3c4..ca70db2bd 100644 --- a/dragonflow/tests/unit/test_topology.py +++ b/dragonflow/tests/unit/test_topology.py @@ -164,6 +164,7 @@ class TestTopology(test_app_base.DFAppTestBase): self.assertEqual(4, self.controller.update.call_count) self.nb_api.subscriber.register_topic.assert_called_once() + @utils.with_local_objects(test_app_base.fake_ovs_port1) def test_check_topology_info(self): topic = 'fake_tenant1' lport_id2 = '2' @@ -181,9 +182,6 @@ class TestTopology(test_app_base.DFAppTestBase): topic=topic ) } - self.topology.ovs_ports = { - 'fake_ovs_port1': test_app_base.fake_ovs_port1 - } self.topology.topic_subscribed = { topic: {lport_id2, lport_id3} }