]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
delete_port: ensure quota usage is marked as dirty
authorSalvatore Orlando <salv.orlando@gmail.com>
Fri, 18 Sep 2015 21:57:21 +0000 (14:57 -0700)
committerSalvatore Orlando <salv.orlando@gmail.com>
Mon, 21 Sep 2015 12:49:24 +0000 (05:49 -0700)
To this aim the ORM session mapper must be used.
This patch simply uses context.session.delete rather than
query.delete, and handles UnmappedInstanceError to safely
complete the operation when the record is deleted by
another transaction.

Change-Id: I55c701fc1e2fda4461501aae532bbe11cce45b75
Closes-Bug: #1497459

neutron/db/ipam_backend_mixin.py

index 3806cb040b79f4c2243c63ac8675225a9e252f7f..13650b1d2d38c01841ce3171ff1da8049649f41d 100644 (file)
@@ -20,6 +20,7 @@ import netaddr
 from oslo_config import cfg
 from oslo_db import exception as db_exc
 from oslo_log import log as logging
+from sqlalchemy.orm import exc as orm_exc
 
 from neutron.api.v2 import attributes
 from neutron.common import constants
@@ -414,7 +415,14 @@ class IpamBackendMixin(db_base_plugin_common.DbBasePluginCommon):
                  enable_eagerloads(False).filter_by(id=port_id))
         if not context.is_admin:
             query = query.filter_by(tenant_id=context.tenant_id)
-        query.delete(synchronize_session=False)
+        # Use of the ORM mapper is needed for ensuring appropriate resource
+        # tracking; otherwise SQL Alchemy events won't be triggered.
+        # For more info check 'caveats' in doc/source/devref/quota.rst
+        try:
+            context.session.delete(query.first())
+        except orm_exc.UnmappedInstanceError:
+            LOG.debug("Port %s was not found and therefore no delete "
+                      "operation was performed", port_id)
 
     def _save_subnet(self, context,
                      network,