]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Replace get_all_neutron_bridges by get_deletable_bridges
authorCedric Brandily <zzelle@gmail.com>
Thu, 5 Nov 2015 23:49:21 +0000 (00:49 +0100)
committerCedric Brandily <zzelle@gmail.com>
Wed, 11 Nov 2015 10:14:23 +0000 (10:14 +0000)
Currently LinuxBridge L2-agent[1] defines get_all_neutron_bridges which
lists all bridges managed by the agent including user-defined ones BUT
this method is only used by neutron-linuxbridge-cleanup[2] in order to
remove empty non-user-defined bridges returned get_all_neutron_bridges.

This change replaces this method by get_deletable_bridges which returns
bridges managed by LB agent which are "deletable" (ie: non user-defined).
This allows to simplify code and move the computation of "deletable"
bridges to LB agent code.

[1] neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent
[2] neutron.cmd.linuxbridge_cleanup

Partial-Bug: #1514548
Change-Id: I2f8a9a6982ce0ce77187ae4b7a58b3ef752aab34

neutron/cmd/linuxbridge_cleanup.py
neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py
neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py

index 3ecb315ab2dcdb0d9d7e1ad727215ff5af33f2fb..4daf665ad8a5f126e00a28fa7805050641fc21c4 100644 (file)
@@ -45,10 +45,7 @@ def remove_empty_bridges():
     lb_manager = linuxbridge_neutron_agent.LinuxBridgeManager(
         bridge_mappings, interface_mappings)
 
-    # NOTE(mgagne) Don't remove pre-existing user-defined bridges
-    bridge_names = set(lb_manager.get_all_neutron_bridges())
-    bridge_names -= set(bridge_mappings.values())
-
+    bridge_names = lb_manager.get_deletable_bridges()
     for bridge_name in bridge_names:
         if lb_manager.get_tap_devices_count(bridge_name):
             continue
index 9568db2519a75652c10c822b6ea8ed4963ac3fef..1ba1b6e00e1417697e5f83370744df31b7e92133 100644 (file)
@@ -163,18 +163,11 @@ class LinuxBridgeManager(object):
                             "range"),
                         cfg.CONF.VXLAN.vxlan_group)
 
-    def get_all_neutron_bridges(self):
-        neutron_bridge_list = []
+    def get_deletable_bridges(self):
         bridge_list = bridge_lib.get_bridge_names()
-        for bridge in bridge_list:
-            if bridge.startswith(BRIDGE_NAME_PREFIX):
-                neutron_bridge_list.append(bridge)
-
-        # NOTE(nick-ma-z): Add pre-existing user-defined bridges
-        for bridge_name in self.bridge_mappings.values():
-            if bridge_name not in neutron_bridge_list:
-                neutron_bridge_list.append(bridge_name)
-        return neutron_bridge_list
+        bridges = {b for b in bridge_list if b.startswith(BRIDGE_NAME_PREFIX)}
+        bridges.difference_update(self.bridge_mappings.values())
+        return bridges
 
     def get_tap_devices_count(self, bridge_name):
         if_list = bridge_lib.BridgeDevice(bridge_name).get_interfaces()
index 2d3e94ef79706da29a23a08df0b59600e942a8e4..aab03ea302ad1c034a2389215b778f8e99e4d904 100644 (file)
@@ -436,14 +436,14 @@ class TestLinuxBridgeManager(base.BaseTestCase):
         cfg.CONF.set_override('vxlan_group', '224.0.0.1/', 'VXLAN')
         self.assertIsNone(self.lbm.get_vxlan_group(vn_id))
 
-    def test_get_all_neutron_bridges(self):
-        br_list = ["br-int", "brq1", "brq2", "br-ex"]
-        result = br_list[1:3]
-        result.append('br-eth2')
-
+    def test_get_deletable_bridges(self):
+        br_list = ["br-int", "brq1", "brq2", "brq-user"]
+        expected = set(br_list[1:3])
+        lbm = get_linuxbridge_manager(
+            bridge_mappings={"physnet0": "brq-user"}, interface_mappings={})
         with mock.patch.object(
                 bridge_lib, 'get_bridge_names', return_value=br_list):
-            self.assertEqual(result, self.lbm.get_all_neutron_bridges())
+            self.assertEqual(expected, lbm.get_deletable_bridges())
 
     def test_get_tap_devices_count(self):
         with mock.patch.object(