The Database Layer

The manila.db.api Module

Defines interface for DB access.

The underlying driver is loaded as a LazyPluggable.

Functions in this module are imported into the manila.db namespace. Call these functions from manila.db namespace, not the manila.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

backend:string to lookup in the list of LazyPluggable backends. sqlalchemy is the only supported backend right now.
connection:string specifying the sqlalchemy connection to use, like: sqlite:///var/lib/manila/manila.sqlite.
enable_new_services:
 when adding a new service to the database, is it in the pool of available hardware (Default: True)
network_allocation_create(context, values)

Create a network allocation DB record.

network_allocation_delete(context, id)

Delete a network allocation DB record.

network_allocation_update(context, id, values)

Update a network allocation DB record.

network_allocations_get_by_ip_address(context, ip_address)

Get network allocations by IP address.

network_allocations_get_for_share_server(context, share_server_id, session=None)

Get network allocation for share server.

quota_class_create(context, class_name, resource, limit)

Create a quota class for the given name and resource.

quota_class_get(context, class_name, resource)

Retrieve a quota class or raise if it does not exist.

quota_class_get_all_by_name(context, class_name)

Retrieve all quotas associated with a given quota class.

quota_class_get_default(context)

Retrieve all default quotas.

quota_class_update(context, class_name, resource, limit)

Update a quota class or raise if it does not exist.

quota_create(context, project_id, resource, limit, user_id=None)

Create a quota for the given project and resource.

quota_destroy_all_by_project(context, project_id)

Destroy all quotas associated with a given project.

quota_destroy_all_by_project_and_user(context, project_id, user_id)

Destroy all quotas associated with a given project and user.

quota_get(context, project_id, resource, user_id=None)

Retrieve a quota or raise if it does not exist.

quota_get_all(context, project_id)

Retrieve all user quotas associated with a given project.

quota_get_all_by_project(context, project_id)

Retrieve all quotas associated with a given project.

quota_get_all_by_project_and_user(context, project_id, user_id)

Retrieve all quotas associated with a given project and user.

quota_reserve(context, resources, quotas, user_quotas, deltas, expire, until_refresh, max_age, project_id=None, user_id=None)

Check quotas and create appropriate reservations.

quota_update(context, project_id, resource, limit, user_id=None)

Update a quota or raise if it does not exist.

quota_usage_create(context, project_id, user_id, resource, in_use, reserved=0, until_refresh=None)

Create a quota usage.

quota_usage_get(context, project_id, resource, user_id=None)

Retrieve a quota usage or raise if it does not exist.

quota_usage_get_all_by_project(context, project_id)

Retrieve all usage associated with a given resource.

quota_usage_get_all_by_project_and_user(context, project_id, user_id)

Retrieve all usage associated with a given resource.

quota_usage_update(context, project_id, user_id, resource, **kwargs)

Update a quota usage or raise if it does not exist.

reservation_commit(context, reservations, project_id=None, user_id=None)

Commit quota reservations.

reservation_create(context, uuid, usage, project_id, user_id, resource, delta, expire)

Create a reservation for the given project and resource.

reservation_expire(context)

Roll back any expired reservations.

reservation_get(context, uuid)

Retrieve a reservation or raise if it does not exist.

reservation_rollback(context, reservations, project_id=None, user_id=None)

Roll back quota reservations.

security_service_create(context, values)

Create security service DB record.

security_service_delete(context, id)

Delete security service DB record.

security_service_get(context, id)

Get security service DB record.

security_service_get_all(context)

Get all security service DB records.

security_service_get_all_by_project(context, project_id)

Get all security service DB records for the given project.

security_service_update(context, id, values)

Update security service DB record.

service_create(context, values)

Create a service from the values dictionary.

service_destroy(context, service_id)

Destroy the service or raise if it does not exist.

service_get(context, service_id)

Get a service or raise if it does not exist.

service_get_all(context, disabled=None)

Get all services.

service_get_all_by_host(context, host)

Get all services for a given host.

service_get_all_by_topic(context, topic)

Get all services for a given topic.

service_get_all_share_sorted(context)

Get all share services sorted by share count.

Returns:a list of (Service, share_count) tuples.
service_get_by_args(context, host, binary)

Get the state of an service by node name and binary.

service_get_by_host_and_topic(context, host, topic)

Get a service by host it’s on and topic it listens to.

service_update(context, service_id, values)

Set the given properties on an service and update it.

Raises NotFound if service does not exist.

share_access_create(context, values)

Allow access to share.

share_access_delete(context, access_id)

Deny access to share.

share_access_get(context, access_id)

Allow access to share.

share_access_get_all_by_type_and_access(context, share_id, access_type, access)

Returns share access by given type and access.

share_access_get_all_for_share(context, share_id)

Allow access to share.

share_access_update(context, access_id, values)

Update access record.

share_create(context, values)

Create new share.

share_data_get_for_project(context, project_id, session=None)

Get (share_count, gigabytes) for project.

share_delete(context, share_id)

Delete share.

share_export_locations_get(context, share_id)

