Table Of Contents

Previous topic

Services, Managers and Drivers

Next topic

Storage Volumes, Disks

This Page

Psst... hey. You're reading the latest content, but it might be out of sync with code. You can read Cinder 2011.2 docs or all OpenStack docs too.

The Database Layer

The cinder.db.api Module

Defines interface for DB access.

The underlying driver is loaded as a LazyPluggable.

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

db_backend:string to lookup in the list of LazyPluggable backends. sqlalchemy is the only supported backend right now.
sql_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)
exception NoMoreTargets(message=None, **kwargs)

Bases: cinder.exception.CinderException

No more available targets

iscsi_target_count_by_host(context, host)

Return count of export devices.

iscsi_target_create_safe(context, values)

Create an iscsi_target from the values dictionary.

The device is not returned. If the create violates the unique constraints because the iscsi_target and host already exist, no exception is raised.

migration_create(context, values)

Create a migration record.

migration_get(context, migration_id)

Finds a migration by the id.

migration_get_all_unconfirmed(context, confirm_window)

Finds all unconfirmed migrations within the confirmation window.

migration_get_by_instance_and_status(context, instance_uuid, status)

Finds a migration by the instance uuid its migrating.

migration_update(context, id, values)

Update a migration instance.

quota_class_create(context, class_name, resource, limit)

Create a quota class for the given name and resource.

quota_class_destroy(context, class_name, resource)

Destroy the quota class or raise if it does not exist.

quota_class_destroy_all_by_name(context, class_name)

Destroy all quotas associated with a given quota class.

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_update(context, class_name, resource, limit)

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

quota_create(context, project_id, resource, limit)

Create a quota for the given project and resource.

quota_destroy(context, project_id, resource)

Destroy the quota or raise if it does not exist.

quota_destroy_all_by_project(context, project_id)

Destroy all quotas associated with a given project.

quota_get(context, project_id, resource)

Retrieve a quota or raise if it does not exist.

quota_get_all_by_project(context, project_id)

Retrieve all quotas associated with a given project.

quota_reserve(context, resources, quotas, deltas, expire, until_refresh, max_age)

Check quotas and create appropriate reservations.

quota_update(context, project_id, resource, limit)

Update a quota or raise if it does not exist.

quota_usage_create(context, project_id, resource, in_use, reserved, until_refresh)

Create a quota usage for the given project and resource.

quota_usage_destroy(context, project_id, resource)

Destroy the quota usage or raise if it does not exist.

quota_usage_get(context, project_id, resource)

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_update(context, class_name, resource, in_use, reserved, until_refresh)

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

reservation_commit(context, reservations)

Commit quota reservations.

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

Create a reservation for the given project and resource.

reservation_destroy(context, uuid)

Destroy the reservation or raise if it does not exist.

reservation_expire(context)

Roll back any expired reservations.

reservation_get(context, uuid)

Retrieve a reservation or raise if it does not exist.

reservation_get_all_by_project(context, project_id)

Retrieve all reservations associated with a given project.

reservation_rollback(context, reservations)

Roll back quota reservations.

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_volume_sorted(context)

Get all volume services sorted by volume count.

