]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Make query to quota usage table order preserved
authorwangxiyuan <wangxiyuan@huawei.com>
Thu, 3 Mar 2016 03:37:25 +0000 (11:37 +0800)
committerwangxiyuan <wangxiyuan@huawei.com>
Thu, 3 Mar 2016 03:41:02 +0000 (11:41 +0800)
Currently, the query to quota usage table is not order
preserved. This might cause deadlock in large-scale
deployment: different calls may lock rows in different
order, and deadlock will happen.

This patch adds order_by to the query and make the query
to the table order preserved.

Change-Id: I7c439235f8927d5eb52274a59d0a87ad76879de1
Closes-bug: #1552510

cinder/db/sqlalchemy/api.py

index 1d78151892d7784d11ea30351303e87f6e216c34..14f94dd445a85b7965338ae1a8fa200e18997aef 100644 (file)
@@ -826,6 +826,7 @@ def _get_quota_usages(context, session, project_id):
                        read_deleted="no",
                        session=session).\
         filter_by(project_id=project_id).\
+        order_by(models.QuotaUsage.id.asc()).\
         with_lockmode('update').\
         all()
     return {row.resource: row for row in rows}
@@ -836,6 +837,7 @@ def _get_quota_usages_by_resource(context, session, resource):
                        deleted="no",
                        session=session).\
         filter_by(resource=resource).\
+        order_by(models.QuotaUsage.id.asc()).\
         with_lockmode('update').\
         all()
     return rows