From 69b83526303329b8239f839b2869acb1128387e5 Mon Sep 17 00:00:00 2001 From: Huang Cheng Date: Mon, 21 May 2018 14:06:49 +0800 Subject: [PATCH] Fix ml2 hierarchical port binding driver check error. Avoid binding loop caused by the wrong comparison between "id" and "segmentation_id" of a "segment" object. Change-Id: Ibc9f3093318d92027eaaf81bd08401c0f02ae414 Closes-Bug: #1760029 --- neutron/plugins/ml2/managers.py | 2 +- neutron/tests/unit/plugins/ml2/test_managers.py | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/neutron/plugins/ml2/managers.py b/neutron/plugins/ml2/managers.py index f75b5bc643a..501552d72d5 100644 --- a/neutron/plugins/ml2/managers.py +++ b/neutron/plugins/ml2/managers.py @@ -853,7 +853,7 @@ class MechanismManager(stevedore.named.NamedExtensionManager): # level to one of the segments we are currently trying to # bind. Note that it is OK for the same driver to bind at # multiple levels using different segments. - segment_ids_to_bind = {s[api.SEGMENTATION_ID] + segment_ids_to_bind = {s[api.ID] for s in segments_to_bind} for level in binding_levels: if (level.driver == driver.name and diff --git a/neutron/tests/unit/plugins/ml2/test_managers.py b/neutron/tests/unit/plugins/ml2/test_managers.py index b1ad2ddde60..38e42981049 100644 --- a/neutron/tests/unit/plugins/ml2/test_managers.py +++ b/neutron/tests/unit/plugins/ml2/test_managers.py @@ -31,13 +31,13 @@ from neutron.tests.unit.plugins.ml2.drivers import mechanism_test class TestManagers(base.BaseTestCase): def setUp(self): super(TestManagers, self).setUp() - self.segment_id = 49 - self.segments_to_bind = [{api.ID: "id1", - 'network_type': 'vlan', - 'physical_network': 'public', - api.SEGMENTATION_ID: self.segment_id}] + self.segment_id = "11111111-2222-3333-4444-555555555555" + self.segments_to_bind = [{api.ID: self.segment_id, + 'network_type': 'vlan', + 'physical_network': 'public', + api.SEGMENTATION_ID: 49}] self.context = FakePortContext(None, - None, + None, self.segments_to_bind) self.context._binding = mock.Mock() self.context._binding_levels = []