Returns:a list of (Service, volume_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.

sm_backend_conf_create(context, values)

Create a new SM Backend Config entry.

sm_backend_conf_delete(context, sm_backend_conf_id)

Delete a SM Backend Config.

sm_backend_conf_get(context, sm_backend_conf_id)

Get a specific SM Backend Config.

sm_backend_conf_get_all(context)

Get all SM Backend Configs.

sm_backend_conf_get_by_sr(context, sr_uuid)

Get a specific SM Backend Config.

sm_backend_conf_update(context, sm_backend_conf_id, values)

Update a SM Backend Config entry.

sm_flavor_create(context, values)

Create a new SM Flavor entry.

sm_flavor_delete(context, sm_flavor_id)

Delete a SM Flavor.

sm_flavor_get(context, sm_flavor)

Get a specific SM Flavor.

sm_flavor_get_all(context)

Get all SM Flavors.

sm_flavor_update(context, sm_flavor_id, values)

Update a SM Flavor entry.

sm_volume_create(context, values)

Create a new child Zone entry.

sm_volume_delete(context, volume_id)

Delete a child Zone.

sm_volume_get(context, volume_id)

Get a specific child Zone.

sm_volume_get_all(context)

Get all child Zones.

sm_volume_update(context, volume_id, values)

Update a child Zone entry.

snapshot_create(context, values)

Create a snapshot from the values dictionary.

snapshot_destroy(context, snapshot_id)

Destroy the snapshot or raise if it does not exist.

snapshot_get(context, snapshot_id)

Get a snapshot or raise if it does not exist.

snapshot_get_all(context)

Get all snapshots.

snapshot_get_all_by_project(context, project_id)

Get all snapshots belonging to a project.

snapshot_get_all_for_volume(context, volume_id)

Get all snapshots for a volume.

snapshot_update(context, snapshot_id, values)

Set the given properties on an snapshot and update it.

Raises NotFound if snapshot does not exist.

volume_allocate_iscsi_target(context, volume_id, host)

Atomically allocate a free iscsi_target from the pool.

volume_attached(context, volume_id, instance_id, mountpoint)

Ensure that a volume is set as attached.

volume_create(context, values)

Create a volume from the values dictionary.

volume_data_get_for_project(context, project_id, session=None)

Get (volume_count, gigabytes) for project.

volume_destroy(context, volume_id)

Destroy the volume or raise if it does not exist.

volume_detached(context, volume_id)

Ensure that a volume is set as detached.

volume_get(context, volume_id)

Get a volume or raise if it does not exist.

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.

volume_get_all(context)

Get all volumes.

volume_get_all_by_host(context, host)

Get all volumes belonging to a host.

volume_get_all_by_instance_uuid(context, instance_uuid)

Get all volumes belonging to a instance.

volume_get_all_by_project(context, project_id)

Get all volumes belonging to a project.

volume_get_iscsi_target_num(context, volume_id)

Get the target num (tid) allocated to the volume.

volume_metadata_delete(context, volume_id, key)

Delete the given metadata item.

volume_metadata_get(context, volume_id)

Get all metadata for a volume.

volume_metadata_update(context, volume_id, metadata, delete)

Update metadata if it exists, otherwise create it.

volume_type_create(context, values)

Create a new volume type.

volume_type_destroy(context, name)

Delete a volume type.

volume_type_extra_specs_delete(context, volume_type_id, key)

Delete the given extra specs item.

volume_type_extra_specs_get(context, volume_type_id)

Get all extra specs for a volume type.

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

volume_type_get(context, id)

Get volume type by id.

volume_type_get_all(context, inactive=False)

Get all volume types.

volume_type_get_by_name(context, name)

Get volume type by name.

volume_update(context, volume_id, values)

Set the given properties on an volume and update it.

Raises NotFound if volume does not exist.

The Sqlalchemy Driver

The cinder.db.sqlalchemy.api Module

Implementation of SQLAlchemy backend.

The cinder.db.sqlalchemy.models Module

SQLAlchemy models for cinder data.

class CinderBase

Bases: object

Base class for Cinder Models.

CinderBase.delete(session=None)

Delete this object.

CinderBase.get(key, default=None)
CinderBase.iteritems()

Make the model object behave like a dict.

Includes attributes from joins.

CinderBase.next()
CinderBase.save(session=None)

Save this object.

CinderBase.update(values)

Make the model object behave like a dict

class CinderNode(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a running cinder service on a host.

CinderNode.created_at
CinderNode.deleted
CinderNode.deleted_at
CinderNode.id
CinderNode.service_id
CinderNode.updated_at
class IscsiTarget(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents an iscsi target for a given host

IscsiTarget.created_at
IscsiTarget.deleted
IscsiTarget.deleted_at
IscsiTarget.host
IscsiTarget.id
IscsiTarget.target_num
IscsiTarget.updated_at
IscsiTarget.volume
IscsiTarget.volume_id
class Migration(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a running host-to-host migration.

Migration.created_at
Migration.deleted
Migration.deleted_at
Migration.dest_compute
Migration.dest_host
Migration.id
Migration.instance_uuid
Migration.new_instance_type_id
Migration.old_instance_type_id
Migration.source_compute
Migration.status
Migration.updated_at
class Quota(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

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.

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

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

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.

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

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents the current usage for a given resource.

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

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a resource reservation for quotas.

Reservation.created_at
Reservation.deleted
Reservation.deleted_at
Reservation.delta
Reservation.expire
Reservation.id
Reservation.project_id
Reservation.resource
Reservation.updated_at
Reservation.usage_id
Reservation.uuid
class SMBackendConf(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents the connection to the backend for SM.

SMBackendConf.config_params
SMBackendConf.created_at
SMBackendConf.deleted
SMBackendConf.deleted_at
SMBackendConf.flavor_id
SMBackendConf.id
SMBackendConf.sr_type
SMBackendConf.sr_uuid
SMBackendConf.updated_at
class SMFlavors(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a flavor for SM volumes.

SMFlavors.created_at
SMFlavors.deleted
SMFlavors.deleted_at
SMFlavors.description
SMFlavors.id
SMFlavors.label
SMFlavors.updated_at
class SMVolume(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

SMVolume.backend_id
SMVolume.created_at
SMVolume.deleted
SMVolume.deleted_at
SMVolume.id
SMVolume.updated_at
SMVolume.vdi_uuid
class Service(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a running service on a host.

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

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a block storage device that can be attached to a VM.

Snapshot.created_at
Snapshot.deleted
Snapshot.deleted_at
Snapshot.display_description
Snapshot.display_name
Snapshot.id
Snapshot.name
Snapshot.progress
Snapshot.project_id
Snapshot.status
Snapshot.updated_at
Snapshot.user_id
Snapshot.volume_id
Snapshot.volume_name
Snapshot.volume_size
class Volume(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a block storage device that can be attached to a vm.

Volume.attach_status
Volume.attach_time
Volume.availability_zone
Volume.created_at
Volume.deleted
Volume.deleted_at
Volume.display_description
Volume.display_name
Volume.ec2_id
Volume.host
Volume.id
Volume.instance_uuid
Volume.launched_at
Volume.mountpoint
Volume.name
Volume.project_id
Volume.provider_auth
Volume.provider_location
Volume.scheduled_at
Volume.size
Volume.snapshot_id
Volume.status
Volume.terminated_at
Volume.updated_at
Volume.user_id
Volume.volume_type_id
class VolumeMetadata(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents a metadata key/value pair for a volume

VolumeMetadata.created_at
VolumeMetadata.deleted
VolumeMetadata.deleted_at
VolumeMetadata.id
VolumeMetadata.key
VolumeMetadata.updated_at
VolumeMetadata.value
VolumeMetadata.volume
VolumeMetadata.volume_id
class VolumeTypeExtraSpecs(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represents additional specs as key/value pairs for a volume_type

VolumeTypeExtraSpecs.created_at
VolumeTypeExtraSpecs.deleted
VolumeTypeExtraSpecs.deleted_at
VolumeTypeExtraSpecs.id
VolumeTypeExtraSpecs.key
VolumeTypeExtraSpecs.updated_at
VolumeTypeExtraSpecs.value
VolumeTypeExtraSpecs.volume_type
VolumeTypeExtraSpecs.volume_type_id
class VolumeTypes(**kwargs)

Bases: sqlalchemy.ext.declarative.Base, cinder.db.sqlalchemy.models.CinderBase

Represent possible volume_types of volumes offered

VolumeTypes.created_at
VolumeTypes.deleted
VolumeTypes.deleted_at
VolumeTypes.id
VolumeTypes.name
VolumeTypes.updated_at
VolumeTypes.volumes
register_models()

Register Models and create metadata.

Called from cinder.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.

The cinder.db.sqlalchemy.session Module

Session Handling for SQLAlchemy backend.

get_engine()

Return a SQLAlchemy engine.

get_maker(engine, autocommit=True, expire_on_commit=False)

Return a SQLAlchemy sessionmaker using the given engine.

get_session(autocommit=True, expire_on_commit=False)

Return a SQLAlchemy session.

is_db_connection_error(args)

Return True if error in connecting to db.

ping_listener(dbapi_conn, connection_rec, connection_proxy)

Ensures that MySQL connections checked out of the pool are alive.

Borrowed from: http://groups.google.com/group/sqlalchemy/msg/a4ce563d802c929f

synchronous_switch_listener(dbapi_conn, connection_rec)

Switch sqlite connections to non-synchronous mode

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.