From 323c29fd054913493325ad0e987007181fb48976 Mon Sep 17 00:00:00 2001 From: Miguel Lavalle Date: Sat, 17 Jun 2017 19:49:32 -0500 Subject: [PATCH] Store segmentation_id during segment create The segmentation_id of a new segment is assigned by the _handle_segment_change callback in the ML2 plugin, which is executed after the segment was created, before commiting it to the DB. This patchset adds code to update the newly created segment with the segmentation_id assigned by the callback. Change-Id: I493278a0bf5a3a0aadad10e5bee546d83b949fdc Closes-Bug: #1698596 --- neutron/services/segments/db.py | 3 ++ neutron/tests/unit/extensions/test_segment.py | 28 ++++++++++++++++--- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/neutron/services/segments/db.py b/neutron/services/segments/db.py index 9b312322ede..b71fda7c81f 100644 --- a/neutron/services/segments/db.py +++ b/neutron/services/segments/db.py @@ -114,6 +114,9 @@ class SegmentDbMixin(common_db_mixin.CommonDbMixin): registry.notify( resources.SEGMENT, events.PRECOMMIT_CREATE, self, context=context, segment=new_segment) + # The new segment might have been updated by the callbacks + # subscribed to the PRECOMMIT_CREATE event. So update it in the DB + new_segment.update() return new_segment @log_helpers.log_method_call diff --git a/neutron/tests/unit/extensions/test_segment.py b/neutron/tests/unit/extensions/test_segment.py index 900fba4fa24..12ec1b10ed2 100644 --- a/neutron/tests/unit/extensions/test_segment.py +++ b/neutron/tests/unit/extensions/test_segment.py @@ -1424,13 +1424,33 @@ class TestSegmentAwareIpam(SegmentAwareIpamTestCase): class TestSegmentAwareIpamML2(TestSegmentAwareIpam): + + VLAN_MIN = 200 + VLAN_MAX = 209 + def setUp(self): - config.cfg.CONF.set_override('network_vlan_ranges', - ['physnet:200:209', 'physnet0:200:209', - 'physnet1:200:209', 'physnet2:200:209'], - group='ml2_type_vlan') + # NOTE(mlavalle): ml2_type_vlan requires to be registered before used. + # This piece was refactored and removed from .config, so it causes + # a problem, when tests are executed with pdb. + # There is no problem when tests are running without debugger. + driver_type.register_ml2_drivers_vlan_opts() + config.cfg.CONF.set_override( + 'network_vlan_ranges', + ['physnet:%s:%s' % (self.VLAN_MIN, self.VLAN_MAX), + 'physnet0:%s:%s' % (self.VLAN_MIN, self.VLAN_MAX), + 'physnet1:%s:%s' % (self.VLAN_MIN, self.VLAN_MAX), + 'physnet2:%s:%s' % (self.VLAN_MIN, self.VLAN_MAX)], + group='ml2_type_vlan') super(TestSegmentAwareIpamML2, self).setUp(plugin='ml2') + def test_segmentation_id_stored_in_db(self): + network, segment, subnet = self._create_test_segment_with_subnet() + self.assertTrue(self.VLAN_MIN <= + segment['segment']['segmentation_id'] <= self.VLAN_MAX) + retrieved_segment = self._show('segments', segment['segment']['id']) + self.assertEqual(segment['segment']['segmentation_id'], + retrieved_segment['segment']['segmentation_id']) + class TestNovaSegmentNotifier(SegmentAwareIpamTestCase): _mechanism_drivers = ['openvswitch', 'logger']