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:
parent
28cfb4f15d
commit
05f6e3a428
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user