Get all exports_locations of share.

share_export_locations_update(context, share_id, export_locations, delete=True)

Update export locations of share.

share_get(context, share_id)

Get share by id.

share_get_all(context, filters=None, sort_key=None, sort_dir=None)

Get all shares.

share_get_all_by_host(context, host, filters=None, sort_key=None, sort_dir=None)

Returns all shares with given host.

share_get_all_by_project(context, project_id, filters=None, is_public=False, sort_key=None, sort_dir=None)

Returns all shares with given project ID.

share_get_all_by_share_network(context, share_network_id, filters=None, sort_key=None, sort_dir=None)

Returns list of shares that belong to given share network.

share_get_all_by_share_server(context, share_server_id, filters=None, sort_key=None, sort_dir=None)

Returns all shares with given share server ID.

share_metadata_delete(context, share_id, key)

Delete the given metadata item.

share_metadata_get(context, share_id)

Get all metadata for a share.

share_metadata_update(context, share, metadata, delete)

Update metadata if it exists, otherwise create it.

share_network_add_security_service(context, id, security_service_id)
share_network_create(context, values)

Create a share network DB record.

share_network_delete(context, id)

Delete a share network DB record.

share_network_get(context, id)

Get requested share network DB record.

share_network_get_all(context)

Get all share network DB records.

share_network_get_all_by_project(context, project_id)

Get all share network DB records for the given project.

share_network_get_all_by_security_service(context, security_service_id)

Get all share network DB records for the given project.

share_network_remove_security_service(context, id, security_service_id)
share_network_update(context, id, values)

Update a share network DB record.

share_server_backend_details_get(context, share_server_id)

Get all backend details records for share server.

share_server_backend_details_set(context, share_server_id, server_details)

Create DB record with backend details.

share_server_create(context, values)

Create share server DB record.

share_server_delete(context, id)

Delete share server DB record.

share_server_get(context, id, session=None)

Get share server DB record by ID.

share_server_get_all(context)

Get all share server DB records.

share_server_get_all_unused_deletable(context, host, updated_before)

Get all free share servers DB records.

share_server_get_by_host(context, host, share_net_id, session=None)

Get share server DB records by host.

share_server_get_by_host_and_share_net(context, host, share_net_id, session=None)

Get share server DB records by host and share net.

share_server_get_by_host_and_share_net_valid(context, host, share_net_id, session=None)

Get share server DB records by host and share net not error.

share_server_update(context, id, values)

Update share server DB record.

share_snapshot_create(context, values)

Create a snapshot from the values dictionary.

share_snapshot_data_get_for_project(context, project_id, session=None)

Get count and gigabytes used for snapshots for specified project.

share_snapshot_destroy(context, snapshot_id)

Destroy the snapshot or raise if it does not exist.

share_snapshot_get(context, snapshot_id)

Get a snapshot or raise if it does not exist.

share_snapshot_get_all(context, filters=None, sort_key=None, sort_dir=None)

Get all snapshots.

share_snapshot_get_all_by_project(context, project_id, filters=None, sort_key=None, sort_dir=None)

Get all snapshots belonging to a project.

share_snapshot_get_all_for_share(context, share_id, filters=None, sort_key=None, sort_dir=None)

Get all snapshots for a share.

share_snapshot_update(context, snapshot_id, values)

Set the given properties on an snapshot and update it.

Raises NotFound if snapshot does not exist.

share_type_access_add(context, type_id, project_id)

Add share type access for project.

share_type_access_get_all(context, type_id)

Get all share type access of a share type.

share_type_access_remove(context, type_id, project_id)

Remove share type access for project.

share_type_create(context, values, projects=None)

Create a new share type.

share_type_destroy(context, id)

Delete a share type.

share_type_extra_specs_delete(context, share_type_id, key)

Delete the given extra specs item.

share_type_extra_specs_get(context, share_type_id)

Get all extra specs for a share type.

share_type_extra_specs_update_or_create(context, share_type_id, extra_specs)

Create or update share type extra specs.

This adds or modifies the key/value pairs specified in the extra specs dict argument.

share_type_get(context, type_id, inactive=False, expected_fields=None)

Get share type by id.

Parameters:
  • context – context to query under
  • type_id – share type id to get.
  • inactive – Consider inactive share types when searching
  • expected_fields – Return those additional fields. Supported fields are: projects.
Returns:

share type

share_type_get_all(context, inactive=False, filters=None)

Get all share types.

Parameters:
  • context – context to query under
  • inactive – Include inactive share types to the result set
  • filters

    Filters for the query in the form of key/value. :is_public: Filter share types based on visibility:

    • True: List public share types only
    • False: List private share types only
    • None: List both public and private share types
Returns:

list of matching share types

share_type_get_by_name(context, name)

Get share type by name.

share_type_qos_specs_get(context, type_id)

Get all qos specs for given share type.

share_update(context, share_id, values)

Update share fields.

snapshot_data_get_for_project(context, project_id, session=None)

Get (snapshot_count, gigabytes) for project.

volume_get_active_by_window(context, begin, end=None, project_id=None)

