From 12b0e166926823ba8c5d024fa3df457aa2af5b6d Mon Sep 17 00:00:00 2001 From: Ann Kamyshnikova Date: Fri, 2 Dec 2016 13:59:08 +0300 Subject: [PATCH] Change passing session to context in segments db functions We have a number of functions that expect to get session as one of the arguments. Passing session is not correct and this prevents using new enginefacade which expects context to be passed and session will be injected in current context. NeutronLibImpact Partially-Implements blueprint: enginefacade-switch Change-Id: Ie1c54138ceaf9ac6f0674ad2786d4aaea9c80f73 --- neutron/db/segments_db.py | 28 +++++++++---------- neutron/plugins/ml2/driver_context.py | 4 +-- .../plugins/ml2/extensions/dns_integration.py | 3 +- neutron/plugins/ml2/managers.py | 14 ++++------ neutron/plugins/ml2/plugin.py | 3 +- neutron/tests/unit/db/test_segments_db.py | 6 ++-- neutron/tests/unit/extensions/test_segment.py | 5 ++-- neutron/tests/unit/plugins/ml2/test_db.py | 14 +++++----- neutron/tests/unit/plugins/ml2/test_plugin.py | 27 +++++++++--------- 9 files changed, 49 insertions(+), 55 deletions(-) diff --git a/neutron/db/segments_db.py b/neutron/db/segments_db.py index 9a540ddda20..d7f4707c64e 100644 --- a/neutron/db/segments_db.py +++ b/neutron/db/segments_db.py @@ -64,17 +64,17 @@ def add_network_segment(context, network_id, segment, segment_index=0, 'network_id': record.network_id}) -def get_network_segments(session, network_id, filter_dynamic=False): +def get_network_segments(context, network_id, filter_dynamic=False): return get_networks_segments( - session, [network_id], filter_dynamic)[network_id] + context, [network_id], filter_dynamic)[network_id] -def get_networks_segments(session, network_ids, filter_dynamic=False): +def get_networks_segments(context, network_ids, filter_dynamic=False): if not network_ids: return {} - with session.begin(subtransactions=True): - query = (session.query(segments_model.NetworkSegment). + with context.session.begin(subtransactions=True): + query = (context.session.query(segments_model.NetworkSegment). filter(segments_model.NetworkSegment.network_id .in_(network_ids)). order_by(segments_model.NetworkSegment.segment_index)) @@ -87,10 +87,10 @@ def get_networks_segments(session, network_ids, filter_dynamic=False): return result -def get_segment_by_id(session, segment_id): - with session.begin(subtransactions=True): +def get_segment_by_id(context, segment_id): + with context.session.begin(subtransactions=True): try: - record = (session.query(segments_model.NetworkSegment). + record = (context.session.query(segments_model.NetworkSegment). filter_by(id=segment_id). one()) return _make_segment_dict(record) @@ -98,11 +98,11 @@ def get_segment_by_id(session, segment_id): return -def get_dynamic_segment(session, network_id, physical_network=None, +def get_dynamic_segment(context, network_id, physical_network=None, segmentation_id=None): """Return a dynamic segment for the filters provided if one exists.""" - with session.begin(subtransactions=True): - query = (session.query(segments_model.NetworkSegment). + with context.session.begin(subtransactions=True): + query = (context.session.query(segments_model.NetworkSegment). filter_by(network_id=network_id, is_dynamic=True)) if physical_network: query = query.filter_by(physical_network=physical_network) @@ -123,10 +123,10 @@ def get_dynamic_segment(session, network_id, physical_network=None, return None -def delete_network_segment(session, segment_id): +def delete_network_segment(context, segment_id): """Release a dynamic segment for the params provided if one exists.""" - with session.begin(subtransactions=True): - (session.query(segments_model.NetworkSegment). + with context.session.begin(subtransactions=True): + (context.session.query(segments_model.NetworkSegment). filter_by(id=segment_id).delete()) diff --git a/neutron/plugins/ml2/driver_context.py b/neutron/plugins/ml2/driver_context.py index 42ba876e462..aa16a075dc8 100644 --- a/neutron/plugins/ml2/driver_context.py +++ b/neutron/plugins/ml2/driver_context.py @@ -43,7 +43,7 @@ class NetworkContext(MechanismDriverContext, api.NetworkContext): self._network = network self._original_network = original_network self._segments = segments_db.get_network_segments( - plugin_context.session, network['id']) + plugin_context, network['id']) @property def current(self): @@ -192,7 +192,7 @@ class PortContext(MechanismDriverContext, api.PortContext): self._original_binding_levels[-1].segment_id) def _expand_segment(self, segment_id): - segment = segments_db.get_segment_by_id(self._plugin_context.session, + segment = segments_db.get_segment_by_id(self._plugin_context, segment_id) if not segment: LOG.warning(_LW("Could not expand segment %s"), segment_id) diff --git a/neutron/plugins/ml2/extensions/dns_integration.py b/neutron/plugins/ml2/extensions/dns_integration.py index 71e29d4b465..4fba50a5011 100644 --- a/neutron/plugins/ml2/extensions/dns_integration.py +++ b/neutron/plugins/ml2/extensions/dns_integration.py @@ -306,8 +306,7 @@ class DNSExtensionDriverML2(DNSExtensionDriver): return True if network['router:external']: return True - segments = segments_db.get_network_segments(context.session, - network['id']) + segments = segments_db.get_network_segments(context, network['id']) if len(segments) > 1: return False provider_net = segments[0] diff --git a/neutron/plugins/ml2/managers.py b/neutron/plugins/ml2/managers.py index 6ae90c57eff..487ae3e36be 100644 --- a/neutron/plugins/ml2/managers.py +++ b/neutron/plugins/ml2/managers.py @@ -156,7 +156,7 @@ class TypeManager(stevedore.named.NamedExtensionManager): def extend_networks_dict_provider(self, context, networks): ids = [network['id'] for network in networks] - net_segments = segments_db.get_networks_segments(context.session, ids) + net_segments = segments_db.get_networks_segments(context, ids) for network in networks: segments = net_segments[network['id']] self._extend_network_dict_provider(network, segments) @@ -278,8 +278,7 @@ class TypeManager(stevedore.named.NamedExtensionManager): raise exc.NoNetworkAvailable() def release_network_segments(self, context, network_id): - segments = segments_db.get_network_segments(context.session, - network_id, + segments = segments_db.get_network_segments(context, network_id, filter_dynamic=None) for segment in segments: @@ -300,7 +299,7 @@ class TypeManager(stevedore.named.NamedExtensionManager): def allocate_dynamic_segment(self, context, network_id, segment): """Allocate a dynamic segment using a partial or full segment dict.""" dynamic_segment = segments_db.get_dynamic_segment( - context.session, network_id, segment.get(api.PHYSICAL_NETWORK), + context, network_id, segment.get(api.PHYSICAL_NETWORK), segment.get(api.SEGMENTATION_ID)) if dynamic_segment: @@ -313,14 +312,13 @@ class TypeManager(stevedore.named.NamedExtensionManager): else: dynamic_segment = driver.obj.reserve_provider_segment( context, segment) - segments_db.add_network_segment(context, - network_id, dynamic_segment, + segments_db.add_network_segment(context, network_id, dynamic_segment, is_dynamic=True) return dynamic_segment def release_dynamic_segment(self, context, segment_id): """Delete a dynamic segment.""" - segment = segments_db.get_segment_by_id(context.session, segment_id) + segment = segments_db.get_segment_by_id(context, segment_id) if segment: driver = self.drivers.get(segment.get(api.NETWORK_TYPE)) if driver: @@ -328,7 +326,7 @@ class TypeManager(stevedore.named.NamedExtensionManager): driver.obj.release_segment(context.session, segment) else: driver.obj.release_segment(context, segment) - segments_db.delete_network_segment(context.session, segment_id) + segments_db.delete_network_segment(context, segment_id) else: LOG.error(_LE("Failed to release segment '%s' because " "network type is not supported."), segment) diff --git a/neutron/plugins/ml2/plugin.py b/neutron/plugins/ml2/plugin.py index fd06bc76ea5..5bf0de5278f 100644 --- a/neutron/plugins/ml2/plugin.py +++ b/neutron/plugins/ml2/plugin.py @@ -1845,8 +1845,7 @@ class Ml2Plugin(db_base_plugin_v2.NeutronDbPluginV2, def filter_hosts_with_network_access( self, context, network_id, candidate_hosts): - segments = segments_db.get_network_segments(context.session, - network_id) + segments = segments_db.get_network_segments(context, network_id) return self.mechanism_manager.filter_hosts_with_segment_access( context, segments, candidate_hosts, self.get_agents) diff --git a/neutron/tests/unit/db/test_segments_db.py b/neutron/tests/unit/db/test_segments_db.py index 62c777ef68c..c9b397fd5c2 100644 --- a/neutron/tests/unit/db/test_segments_db.py +++ b/neutron/tests/unit/db/test_segments_db.py @@ -23,7 +23,7 @@ from neutron.tests import base class TestSegmentsDb(base.BaseTestCase): def test_get_networks_segments_with_empty_networks(self): - session = mock.MagicMock() - net_segs = segments_db.get_networks_segments(session, []) - self.assertFalse(session.query.called) + context = mock.MagicMock() + net_segs = segments_db.get_networks_segments(context, []) + self.assertFalse(context.session.query.called) self.assertEqual({}, net_segs) diff --git a/neutron/tests/unit/extensions/test_segment.py b/neutron/tests/unit/extensions/test_segment.py index 791bad25893..f4d34fc5517 100644 --- a/neutron/tests/unit/extensions/test_segment.py +++ b/neutron/tests/unit/extensions/test_segment.py @@ -276,8 +276,7 @@ class TestSegment(SegmentTestCase): network_id=network['id'], segmentation_id=200) - network_segments = segments_db.get_network_segments(cxt.session, - network['id']) + network_segments = segments_db.get_network_segments(cxt, network['id']) self.assertEqual([], network_segments) def test_create_segments_in_certain_order(self): @@ -290,7 +289,7 @@ class TestSegment(SegmentTestCase): network_id=network['id'], segmentation_id=201) segment3 = self.segment( network_id=network['id'], segmentation_id=202) - network_segments = segments_db.get_network_segments(cxt.session, + network_segments = segments_db.get_network_segments(cxt, network['id']) self.assertEqual(segment1['segment']['id'], network_segments[0]['id']) diff --git a/neutron/tests/unit/plugins/ml2/test_db.py b/neutron/tests/unit/plugins/ml2/test_db.py index 51624b11258..a3e7d4f3823 100644 --- a/neutron/tests/unit/plugins/ml2/test_db.py +++ b/neutron/tests/unit/plugins/ml2/test_db.py @@ -74,7 +74,7 @@ class Ml2DBTestCase(testlib_api.SqlTestCase): is_dynamic=is_seg_dynamic) net_segments = segments_db.get_network_segments( - self.ctx.session, network_id, + self.ctx, network_id, filter_dynamic=is_seg_dynamic) net_segments = self._sort_segments(net_segments) @@ -120,7 +120,7 @@ class Ml2DBTestCase(testlib_api.SqlTestCase): net1segs = self._create_segments(segments1, network_id='net1') net2segs = self._create_segments(segments2, network_id='net2') segs = segments_db.get_networks_segments( - self.ctx.session, ['net1', 'net2']) + self.ctx, ['net1', 'net2']) self.assertEqual(net1segs, self._sort_segments(segs['net1'])) self.assertEqual(net2segs, self._sort_segments(segs['net2'])) @@ -128,7 +128,7 @@ class Ml2DBTestCase(testlib_api.SqlTestCase): self._create_segments([], network_id='net1') self._create_segments([], network_id='net2') segs = segments_db.get_networks_segments( - self.ctx.session, ['net1', 'net2']) + self.ctx, ['net1', 'net2']) self.assertEqual([], segs['net1']) self.assertEqual([], segs['net2']) @@ -140,13 +140,13 @@ class Ml2DBTestCase(testlib_api.SqlTestCase): net_segment = self._create_segments([segment])[0] segment_uuid = net_segment[api.ID] - net_segment = segments_db.get_segment_by_id(self.ctx.session, + net_segment = segments_db.get_segment_by_id(self.ctx, segment_uuid) self.assertEqual(segment, net_segment) def test_get_segment_by_id_result_not_found(self): segment_uuid = uuidutils.generate_uuid() - net_segment = segments_db.get_segment_by_id(self.ctx.session, + net_segment = segments_db.get_segment_by_id(self.ctx, segment_uuid) self.assertIsNone(net_segment) @@ -158,9 +158,9 @@ class Ml2DBTestCase(testlib_api.SqlTestCase): net_segment = self._create_segments([segment])[0] segment_uuid = net_segment[api.ID] - segments_db.delete_network_segment(self.ctx.session, segment_uuid) + segments_db.delete_network_segment(self.ctx, segment_uuid) # Get segment and verify its empty - net_segment = segments_db.get_segment_by_id(self.ctx.session, + net_segment = segments_db.get_segment_by_id(self.ctx, segment_uuid) self.assertIsNone(net_segment) diff --git a/neutron/tests/unit/plugins/ml2/test_plugin.py b/neutron/tests/unit/plugins/ml2/test_plugin.py index 3b82280567c..e8db6ebaa20 100644 --- a/neutron/tests/unit/plugins/ml2/test_plugin.py +++ b/neutron/tests/unit/plugins/ml2/test_plugin.py @@ -1775,7 +1775,7 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.allocate_dynamic_segment( self.context, network_id, segment) dynamic_segment = segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet1') + self.context, network_id, 'physnet1') self.assertEqual('vlan', dynamic_segment[driver_api.NETWORK_TYPE]) self.assertEqual('physnet1', dynamic_segment[driver_api.PHYSICAL_NETWORK]) @@ -1786,7 +1786,7 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.allocate_dynamic_segment( self.context, network_id, segment2) dynamic_segment = segments_db.get_dynamic_segment( - self.context.session, network_id, segmentation_id='1234') + self.context, network_id, segmentation_id='1234') self.assertEqual('vlan', dynamic_segment[driver_api.NETWORK_TYPE]) self.assertEqual('physnet3', dynamic_segment[driver_api.PHYSICAL_NETWORK]) @@ -1804,14 +1804,14 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.allocate_dynamic_segment( self.context, network_id, segment) dynamic_segment = segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet1') + self.context, network_id, 'physnet1') self.assertEqual('vlan', dynamic_segment[driver_api.NETWORK_TYPE]) self.assertEqual('physnet1', dynamic_segment[driver_api.PHYSICAL_NETWORK]) dynamic_segmentation_id = dynamic_segment[driver_api.SEGMENTATION_ID] self.assertGreater(dynamic_segmentation_id, 0) dynamic_segment1 = segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet1') + self.context, network_id, 'physnet1') dynamic_segment1_id = dynamic_segment1[driver_api.SEGMENTATION_ID] self.assertEqual(dynamic_segmentation_id, dynamic_segment1_id) segment2 = {driver_api.NETWORK_TYPE: 'vlan', @@ -1819,7 +1819,7 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.allocate_dynamic_segment( self.context, network_id, segment2) dynamic_segment2 = segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet2') + self.context, network_id, 'physnet2') dynamic_segmentation2_id = dynamic_segment2[driver_api.SEGMENTATION_ID] self.assertNotEqual(dynamic_segmentation_id, dynamic_segmentation2_id) @@ -1835,7 +1835,7 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.allocate_dynamic_segment( self.context, network_id, segment) dynamic_segment = segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet1') + self.context, network_id, 'physnet1') self.assertEqual('vlan', dynamic_segment[driver_api.NETWORK_TYPE]) self.assertEqual('physnet1', dynamic_segment[driver_api.PHYSICAL_NETWORK]) @@ -1844,7 +1844,7 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.release_dynamic_segment( self.context, dynamic_segment[driver_api.ID]) self.assertIsNone(segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet1')) + self.context, network_id, 'physnet1')) def test_create_network_provider(self): data = {'network': {'name': 'net1', @@ -1972,7 +1972,7 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): self.driver.type_manager.allocate_dynamic_segment( self.context, network_id, segment) dynamic_segment = segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet2') + self.context, network_id, 'physnet2') self.assertEqual('vlan', dynamic_segment[driver_api.NETWORK_TYPE]) self.assertEqual('physnet2', dynamic_segment[driver_api.PHYSICAL_NETWORK]) @@ -1985,9 +1985,9 @@ class TestMultiSegmentNetworks(Ml2PluginV2TestCase): res = req.get_response(self.api) self.assertEqual(2, rs.call_count) self.assertEqual([], segments_db.get_network_segments( - self.context.session, network_id)) + self.context, network_id)) self.assertIsNone(segments_db.get_dynamic_segment( - self.context.session, network_id, 'physnet2')) + self.context, network_id, 'physnet2')) def test_release_segment_no_type_driver(self): data = {'network': {'name': 'net1', @@ -2681,10 +2681,9 @@ class TestML2Segments(Ml2PluginV2TestCase): with self.network() as network: network = network['network'] - for stale_seg in segments_db.get_network_segments(self.context.session, + for stale_seg in segments_db.get_network_segments(self.context, network['id']): - segments_db.delete_network_segment(self.context.session, - stale_seg['id']) + segments_db.delete_network_segment(self.context, stale_seg['id']) for seg in [seg1, seg2, seg3]: seg['network_id'] = network['id'] @@ -2735,7 +2734,7 @@ class TestML2Segments(Ml2PluginV2TestCase): binding, None) plugin._bind_port_if_needed(mech_context) segment = segments_db.get_network_segments( - self.context.session, port['port']['network_id'])[0] + self.context, port['port']['network_id'])[0] segment['network_id'] = port['port']['network_id'] self.assertRaises(c_exc.CallbackFailure, registry.notify, resources.SEGMENT, events.BEFORE_DELETE,