summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStephen Finucane <stephenfin@redhat.com>2021-10-08 13:04:46 +0100
committerStephen Finucane <stephenfin@redhat.com>2023-03-30 16:54:16 +0100
commite9f2c711e9fc6004c91680504f0f68ceababffb0 (patch)
tree1be37043597a8b8d3618c3b8d5e705c84772d1cd
parent19250d3f24e64b28e1d079a81759d533e5c22753 (diff)
downloadcinder-e9f2c711e9fc6004c91680504f0f68ceababffb0.tar.gz
db: Fix up some API signatures, other style issues
Some APIs were using odd parameter names, had different parameter names in the interface and implementation, or were located in an odd place. Fix all of these. Change-Id: Ied387cefb8c22f2be129f6e469395f2f7f656a70 Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
-rw-r--r--cinder/api/v3/messages.py2
-rw-r--r--cinder/db/api.py132
-rw-r--r--cinder/db/sqlalchemy/api.py527
3 files changed, 373 insertions, 288 deletions
diff --git a/cinder/api/v3/messages.py b/cinder/api/v3/messages.py
index 45986d53c..b71f70ca5 100644
--- a/cinder/api/v3/messages.py
+++ b/cinder/api/v3/messages.py
@@ -70,7 +70,7 @@ class MessagesController(wsgi.Controller):
# Not found exception will be handled at the wsgi level
message = self.message_api.get(context, id)
context.authorize(policy.DELETE_POLICY, target_obj=message)
- self.message_api.delete(context, message)
+ self.message_api.delete(context, id)
return webob.Response(status_int=HTTPStatus.NO_CONTENT)
diff --git a/cinder/db/api.py b/cinder/db/api.py
index 03b0ab33b..a8ac3df65 100644
--- a/cinder/db/api.py
+++ b/cinder/db/api.py
@@ -25,15 +25,12 @@ interface. Currently, many of these objects are sqlalchemy objects that
implement a dictionary interface. However, a future goal is to have all of
these objects be simple dictionaries.
-
**Related Flags**
:connection: string specifying the sqlalchemy connection to use, like:
- `sqlite:///var/lib/cinder/cinder.sqlite`.
-
+ `sqlite:///var/lib/cinder/cinder.sqlite`.
:enable_new_services: when adding a new service to the database, is it in the
- pool of available hardware (Default: True)
-
+ pool of available hardware (Default: True)
"""
from oslo_config import cfg
@@ -97,18 +94,6 @@ def dispose_engine():
###################
-def resource_exists(context, model, resource_id):
- return IMPL.resource_exists(context, model, resource_id)
-
-
-def get_model_for_versioned_object(versioned_object):
- return IMPL.get_model_for_versioned_object(versioned_object)
-
-
-def get_by_id(context, model, id, *args, **kwargs):
- return IMPL.get_by_id(context, model, id, *args, **kwargs)
-
-
class Condition(object):
"""Class for normal condition values for conditional_update."""
def __init__(self, value, field=None):
@@ -160,6 +145,24 @@ class Case(object):
self.else_ = else_
+###################
+
+
+def resource_exists(context, model, resource_id):
+ return IMPL.resource_exists(context, model, resource_id)
+
+
+def get_model_for_versioned_object(versioned_object):
+ return IMPL.get_model_for_versioned_object(versioned_object)
+
+
+def get_by_id(context, model, id, *args, **kwargs):
+ return IMPL.get_by_id(context, model, id, *args, **kwargs)
+
+
+###################
+
+
def is_orm_value(obj):
"""Check if object is an ORM field."""
return IMPL.is_orm_value(obj)
@@ -170,7 +173,7 @@ def conditional_update(
model,
values,
expected_values,
- filters=(),
+ filters=None,
include_deleted='no',
project_only=False,
order=None,
@@ -363,20 +366,20 @@ def cluster_create(context, values):
return IMPL.cluster_create(context, values)
-def cluster_update(context, id, values):
+def cluster_update(context, cluster_id, values):
"""Set the given properties on an cluster and update it.
Raises ClusterNotFound if cluster does not exist.
"""
- return IMPL.cluster_update(context, id, values)
+ return IMPL.cluster_update(context, cluster_id, values)
-def cluster_destroy(context, id):
+def cluster_destroy(context, cluster_id):
"""Destroy the cluster or raise if it does not exist or has hosts.
:raise ClusterNotFound: If cluster doesn't exist.
"""
- return IMPL.cluster_destroy(context, id)
+ return IMPL.cluster_destroy(context, cluster_id)
###############
@@ -387,11 +390,25 @@ def volume_attach(context, values):
return IMPL.volume_attach(context, values)
-def volume_attached(context, volume_id, instance_id, host_name, mountpoint,
- attach_mode='rw', mark_attached=True):
+def volume_attached(
+ context,
+ attachment_id,
+ instance_uuid,
+ host_name,
+ mountpoint,
+ attach_mode='rw',
+ mark_attached=True,
+):
"""Ensure that a volume is set as attached."""
- return IMPL.volume_attached(context, volume_id, instance_id, host_name,
- mountpoint, attach_mode, mark_attached)
+ return IMPL.volume_attached(
+ context,
+ attachment_id,
+ instance_uuid,
+ host_name,
+ mountpoint,
+ attach_mode,
+ mark_attached,
+ )
def volume_create(context, values):
@@ -623,9 +640,9 @@ def snapshot_get_all_by_host(context, host, filters=None):
return IMPL.snapshot_get_all_by_host(context, host, filters)
-def snapshot_get_all_for_cgsnapshot(context, project_id):
+def snapshot_get_all_for_cgsnapshot(context, cgsnapshot_id):
"""Get all snapshots belonging to a cgsnapshot."""
- return IMPL.snapshot_get_all_for_cgsnapshot(context, project_id)
+ return IMPL.snapshot_get_all_for_cgsnapshot(context, cgsnapshot_id)
def snapshot_get_all_for_group_snapshot(context, group_snapshot_id):
@@ -833,9 +850,9 @@ def volume_type_qos_specs_get(context, type_id):
return IMPL.volume_type_qos_specs_get(context, type_id)
-def volume_type_destroy(context, id):
+def volume_type_destroy(context, type_id):
"""Delete a volume type."""
- return IMPL.volume_type_destroy(context, id)
+ return IMPL.volume_type_destroy(context, type_id)
def volume_get_all_active_by_window(context, begin, end=None, project_id=None):
@@ -951,9 +968,9 @@ def group_types_get_by_name_or_id(context, group_type_list):
return IMPL.group_types_get_by_name_or_id(context, group_type_list)
-def group_type_destroy(context, id):
+def group_type_destroy(context, type_id):
"""Delete a group type."""
- return IMPL.group_type_destroy(context, id)
+ return IMPL.group_type_destroy(context, type_id)
def group_type_access_get_all(context, type_id):
@@ -989,17 +1006,17 @@ def volume_type_extra_specs_delete(context, volume_type_id, key):
return IMPL.volume_type_extra_specs_delete(context, volume_type_id, key)
-def volume_type_extra_specs_update_or_create(context,
- volume_type_id,
- extra_specs):
+def volume_type_extra_specs_update_or_create(
+ context, volume_type_id, extra_specs,
+):
"""Create or update volume type extra specs.
This adds or modifies the key/value pairs specified in the extra specs dict
argument.
"""
- return IMPL.volume_type_extra_specs_update_or_create(context,
- volume_type_id,
- extra_specs)
+ return IMPL.volume_type_extra_specs_update_or_create(
+ context, volume_type_id, extra_specs,
+ )
###################
@@ -1039,14 +1056,13 @@ def volume_type_encryption_delete(context, volume_type_id):
return IMPL.volume_type_encryption_delete(context, volume_type_id)
-def volume_type_encryption_create(context, volume_type_id, encryption_specs):
+def volume_type_encryption_create(context, volume_type_id, values):
return IMPL.volume_type_encryption_create(context, volume_type_id,
- encryption_specs)
+ values)
-def volume_type_encryption_update(context, volume_type_id, encryption_specs):
- return IMPL.volume_type_encryption_update(context, volume_type_id,
- encryption_specs)
+def volume_type_encryption_update(context, volume_type_id, values):
+ return IMPL.volume_type_encryption_update(context, volume_type_id, values)
def volume_type_encryption_volume_get(context, volume_type_id):
@@ -1065,9 +1081,9 @@ def qos_specs_create(context, values):
return IMPL.qos_specs_create(context, values)
-def qos_specs_get(context, qos_specs_id):
+def qos_specs_get(context, qos_specs_id, inactive=False):
"""Get all specification for a given qos_specs."""
- return IMPL.qos_specs_get(context, qos_specs_id)
+ return IMPL.qos_specs_get(context, qos_specs_id, inactive)
def qos_specs_get_all(context, filters=None, marker=None, limit=None,
@@ -1078,9 +1094,9 @@ def qos_specs_get_all(context, filters=None, marker=None, limit=None,
sort_keys=sort_keys, sort_dirs=sort_dirs)
-def qos_specs_get_by_name(context, name):
+def qos_specs_get_by_name(context, name, inactive=False):
"""Get all specification for a given qos_specs."""
- return IMPL.qos_specs_get_by_name(context, name)
+ return IMPL.qos_specs_get_by_name(context, name, inactive)
def qos_specs_associations_get(context, qos_specs_id):
@@ -1113,13 +1129,13 @@ def qos_specs_item_delete(context, qos_specs_id, key):
return IMPL.qos_specs_item_delete(context, qos_specs_id, key)
-def qos_specs_update(context, qos_specs_id, specs):
+def qos_specs_update(context, qos_specs_id, values):
"""Update qos specs.
This adds or modifies the key/value pairs specified in the
specs dict argument for a given qos_specs.
"""
- return IMPL.qos_specs_update(context, qos_specs_id, specs)
+ return IMPL.qos_specs_update(context, qos_specs_id, values)
###################
@@ -1268,9 +1284,9 @@ def quota_class_update(context, class_name, resource, limit):
return IMPL.quota_class_update(context, class_name, resource, limit)
-def quota_class_update_resource(context, resource, new_resource):
+def quota_class_update_resource(context, old_res, new_res):
"""Update resource name in quota_class."""
- return IMPL.quota_class_update_resource(context, resource, new_resource)
+ return IMPL.quota_class_update_resource(context, old_res, new_res)
def quota_class_destroy(context, class_name, resource):
@@ -1580,9 +1596,19 @@ def group_get_all(context, filters=None, marker=None, limit=None,
sort_dirs=sort_dirs)
-def group_create(context, values, group_snapshot_id=None, group_id=None):
+def group_create(
+ context,
+ values,
+ group_snapshot_id=None,
+ source_group_id=None,
+):
"""Create a group from the values dictionary."""
- return IMPL.group_create(context, values, group_snapshot_id, group_id)
+ return IMPL.group_create(
+ context,
+ values,
+ group_snapshot_id,
+ source_group_id,
+ )
def group_get_all_by_project(context, project_id, filters=None,
diff --git a/cinder/db/sqlalchemy/api.py b/cinder/db/sqlalchemy/api.py
index c59dea44c..7a69ce48e 100644
--- a/cinder/db/sqlalchemy/api.py
+++ b/cinder/db/sqlalchemy/api.py
@@ -16,7 +16,23 @@
# License for the specific language governing permissions and limitations
# under the License.
-"""Implementation of SQLAlchemy backend."""
+"""Defines interface for DB access.
+
+Functions in this module are imported into the cinder.db namespace. Call these
+functions from cinder.db namespace, not the cinder.db.api namespace.
+
+All functions in this module return objects that implement a dictionary-like
+interface. Currently, many of these objects are sqlalchemy objects that
+implement a dictionary interface. However, a future goal is to have all of
+these objects be simple dictionaries.
+
+**Related Flags**
+
+:connection: string specifying the sqlalchemy connection to use, like:
+ `sqlite:///var/lib/cinder/cinder.sqlite`.
+:enable_new_services: when adding a new service to the database, is it in the
+ pool of available hardware (Default: True)
+"""
import collections
from collections import abc
@@ -183,6 +199,9 @@ def require_context(f):
return wrapper
+###################
+
+
@require_context
@main_context_manager.reader
def resource_exists(context, model, resource_id):
@@ -318,131 +337,6 @@ def model_query(context, model, *args, **kwargs):
return query
-def _sync_volumes(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- volumes, _ = _volume_data_get_for_project(
- context,
- project_id,
- volume_type_id=volume_type_id,
- )
- key = 'volumes'
- if volume_type_name:
- key += '_' + volume_type_name
- return {key: volumes}
-
-
-def _sync_snapshots(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- snapshots, _ = _snapshot_data_get_for_project(
- context,
- project_id,
- volume_type_id=volume_type_id,
- )
- key = 'snapshots'
- if volume_type_name:
- key += '_' + volume_type_name
- return {key: snapshots}
-
-
-def _sync_backups(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- backups, _ = _backup_data_get_for_project(
- context,
- project_id,
- volume_type_id=volume_type_id,
- )
- key = 'backups'
- return {key: backups}
-
-
-def _sync_gigabytes(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- _, vol_gigs = _volume_data_get_for_project(
- context,
- project_id,
- volume_type_id=volume_type_id,
- )
-
- key = 'gigabytes'
- if volume_type_name:
- key += '_' + volume_type_name
-
- if CONF.no_snapshot_gb_quota:
- return {key: vol_gigs}
-
- _, snap_gigs = _snapshot_data_get_for_project(
- context,
- project_id,
- volume_type_id=volume_type_id,
- )
-
- return {key: vol_gigs + snap_gigs}
-
-
-def _sync_consistencygroups(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- _, groups = _consistencygroup_data_get_for_project(context, project_id)
- key = 'consistencygroups'
- return {key: groups}
-
-
-def _sync_backup_gigabytes(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- key = 'backup_gigabytes'
- _, backup_gigs = _backup_data_get_for_project(
- context,
- project_id,
- volume_type_id=volume_type_id,
- )
- return {key: backup_gigs}
-
-
-def _sync_groups(
- context,
- project_id,
- volume_type_id=None,
- volume_type_name=None,
-):
- _, groups = _group_data_get_for_project(context, project_id)
- key = 'groups'
- return {key: groups}
-
-
-QUOTA_SYNC_FUNCTIONS = {
- '_sync_volumes': _sync_volumes,
- '_sync_snapshots': _sync_snapshots,
- '_sync_gigabytes': _sync_gigabytes,
- '_sync_consistencygroups': _sync_consistencygroups,
- '_sync_backups': _sync_backups,
- '_sync_backup_gigabytes': _sync_backup_gigabytes,
- '_sync_groups': _sync_groups,
-}
-
-
###################
@@ -697,6 +591,134 @@ def conditional_update(
###################
+def _sync_volumes(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ volumes, _ = _volume_data_get_for_project(
+ context,
+ project_id,
+ volume_type_id=volume_type_id,
+ )
+ key = 'volumes'
+ if volume_type_name:
+ key += '_' + volume_type_name
+ return {key: volumes}
+
+
+def _sync_snapshots(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ snapshots, _ = _snapshot_data_get_for_project(
+ context,
+ project_id,
+ volume_type_id=volume_type_id,
+ )
+ key = 'snapshots'
+ if volume_type_name:
+ key += '_' + volume_type_name
+ return {key: snapshots}
+
+
+def _sync_backups(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ backups, _ = _backup_data_get_for_project(
+ context,
+ project_id,
+ volume_type_id=volume_type_id,
+ )
+ key = 'backups'
+ return {key: backups}
+
+
+def _sync_gigabytes(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ _, vol_gigs = _volume_data_get_for_project(
+ context,
+ project_id,
+ volume_type_id=volume_type_id,
+ )
+
+ key = 'gigabytes'
+ if volume_type_name:
+ key += '_' + volume_type_name
+
+ if CONF.no_snapshot_gb_quota:
+ return {key: vol_gigs}
+
+ _, snap_gigs = _snapshot_data_get_for_project(
+ context,
+ project_id,
+ volume_type_id=volume_type_id,
+ )
+
+ return {key: vol_gigs + snap_gigs}
+
+
+def _sync_consistencygroups(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ _, groups = _consistencygroup_data_get_for_project(context, project_id)
+ key = 'consistencygroups'
+ return {key: groups}
+
+
+def _sync_backup_gigabytes(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ key = 'backup_gigabytes'
+ _, backup_gigs = _backup_data_get_for_project(
+ context,
+ project_id,
+ volume_type_id=volume_type_id,
+ )
+ return {key: backup_gigs}
+
+
+def _sync_groups(
+ context,
+ project_id,
+ volume_type_id=None,
+ volume_type_name=None,
+):
+ _, groups = _group_data_get_for_project(context, project_id)
+ key = 'groups'
+ return {key: groups}
+
+
+QUOTA_SYNC_FUNCTIONS = {
+ '_sync_volumes': _sync_volumes,
+ '_sync_snapshots': _sync_snapshots,
+ '_sync_gigabytes': _sync_gigabytes,
+ '_sync_consistencygroups': _sync_consistencygroups,
+ '_sync_backups': _sync_backups,
+ '_sync_backup_gigabytes': _sync_backup_gigabytes,
+ '_sync_groups': _sync_groups,
+}
+
+
+###################
+
+
def _clean_filters(filters):
return {k: v for k, v in filters.items() if v is not None}
@@ -1128,22 +1150,22 @@ def cluster_create(context, values):
@require_admin_context
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@main_context_manager.writer
-def cluster_update(context, id, values):
+def cluster_update(context, cluster_id, values):
"""Set the given properties on an cluster and update it.
Raises ClusterNotFound if cluster does not exist.
"""
- query = _cluster_query(context, id=id)
+ query = _cluster_query(context, id=cluster_id)
result = query.update(values)
if not result:
- raise exception.ClusterNotFound(id=id)
+ raise exception.ClusterNotFound(id=cluster_id)
@require_admin_context
@main_context_manager.writer
-def cluster_destroy(context, id):
+def cluster_destroy(context, cluster_id):
"""Destroy the cluster or raise if it does not exist or has hosts."""
- query = _cluster_query(context, id=id)
+ query = _cluster_query(context, id=cluster_id)
query = query.filter(models.Cluster.num_hosts == 0)
# If the update doesn't succeed we don't know if it's because the
# cluster doesn't exist or because it has hosts.
@@ -1154,9 +1176,9 @@ def cluster_destroy(context, id):
if not result:
# This will fail if the cluster doesn't exist raising the right
# exception
- cluster_get(context, id=id)
+ cluster_get(context, id=cluster_id)
# If it doesn't fail, then the problem is that there are hosts
- raise exception.ClusterHasHosts(id=id)
+ raise exception.ClusterHasHosts(id=cluster_id)
###################
@@ -1863,6 +1885,8 @@ def quota_destroy_by_project(context, project_id):
quota_destroy_all_by_project(context, project_id, only_quotas=True)
+# TODO(stephenfin): No one is using this except 'quota_destroy_by_project'
+# above, so the only_quotas=False path could be removed.
@require_context
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@main_context_manager.writer
@@ -1939,8 +1963,8 @@ def volume_attached(
instance_uuid,
host_name,
mountpoint,
- attach_mode,
- mark_attached,
+ attach_mode='rw',
+ mark_attached=True,
):
"""This method updates a volume attachment entry.
@@ -2521,9 +2545,10 @@ def volume_attachment_get_all_by_volume_id(context, volume_id):
return result
+# FIXME(jdg): Not using filters
@require_context
@main_context_manager.reader
-def volume_attachment_get_all_by_host(context, host):
+def volume_attachment_get_all_by_host(context, host, filters=None):
result = (
model_query(context, models.VolumeAttachment)
.filter_by(attached_host=host)
@@ -2544,9 +2569,14 @@ def volume_attachment_get(context, attachment_id):
return _attachment_get(context, attachment_id)
+# FIXME(jdg): Not using filters
@require_context
@main_context_manager.reader
-def volume_attachment_get_all_by_instance_uuid(context, instance_uuid):
+def volume_attachment_get_all_by_instance_uuid(
+ context,
+ instance_uuid,
+ filters=None,
+):
"""Fetch all attachment records associated with the specified instance."""
result = (
model_query(context, models.VolumeAttachment)
@@ -3576,7 +3606,12 @@ def volume_metadata_get(context, volume_id):
@require_volume_exists
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@main_context_manager.writer
-def volume_metadata_delete(context, volume_id, key, meta_type):
+def volume_metadata_delete(
+ context,
+ volume_id,
+ key,
+ meta_type=common.METADATA_TYPES.user,
+):
if meta_type == common.METADATA_TYPES.user:
query = _volume_user_metadata_get_query(context, volume_id).filter_by(
key=key
@@ -3614,7 +3649,13 @@ def volume_metadata_delete(context, volume_id, key, meta_type):
@handle_db_data_error
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@main_context_manager.writer
-def volume_metadata_update(context, volume_id, metadata, delete, meta_type):
+def volume_metadata_update(
+ context,
+ volume_id,
+ metadata,
+ delete,
+ meta_type=common.METADATA_TYPES.user,
+):
if meta_type == common.METADATA_TYPES.user:
return _volume_user_metadata_update(
context, volume_id, metadata, delete
@@ -4795,7 +4836,15 @@ def _group_type_get(context, id, inactive=False, expected_fields=None):
@require_context
@main_context_manager.reader
def volume_type_get(context, id, inactive=False, expected_fields=None):
- """Return a dict describing specific volume_type."""
+ """Get volume type by id.
+
+ :param context: context to query under
+ :param id: Volume type id to get.
+ :param inactive: Consider inactive volume types when searching
+ :param expected_fields: Return those additional fields.
+ Supported fields are: projects.
+ :returns: volume type
+ """
return _volume_type_get(
context, id, inactive=inactive, expected_fields=expected_fields
@@ -5035,15 +5084,17 @@ def volume_type_qos_specs_get(context, type_id):
@require_admin_context
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@main_context_manager.writer
-def volume_type_destroy(context, id):
+def volume_type_destroy(context, type_id):
utcnow = timeutils.utcnow()
vol_types = volume_type_get_all(context)
if len(vol_types) <= 1:
- raise exception.VolumeTypeDeletionError(volume_type_id=id)
- _volume_type_get(context, id)
+ raise exception.VolumeTypeDeletionError(volume_type_id=type_id)
+ _volume_type_get(context, type_id)
results = (
- model_query(context, models.Volume).filter_by(volume_type_id=id).all()
+ model_query(context, models.Volume)
+ .filter_by(volume_type_id=type_id)
+ .all()
)
group_count = (
@@ -5052,7 +5103,7 @@ def volume_type_destroy(context, id):
models.GroupVolumeTypeMapping,
read_deleted="no",
)
- .filter_by(volume_type_id=id)
+ .filter_by(volume_type_id=type_id)
.count()
)
cg_count = (
@@ -5060,14 +5111,14 @@ def volume_type_destroy(context, id):
context,
models.ConsistencyGroup,
)
- .filter(models.ConsistencyGroup.volume_type_id.contains(id))
+ .filter(models.ConsistencyGroup.volume_type_id.contains(type_id))
.count()
)
if results or group_count or cg_count:
- LOG.error('VolumeType %s deletion failed, VolumeType in use.', id)
- raise exception.VolumeTypeInUse(volume_type_id=id)
+ LOG.error('VolumeType %s deletion failed, VolumeType in use.', type_id)
+ raise exception.VolumeTypeInUse(volume_type_id=type_id)
- query = model_query(context, models.VolumeType).filter_by(id=id)
+ query = model_query(context, models.VolumeType).filter_by(id=type_id)
entity = query.column_descriptions[0]['entity']
updated_values = {
'deleted': True,
@@ -5079,7 +5130,7 @@ def volume_type_destroy(context, id):
query = model_query(
context,
models.VolumeTypeExtraSpecs,
- ).filter_by(volume_type_id=id)
+ ).filter_by(volume_type_id=type_id)
entity = query.column_descriptions[0]['entity']
query.update(
{
@@ -5090,7 +5141,7 @@ def volume_type_destroy(context, id):
)
query = model_query(context, models.Encryption).filter_by(
- volume_type_id=id
+ volume_type_id=type_id
)
entity = query.column_descriptions[0]['entity']
query.update(
@@ -5103,7 +5154,7 @@ def volume_type_destroy(context, id):
model_query(
context, models.VolumeTypeProjects, read_deleted="int_no"
- ).filter_by(volume_type_id=id).soft_delete(synchronize_session=False)
+ ).filter_by(volume_type_id=type_id).soft_delete(synchronize_session=False)
del updated_values['updated_at']
return updated_values
@@ -5111,16 +5162,18 @@ def volume_type_destroy(context, id):
@require_admin_context
@oslo_db_api.wrap_db_retry(max_retries=5, retry_on_deadlock=True)
@main_context_manager.writer
-def group_type_destroy(context, id):
- _group_type_get(context, id)
+def group_type_destroy(context, type_id):
+ _group_type_get(context, type_id)
results = (
- model_query(context, models.Group).filter_by(group_type_id=id).all()
+ model_query(context, models.Group)
+ .filter_by(group_type_id=type_id)
+ .all()
)
if results:
- LOG.error('GroupType %s deletion failed, ' 'GroupType in use.', id)
- raise exception.GroupTypeInUse(group_type_id=id)
+ LOG.error('GroupType %s deletion failed, GroupType in use.', type_id)
+ raise exception.GroupTypeInUse(group_type_id=type_id)
- query = model_query(context, models.GroupType).filter_by(id=id)
+ query = model_query(context, models.GroupType).filter_by(id=type_id)
entity = query.column_descriptions[0]['entity']
query.update(
{
@@ -5131,7 +5184,7 @@ def group_type_destroy(context, id):
)
query = model_query(context, models.GroupTypeSpecs).filter_by(
- group_type_id=id
+ group_type_id=type_id
)
entity = query.column_descriptions[0]['entity']
query.update(
@@ -5441,9 +5494,13 @@ def _volume_type_extra_specs_get_item(context, volume_type_id, key):
@handle_db_data_error
@require_context
@main_context_manager.writer
-def volume_type_extra_specs_update_or_create(context, volume_type_id, specs):
+def volume_type_extra_specs_update_or_create(
+ context,
+ volume_type_id,
+ extra_specs,
+):
spec_ref = None
- for key, value in specs.items():
+ for key, value in extra_specs.items():
try:
spec_ref = _volume_type_extra_specs_get_item(
context,
@@ -5463,7 +5520,7 @@ def volume_type_extra_specs_update_or_create(context, volume_type_id, specs):
)
spec_ref.save(context.session)
- return specs
+ return extra_specs
####################
@@ -5524,9 +5581,9 @@ def _group_type_specs_get_item(context, group_type_id, key):
@handle_db_data_error
@require_context
@main_context_manager.writer
-def group_type_specs_update_or_create(context, group_type_id, specs):
+def group_type_specs_update_or_create(context, group_type_id, group_specs):
spec_ref = None
- for key, value in specs.items():
+ for key, value in group_specs.items():
try:
spec_ref = _group_type_specs_get_item(context, group_type_id, key)
except exception.GroupTypeSpecsNotFound:
@@ -5541,7 +5598,7 @@ def group_type_specs_update_or_create(context, group_type_id, specs):
)
spec_ref.save(context.session)
- return specs
+ return group_specs
####################
@@ -5915,18 +5972,18 @@ def _qos_specs_get_item(context, qos_specs_id, key):
@require_admin_context
@require_qos_specs_exists
@main_context_manager.writer
-def qos_specs_update(context, qos_specs_id, updates):
+def qos_specs_update(context, qos_specs_id, values):
"""Make updates to an existing qos specs.
Perform add, update or delete key/values to a qos specs.
"""
- specs = updates.get('specs', {})
+ specs = values.get('specs', {})
- if 'consumer' in updates:
+ if 'consumer' in values:
# Massage consumer to the right place for DB and copy specs
# before updating so we don't modify dict for caller
specs = specs.copy()
- specs['consumer'] = updates['consumer']
+ specs['consumer'] = values['consumer']
spec_ref = None
for key in specs.keys():
try:
@@ -8254,12 +8311,9 @@ def message_create(context, values):
@require_admin_context
@main_context_manager.writer
-def message_destroy(context, message):
+def message_destroy(context, message_id):
now = timeutils.utcnow()
- query = model_query(
- context,
- models.Message,
- ).filter_by(id=message.get('id'))
+ query = model_query(context, models.Message).filter_by(id=message_id)
entity = query.column_descriptions[0]['entity']
updated_values = {
'deleted': True,
@@ -8326,64 +8380,6 @@ def driver_initiator_data_get(context, initiator, namespace):
###############################
-PAGINATION_HELPERS = {
- models.Volume: (_volume_get_query, _process_volume_filters, _volume_get),
- models.Snapshot: (_snaps_get_query, _process_snaps_filters, _snapshot_get),
- models.Backup: (_backups_get_query, _process_backups_filters, _backup_get),
- models.QualityOfServiceSpecs: (
- _qos_specs_get_query,
- _process_qos_specs_filters,
- _qos_specs_get,
- ),
- models.VolumeType: (
- _volume_type_get_query,
- _process_volume_types_filters,
- _volume_type_get_db_object,
- ),
- models.ConsistencyGroup: (
- _consistencygroups_get_query,
- _process_consistencygroups_filters,
- _consistencygroup_get,
- ),
- models.Message: (
- _messages_get_query,
- _process_messages_filters,
- _message_get,
- ),
- models.GroupType: (
- _group_type_get_query,
- _process_group_types_filters,
- _group_type_get_db_object,
- ),
- models.Group: (_groups_get_query, _process_groups_filters, _group_get),
- models.GroupSnapshot: (
- _group_snapshot_get_query,
- _process_group_snapshot_filters,
- _group_snapshot_get,
- ),
- models.VolumeAttachment: (
- _attachment_get_query,
- _process_attachment_filters,
- _attachment_get,
- ),
- models.Transfer: (
- _transfer_get_query,
- _process_transfer_filters,
- _transfer_get,
- ),
-}
-
-
-CALCULATE_COUNT_HELPERS = {
- 'volume': (_volume_get_query, _process_volume_filters),
- 'snapshot': (_snaps_get_query, _process_snaps_filters),
- 'backup': (_backups_get_query, _process_backups_filters),
-}
-
-
-###############################
-
-
@require_context
@main_context_manager.writer
def image_volume_cache_create(
@@ -8550,9 +8546,14 @@ def worker_get(context, **filters):
@require_context
@main_context_manager.reader
-def worker_get_all(context, **filters):
+def worker_get_all(context, until=None, db_filters=None, **filters):
"""Get all workers that match given criteria."""
- query = _worker_query(context, **filters)
+ query = _worker_query(
+ context,
+ until=until,
+ db_filters=db_filters,
+ **filters,
+ )
return query.all() if query else []
@@ -8704,3 +8705,61 @@ def use_quota_online_data_migration(
# models.VolumeAdminMetadata.delete_values)
#
# return total, updated
+
+
+###############################
+
+
+PAGINATION_HELPERS = {
+ models.Volume: (_volume_get_query, _process_volume_filters, _volume_get),
+ models.Snapshot: (_snaps_get_query, _process_snaps_filters, _snapshot_get),
+ models.Backup: (_backups_get_query, _process_backups_filters, _backup_get),
+ models.QualityOfServiceSpecs: (
+ _qos_specs_get_query,
+ _process_qos_specs_filters,
+ _qos_specs_get,
+ ),
+ models.VolumeType: (
+ _volume_type_get_query,
+ _process_volume_types_filters,
+ _volume_type_get_db_object,
+ ),
+ models.ConsistencyGroup: (
+ _consistencygroups_get_query,
+ _process_consistencygroups_filters,
+ _consistencygroup_get,
+ ),
+ models.Message: (
+ _messages_get_query,
+ _process_messages_filters,
+ _message_get,
+ ),
+ models.GroupType: (
+ _group_type_get_query,
+ _process_group_types_filters,
+ _group_type_get_db_object,
+ ),
+ models.Group: (_groups_get_query, _process_groups_filters, _group_get),
+ models.GroupSnapshot: (
+ _group_snapshot_get_query,
+ _process_group_snapshot_filters,
+ _group_snapshot_get,
+ ),
+ models.VolumeAttachment: (
+ _attachment_get_query,
+ _process_attachment_filters,
+ _attachment_get,
+ ),
+ models.Transfer: (
+ _transfer_get_query,
+ _process_transfer_filters,
+ _transfer_get,
+ ),
+}
+
+
+CALCULATE_COUNT_HELPERS = {
+ 'volume': (_volume_get_query, _process_volume_filters),
+ 'snapshot': (_snaps_get_query, _process_snaps_filters),
+ 'backup': (_backups_get_query, _process_backups_filters),
+}