Get all the volumes inside the window.

Specifying a project_id will filter for a certain project.

The Sqlalchemy Driver

The manila.db.sqlalchemy.api Module

Implementation of SQLAlchemy backend.

The manila.db.sqlalchemy.models Module

SQLAlchemy models for Manila data.

class ManilaBase

Bases: oslo_db.sqlalchemy.models.ModelBase, oslo_db.sqlalchemy.models.TimestampMixin, oslo_db.sqlalchemy.models.SoftDeleteMixin

Base class for Manila Models.

metadata = None
to_dict()
class ManilaNode(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a running manila service on a host.

created_at
deleted
deleted_at
id
service_id
updated_at
class NetworkAllocation(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents network allocation data.

created_at
deleted
deleted_at
id
ip_address
mac_address
share_server_id
status
updated_at
class ProjectUserQuota(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a single quota override for a user with in a project.

created_at
deleted
deleted_at
hard_limit
id
project_id
resource
updated_at
user_id
class Quota(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a single quota override for a project.

If there is no row for a given project id and resource, then the default for the quota class is used. If there is no row for a given quota class and resource, then the default for the deployment is used. If the row is present but the hard limit is Null, then the resource is unlimited.

created_at
deleted
deleted_at
hard_limit
id
project_id
resource
updated_at
class QuotaClass(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a single quota override for a quota class.

If there is no row for a given quota class and resource, then the default for the deployment is used. If the row is present but the hard limit is Null, then the resource is unlimited.

class_name
created_at
deleted
deleted_at
hard_limit
id
resource
updated_at
class QuotaUsage(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents the current usage for a given resource.

created_at
deleted
deleted_at
id
in_use
project_id
reserved
resource
total
until_refresh
updated_at
user_id
class Reservation(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a resource reservation for quotas.

created_at
deleted
deleted_at
delta
expire
id
project_id
resource
updated_at
usage_id
user_id
uuid
class SecurityService(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Security service information for manila shares.

created_at
deleted
deleted_at
description
dns_ip
domain
id
name
password
project_id
server
status
type
updated_at
user
class Service(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a running service on a host.

availability_zone
binary
created_at
deleted
deleted_at
disabled
host
id
report_count
topic
updated_at
class Share(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents an NFS and CIFS shares.

availability_zone
created_at
deleted
deleted_at
display_description
display_name
export_location
export_locations
host
id
is_public
launched_at
name
project_id
scheduled_at
share_network_id
share_proto
share_server_id
share_type_id
size
snapshot_id
status
terminated_at
updated_at
user_id
class ShareAccessMapping(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents access to NFS.

STATE_ACTIVE = 'active'
STATE_DELETED = 'deleted'
STATE_DELETING = 'deleting'
STATE_ERROR = 'error'
STATE_NEW = 'new'
access_level
access_to
access_type
created_at
deleted
deleted_at
id
share_id
state
updated_at
class ShareExportLocations(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents export locations of shares.

created_at
deleted
deleted_at
id
path
share_id
updated_at
class ShareMetadata(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a metadata key/value pair for a share.

created_at
deleted
deleted_at
id
key
share
share_id
updated_at
value
class ShareNetwork(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents network data used by share.

cidr
created_at
deleted
deleted_at
description
id
ip_version
name
network_type
neutron_net_id
neutron_subnet_id
nova_net_id
project_id
security_services
segmentation_id
share_servers
shares
updated_at
user_id
class ShareNetworkSecurityServiceAssociation(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Association table between compute_zones and compute_nodes tables.

created_at
deleted
deleted_at
id
security_service_id
share_network_id
updated_at
class ShareServer(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents share server used by share.

created_at
deleted
deleted_at
host
id
network_allocations
share_network_id
shares
status
updated_at
class ShareServerBackendDetails(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a metadata key/value pair for a share server.

created_at
deleted
deleted_at
id
key
share_server_id
updated_at
value
class ShareSnapshot(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents a snapshot of a share.

created_at
deleted
deleted_at
display_description
display_name
id
name
progress
project_id
share
share_id
share_name
share_proto
share_size
size
status
updated_at
user_id
class ShareTypeExtraSpecs(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represents additional specs as key/value pairs for a share_type.

created_at
deleted
deleted_at
id
key
share_type
share_type_id
updated_at
value
class ShareTypeProjects(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represent projects associated share_types.

created_at
deleted
deleted_at
id
project_id
share_type
share_type_id
updated_at
class ShareTypes(**kwargs)

Bases: sqlalchemy.ext.declarative.api.Base, manila.db.sqlalchemy.models.ManilaBase

Represent possible share_types of volumes offered.

created_at
deleted
deleted_at
id
is_public
name
shares
updated_at
register_models()

Register Models and create metadata.

Called from manila.db.sqlalchemy.__init__ as part of loading the driver, it will never need to be called explicitly elsewhere unless the connection is lost and needs to be reestablished.

Tests

Tests are lacking for the db api layer and for the sqlalchemy driver. Failures in the drivers would be detected in other test cases, though.