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 e7f9d28825
commit fe961d14c5
1 changed files with 10 additions and 1 deletions

View File

@ -192,7 +192,16 @@ class LoadBalancerPluginDb(LoadBalancerPluginBase,
def update_status(self, context, model, id, status,
status_description=None):
with context.session.begin(subtransactions=True):
v_db = self._get_resource(context, model, id)
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)
if v_db.status != status:
v_db.status = status
# update status_description in two cases: