[Stable Only] Remove soft-deleted instances from quota_usages
The resources in quota_usages table will minus 1 while soft deleting an instance. But the soft-deleted instances are counted when synchronizing quota_usages using command "nova-manage project quota_usage_refresh". So we filter out soft-deleted instances when synchronizing quota_usage. We didn't need to do this on master as the quota_usage_refresh command has been removed in 17.0.0 (Queens). And the _instance_data_get_for_user function is already removed in commitc881e77819
. https://review.openstack.org/#/c/570865/ Change-Id: I8dcbe1e5f3f70ddd7067fed1125ef3379044ab0f Closes-bug: #1773542 (cherry picked from commit58538ace35
) (cherry picked from commitab03100bcb
)
This commit is contained in:
parent
fe0c1033d9
commit
b465901793
|
@ -1824,11 +1824,15 @@ def instance_create(context, values):
|
||||||
|
|
||||||
|
|
||||||
def _instance_data_get_for_user(context, project_id, user_id):
|
def _instance_data_get_for_user(context, project_id, user_id):
|
||||||
|
not_soft_deleted = or_(
|
||||||
|
models.Instance.vm_state != vm_states.SOFT_DELETED,
|
||||||
|
models.Instance.vm_state == null()
|
||||||
|
)
|
||||||
result = model_query(context, models.Instance, (
|
result = model_query(context, models.Instance, (
|
||||||
func.count(models.Instance.id),
|
func.count(models.Instance.id),
|
||||||
func.sum(models.Instance.vcpus),
|
func.sum(models.Instance.vcpus),
|
||||||
func.sum(models.Instance.memory_mb))).\
|
func.sum(models.Instance.memory_mb))).\
|
||||||
filter_by(project_id=project_id)
|
filter_by(project_id=project_id).filter(not_soft_deleted)
|
||||||
if user_id:
|
if user_id:
|
||||||
result = result.filter_by(user_id=user_id).first()
|
result = result.filter_by(user_id=user_id).first()
|
||||||
else:
|
else:
|
||||||
|
|
|
@ -1346,6 +1346,24 @@ class SqlAlchemyDbApiTestCase(DbTestCase):
|
||||||
filters={},
|
filters={},
|
||||||
sort_keys=keys)
|
sort_keys=keys)
|
||||||
|
|
||||||
|
def test_instance_data_get_for_user(self):
|
||||||
|
ctxt = context.get_admin_context()
|
||||||
|
instance_1 = self.create_instance_with_args(project_id='project-HHD')
|
||||||
|
self.create_instance_with_args(project_id='project-HHD')
|
||||||
|
|
||||||
|
@sqlalchemy_api.pick_context_manager_reader
|
||||||
|
def test(context):
|
||||||
|
return sqlalchemy_api._instance_data_get_for_user(
|
||||||
|
context, 'project-HHD', None)
|
||||||
|
|
||||||
|
inst_num, _, _ = test(ctxt)
|
||||||
|
self.assertEqual(2, inst_num)
|
||||||
|
|
||||||
|
db.instance_update(ctxt, instance_1['uuid'],
|
||||||
|
{"vm_state": vm_states.SOFT_DELETED})
|
||||||
|
inst_num_2, _, _ = test(ctxt)
|
||||||
|
self.assertEqual(1, inst_num_2)
|
||||||
|
|
||||||
|
|
||||||
class ProcessSortParamTestCase(test.TestCase):
|
class ProcessSortParamTestCase(test.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue