diff --git a/neutron/api/v2/base.py b/neutron/api/v2/base.py index 5ecfe7d348d..8bafb2bd12c 100644 --- a/neutron/api/v2/base.py +++ b/neutron/api/v2/base.py @@ -486,7 +486,7 @@ class Controller(object): def notify(create_result): # Ensure usage trackers for all resources affected by this API # operation are marked as dirty - with request.context.session.begin(): + with db_api.context_manager.writer.using(request.context): # Commit the reservation(s) for reservation in reservations: quota.QUOTAS.commit_reservation( diff --git a/neutron/db/quota/api.py b/neutron/db/quota/api.py index b35767b44ce..735136df027 100644 --- a/neutron/db/quota/api.py +++ b/neutron/db/quota/api.py @@ -85,7 +85,7 @@ def set_quota_usage(context, resource, tenant_id, :param delta: Specifies whether in_use is an absolute number or a delta (default to False) """ - with db_api.autonested_transaction(context.session): + with db_api.context_manager.writer.using(context): usage_data = quota_obj.QuotaUsage.get_object( context, resource=resource, project_id=tenant_id) if not usage_data: diff --git a/neutron/db/quota/driver.py b/neutron/db/quota/driver.py index a07a9d284f9..751c95565e8 100644 --- a/neutron/db/quota/driver.py +++ b/neutron/db/quota/driver.py @@ -168,7 +168,7 @@ class DbQuotaDriver(object): # locks should be ok to use when support for sending "hotspot" writes # to a single node will be available. requested_resources = deltas.keys() - with db_api.autonested_transaction(context.session): + with db_api.context_manager.writer.using(context): # get_tenant_quotes needs in input a dictionary mapping resource # name to BaseResosurce instances so that the default quota can be # retrieved diff --git a/neutron/pecan_wsgi/hooks/quota_enforcement.py b/neutron/pecan_wsgi/hooks/quota_enforcement.py index 9b0bf944ac7..042561700f9 100644 --- a/neutron/pecan_wsgi/hooks/quota_enforcement.py +++ b/neutron/pecan_wsgi/hooks/quota_enforcement.py @@ -19,6 +19,7 @@ from oslo_log import log as logging from pecan import hooks from neutron.common import exceptions +from neutron.db import api as db_api from neutron import manager from neutron import quota from neutron.quota import resource_registry @@ -66,7 +67,7 @@ class QuotaEnforcementHook(hooks.PecanHook): if not reservations: return neutron_context = state.request.context.get('neutron_context') - with neutron_context.session.begin(): + with db_api.context_manager.writer.using(neutron_context): # Commit the reservation(s) for reservation in reservations: quota.QUOTAS.commit_reservation( diff --git a/neutron/quota/resource.py b/neutron/quota/resource.py index ab97bb3e8ef..b57bee538bd 100644 --- a/neutron/quota/resource.py +++ b/neutron/quota/resource.py @@ -177,7 +177,7 @@ class TrackedResource(BaseResource): def mark_dirty(self, context): if not self._dirty_tenants: return - with db_api.autonested_transaction(context.session): + with db_api.context_manager.writer.using(context): # It is not necessary to protect this operation with a lock. # Indeed when this method is called the request has been processed # and therefore all resources created or deleted. diff --git a/neutron/quota/resource_registry.py b/neutron/quota/resource_registry.py index f8adb6a9477..145ba8daf07 100644 --- a/neutron/quota/resource_registry.py +++ b/neutron/quota/resource_registry.py @@ -15,6 +15,7 @@ from oslo_log import log import six from neutron._i18n import _, _LI, _LW +from neutron.db import api as db_api from neutron.quota import resource LOG = log.getLogger(__name__) @@ -71,7 +72,7 @@ def set_resources_dirty(context): return for res in get_all_resources().values(): - with context.session.begin(subtransactions=True): + with db_api.context_manager.writer.using(context): if is_tracked(res.name) and res.dirty: res.mark_dirty(context) diff --git a/neutron/tests/unit/db/test_provisioning_blocks.py b/neutron/tests/unit/db/test_provisioning_blocks.py index b1202431240..729b72afc25 100644 --- a/neutron/tests/unit/db/test_provisioning_blocks.py +++ b/neutron/tests/unit/db/test_provisioning_blocks.py @@ -18,6 +18,7 @@ import testtools from neutron.callbacks import registry from neutron.callbacks import resources +from neutron.db import api as db_api from neutron.db import models_v2 from neutron.db import provisioning_blocks as pb from neutron.tests.unit import testlib_api @@ -37,7 +38,7 @@ class TestStatusBarriers(testlib_api.SqlTestCase): pb.PROVISIONING_COMPLETE) def _make_net(self): - with self.ctx.session.begin(): + with db_api.context_manager.writer.using(self.ctx): net = models_v2.Network(name='net_net', status='ACTIVE', tenant_id='1', admin_state_up=True) self.ctx.session.add(net) @@ -45,7 +46,7 @@ class TestStatusBarriers(testlib_api.SqlTestCase): def _make_port(self): net = self._make_net() - with self.ctx.session.begin(): + with db_api.context_manager.writer.using(self.ctx): port = models_v2.Port(network_id=net.id, mac_address='1', tenant_id='1', admin_state_up=True, status='DOWN', device_id='2',