Make sure all db accesses use subtransaction

Fixes bug 1133253

Change-Id: If952eaa919cdc7536023525a397e7a8ce4b425aa
This commit is contained in:
Akihiro MOTOKI 2013-02-26 16:43:03 +09:00
parent 511ac76cf2
commit 9f6adb4b26
3 changed files with 18 additions and 16 deletions

View 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)

View 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)

View 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"]