Get rid of additional db contention on fetching VIP

This fix gets rid of fetching related record from ports table
that could potentially be blocked by concurrent operation
This is to prevent it from updating the
vip table while a port SQL lock is in place, which
vip entries have a reference to.

Partial-Bug: 1283522
Change-Id: Ic64cc268ff4817a31971734a44671c744047231b
This commit is contained in:
Kevin Benton 2014-03-20 00:24:50 -07:00 committed by Eugene Nikanorov
parent 28cfb4f15d
commit 05f6e3a428

View File

@ -192,6 +192,15 @@ class LoadBalancerPluginDb(LoadBalancerPluginBase,
def update_status(self, context, model, id, status, def update_status(self, context, model, id, status,
status_description=None): status_description=None):
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
if issubclass(model, Vip):
try:
v_db = (self._model_query(context, model).
filter(model.id == id).
options(orm.noload('port')).
one())
except exc.NoResultFound:
raise loadbalancer.VipNotFound(vip_id=id)
else:
v_db = self._get_resource(context, model, id) v_db = self._get_resource(context, model, id)
if v_db.status != status: if v_db.status != status:
v_db.status = status v_db.status = status