]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Make sure all db accesses use subtransaction
authorAkihiro MOTOKI <motoki@da.jp.nec.com>
Tue, 26 Feb 2013 07:43:03 +0000 (16:43 +0900)
committerAkihiro MOTOKI <motoki@da.jp.nec.com>
Tue, 26 Feb 2013 11:57:20 +0000 (20:57 +0900)
Fixes bug 1133253

Change-Id: If952eaa919cdc7536023525a397e7a8ce4b425aa

quantum/plugins/nec/db/api.py
quantum/plugins/nec/db/nec_plugin_base.py
quantum/plugins/nec/nec_plugin.py

index 8b1859f46dd28a185f5636a9451802b3650de93b..298ecd267fcaaa6c0cc1ae58662e764f8c8145c3 100644 (file)
@@ -108,8 +108,9 @@ def add_ofc_item(session, resource, quantum_id, ofc_id, old_style=False):
         else:
             params = dict(quantum_id=quantum_id, ofc_id=ofc_id)
         item = model(**params)
-        session.add(item)
-        session.flush()
+        with session.begin(subtransactions=True):
+            session.add(item)
+            session.flush()
     except Exception as exc:
         LOG.exception(exc)
         raise nexc.NECDBException
@@ -120,9 +121,9 @@ def del_ofc_item(session, resource, quantum_id, old_style=False,
                  warning=True):
     try:
         model = _get_resource_model(resource, old_style)
-        item = session.query(model).filter_by(quantum_id=quantum_id).one()
-        session.delete(item)
-        session.flush()
+        with session.begin(subtransactions=True):
+            item = session.query(model).filter_by(quantum_id=quantum_id).one()
+            session.delete(item)
         return True
     except sa.orm.exc.NoResultFound:
         if warning:
@@ -184,8 +185,8 @@ def add_portinfo(session, id, datapath_id='', port_no=0,
     try:
         portinfo = nmodels.PortInfo(id=id, datapath_id=datapath_id,
                                     port_no=port_no, vlan_id=vlan_id, mac=mac)
-        session.add(portinfo)
-        session.flush()
+        with session.begin(subtransactions=True):
+            session.add(portinfo)
     except Exception as exc:
         LOG.exception(exc)
         raise nexc.NECDBException
@@ -194,9 +195,9 @@ def add_portinfo(session, id, datapath_id='', port_no=0,
 
 def del_portinfo(session, id):
     try:
-        portinfo = session.query(nmodels.PortInfo).filter_by(id=id).one()
-        session.delete(portinfo)
-        session.flush()
+        with session.begin(subtransactions=True):
+            portinfo = session.query(nmodels.PortInfo).filter_by(id=id).one()
+            session.delete(portinfo)
     except sa.orm.exc.NoResultFound:
         LOG.warning(_("del_portinfo(): NotFound portinfo for "
                       "port_id: %s"), id)
index cba8050be00fbf85135fad45f465cefd176449bf..820d2758d1f24e63300151b896579e95d2a78aae 100644 (file)
@@ -104,19 +104,19 @@ class NECPluginV2Base(db_base_plugin_v2.QuantumDbPluginV2):
             else:
                 params.update({key: pf.get(key)})
 
-        with context.session.begin():
+        with context.session.begin(subtransactions=True):
             pf_entry = nmodels.PacketFilter(**params)
             context.session.add(pf_entry)
         return self._make_packet_filter_dict(pf_entry)
 
     def update_packet_filter(self, context, id, packet_filter):
         pf = packet_filter['packet_filter']
-        with context.session.begin():
+        with context.session.begin(subtransactions=True):
             pf_entry = self._get_packet_filter(context, id)
             pf_entry.update(pf)
         return self._make_packet_filter_dict(pf_entry)
 
     def delete_packet_filter(self, context, id):
-        with context.session.begin():
+        with context.session.begin(subtransactions=True):
             packet_filter = self._get_packet_filter(context, id)
             context.session.delete(packet_filter)
index 1c0422b167134dda1ed529f5bf52b0ccb232573c..27fdd16c8ba8bbd1e6cfe2cad9d98db5132718a5 100644 (file)
@@ -557,9 +557,10 @@ class NECPluginV2(nec_plugin_base.NECPluginV2Base,
         LOG.debug(_("NECPluginV2.update_packet_filter() called, "
                     "id=%(id)s packet_filter=%(packet_filter)s ."),
                   {'id': id, 'packet_filter': packet_filter})
-        old_pf = super(NECPluginV2, self).get_packet_filter(context, id)
-        new_pf = super(NECPluginV2, self).update_packet_filter(context, id,
-                                                               packet_filter)
+        with context.session.begin(subtransactions=True):
+            old_pf = super(NECPluginV2, self).get_packet_filter(context, id)
+            new_pf = super(NECPluginV2, self).update_packet_filter(
+                context, id, packet_filter)
 
         changed = False
         exclude_items = ["id", "name", "tenant_id", "network_id", "status"]