Fix race condition in service delete

Use synchronize_session='fetch' to force refresh session before
delete service record in db.

Change-Id: I237336560cdfedb779fabfa0d469af8f092180ec
Closes-bug: #1538382
This commit is contained in:
Ethan Lynn 2016-02-17 14:27:22 +08:00
parent 57af3e31b6
commit 1ff29a5b12
2 changed files with 3 additions and 8 deletions

View File

@ -93,7 +93,7 @@ class ServiceManageCommand(object):
svc = self._format_service(service)
if svc['status'] == 'down':
print(_('Dead service %s is removed.') % svc['service_id'])
api.service_delete(svc['service_id'])
api.service_delete(self.ctx, svc['service_id'])
@staticmethod
def add_service_parsers(subparsers):

View File

@ -1208,13 +1208,8 @@ def service_update(context, service_id, values=None):
def service_delete(context, service_id):
session = _session(context)
svc = session.query(models.Service).get(service_id)
if not svc:
return None
session.begin()
session.delete(svc)
session.commit()
session.flush()
session.query(models.Service).filter_by(
id=service_id).delete(synchronize_session='fetch')
def service_get(context, service_id):