Refactor volumes summary

Current volumes summary code has unnecessary code duplication as well as
a variable name that doesn't follow the project guidelines.

The variable in question is `allTenants` that should have been named
`all_tenants`.

This patch removes the code duplication by merging the two DB and OVO
methods into one.

TrivialFix

Change-Id: Ia80568147462450a707bc316100e5289c4b02eed
This commit is contained in:
Gorka Eguileor 2017-01-26 12:51:17 +01:00
parent a53068f23c
commit a903b93124
4 changed files with 17 additions and 46 deletions

View File

@ -294,14 +294,9 @@ def volume_get_all_by_project(context, project_id, marker, limit,
offset=offset)
def get_volume_summary_all(context):
"""Get all volume summary."""
return IMPL.get_volume_summary_all(context)
def get_volume_summary_by_project(context, project_id):
"""Get all volume summary belonging to a project."""
return IMPL.get_volume_summary_by_project(context, project_id)
def get_volume_summary(context, project_only):
"""Get volume summary."""
return IMPL.get_volume_summary(context, project_only)
def volume_update(context, volume_id, values):

View File

@ -2029,15 +2029,19 @@ def volume_get_all(context, marker=None, limit=None, sort_keys=None,
return query.all()
@require_admin_context
def get_volume_summary_all(context):
@require_context
def get_volume_summary(context, project_only):
"""Retrieves all volumes summary.
:param context: context to query under
:returns: volume summary of all projects
:param project_only: limit summary to project volumes
:returns: volume summary
"""
if not (project_only or is_admin_context(context)):
raise exception.AdminRequired()
query = model_query(context, func.count(models.Volume.id),
func.sum(models.Volume.size), read_deleted="no")
func.sum(models.Volume.size), read_deleted="no",
project_only=project_only)
if query is None:
return []
@ -2378,25 +2382,6 @@ def process_sort_params(sort_keys, sort_dirs, default_keys=None,
return result_keys, result_dirs
@require_context
def get_volume_summary_by_project(context, project_id):
"""Retrieves all volumes summary in a project.
:param context: context to query under
:param project_id: project for all volumes being retrieved
:returns: volume summary of a project
"""
query = model_query(context, func.count(models.Volume.id),
func.sum(models.Volume.size), read_deleted="no").\
filter_by(project_id=project_id)
if query is None:
return []
result = query.first()
return (result[0] or 0, result[1] or 0)
@handle_db_data_error
@require_context
def volume_update(context, volume_id, values):

View File

@ -625,13 +625,8 @@ class VolumeList(base.ObjectListBase, base.CinderObject):
volumes, expected_attrs=expected_attrs)
@classmethod
def get_volume_summary_all(cls, context):
volumes = db.get_volume_summary_all(context)
return volumes
@classmethod
def get_volume_summary_by_project(cls, context, project_id):
volumes = db.get_volume_summary_by_project(context, project_id)
def get_volume_summary(cls, context, project_only):
volumes = db.get_volume_summary(context, project_only)
return volumes
@classmethod

View File

@ -574,14 +574,10 @@ class API(base.Base):
if filters is None:
filters = {}
allTenants = utils.get_bool_param('all_tenants', filters)
if context.is_admin and allTenants:
del filters['all_tenants']
volumes = objects.VolumeList.get_volume_summary_all(context)
else:
volumes = objects.VolumeList.get_volume_summary_by_project(
context, context.project_id)
all_tenants = utils.get_bool_param('all_tenants', filters)
filters.pop('all_tenants', None)
project_only = not (all_tenants and context.is_admin)
volumes = objects.VolumeList.get_volume_summary(context, project_only)
LOG.info(_LI("Get summary completed successfully."))
return volumes