Manila/docs/db

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
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/manila/manila.sqlite. enable_new_services: when adding a new service to the database, is it in the pool of available hardware (Default: True)

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, project_id=None)
 * 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_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.

reservation_commit(context, reservations, project_id=None)
 * 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, project_id=None)
 * 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_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_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_get(context, share_id)
 * Get share by id.

share_get_all(context)
 * Get all shares.

share_get_all_by_host(context, host)
 * Returns all shares with given host.

share_get_all_by_share_server(context, share_server_id)
 * Returns all shares with given share server.

share_get_all_by_project(context, project_id)
 * Returns all shares with given project ID.

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)
 * Get all snapshots.

share_snapshot_get_all_by_project(context, project_id)
 * Get all snapshots belonging to a project.

share_snapshot_get_all_for_share(context, share_id)
 * 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_update(context, share_id, values)
 * Update share fields.

snapshot_data_get_for_project(context, project_id, session=None)
 * Get (snapshot_count, gigabytes) for project.

share_server_create(context, values)
 * Create share server DB record.

share_server_delete(context, id)
 * Delete share server DB record.

share_server_update(context, id, values)
 * Update share server DB record.

share_server_get(context, id, session=None)
 * Get share server DB record by ID.

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_get_all(context)
 * Get all share server DB records.

share_server_backend_details_set(context, share_server_id, server_details)
 * Create DB record with backend details.

share_server_backend_details_get(context, share_server_id)
 * Get all backend details records for share server.

The manila.db.sqlalchemy.api Module
Implementation of SQLAlchemy backend. The manila.db.sqlalchemy.models Module

SQLAlchemy models for Manila data
class ManilaBase
 * Bases: object
 * Base class for Manila Models.


 * ManilaBase.created_at = Column(None, DateTime, table=None, default=ColumnDefault())
 * ManilaBase.delete(session=None)
 * Delete this object.
 * ManilaBase.deleted = Column(None, Boolean, table=None, default=ColumnDefault(False))
 * ManilaBase.deleted_at = Column(None, DateTime, table=None)
 * ManilaBase.get(key, default=None)
 * ManilaBase.iteritems
 * Make the model object behave like a dict.
 * Includes attributes from joins.
 * ManilaBase.metadata = None
 * ManilaBase.next
 * ManilaBase.save(session=None)
 * Save this object.
 * ManilaBase.update(values)
 * Make the model object behave like a dict.
 * ManilaBase.updated_at = Column(None, DateTime, table=None, onupdate=ColumnDefault())

class ManilaNode(**kwargs)


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


 * Represents a running manila service on a host.


 * ManilaNode.created_at None
 * ManilaNode.deleted None
 * ManilaNode.deleted_at None
 * ManilaNode.id None
 * ManilaNode.service_id None
 * ManilaNode.updated_at None

class Migration(**kwargs)


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


 * Represents a running host-to-host migration.


 * Migration.created_at None
 * Migration.deleted None
 * Migration.deleted_at None
 * Migration.dest_compute None
 * Migration.dest_host None
 * Migration.id None
 * Migration.instance_uuid None
 * Migration.new_instance_type_id None
 * Migration.old_instance_type_id None
 * Migration.source_compute None
 * Migration.status None
 * Migration.updated_at None

class Quota(**kwargs)


 * Bases: sqlalchemy.ext.declarative.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.


 * Quota.created_at None
 * Quota.deleted None
 * Quota.deleted_at None
 * Quota.hard_limit None
 * Quota.id None
 * Quota.project_id None
 * Quota.resource None
 * Quota.updated_at None

class QuotaClass(**kwargs)


 * Bases: sqlalchemy.ext.declarative.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.


 * QuotaClass.class_name None
 * QuotaClass.created_at None
 * QuotaClass.deleted None
 * QuotaClass.deleted_at None
 * QuotaClass.hard_limit None
 * QuotaClass.id None
 * QuotaClass.resource None
 * QuotaClass.updated_at None

class QuotaUsage(**kwargs)


 * Bases: sqlalchemy.ext.declarative.Base, manila.db.sqlalchemy.models.ManilaBase
 * Represents the current usage for a given resource.


 * QuotaUsage.created_at None
 * QuotaUsage.deleted None
 * QuotaUsage.deleted_at None
 * QuotaUsage.id None
 * QuotaUsage.in_use None
 * QuotaUsage.project_id None
 * QuotaUsage.reserved None
 * QuotaUsage.resource None
 * QuotaUsage.total None
 * QuotaUsage.until_refresh None
 * QuotaUsage.updated_at None

class Reservation(**kwargs)


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


 * Represents a resource reservation for quotas.


 * Reservation.created_at None
 * Reservation.deleted None
 * Reservation.deleted_at None
 * Reservation.delta None
 * Reservation.expire None
 * Reservation.id None
 * Reservation.project_id None
 * Reservation.resource None
 * Reservation.updated_at None
 * Reservation.usage_id None
 * Reservation.uuid None

class Service(**kwargs)


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


 * Represents a running service on a host.


 * Service.availability_zone None
 * Service.binary None
 * Service.created_at None
 * Service.deleted None
 * Service.deleted_at None
 * Service.disabled None
 * Service.host None None
 * Service.id None
 * Service.report_count None
 * Service.topic None
 * Service.updated_at None

class Share(**kwargs)


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


 * Represents an NFS and CIFS shares.


 * Share.availability_zone None
 * Share.created_at None
 * Share.deleted None
 * Share.deleted_at None
 * Share.display_description None
 * Share.display_name None
 * Share.export_location None
 * Share.host None
 * Share.id None
 * Share.launched_at None
 * Share.name None
 * Share.project_id None
 * Share.scheduled_at None
 * Share.share_proto None
 * Share.size None
 * Share.snapshot_id None
 * Share.status None
 * Share.terminated_at None
 * Share.updated_at None
 * Share.user_id None

class ShareAccessMapping(**kwargs)


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


 * Represents access to NFS.


 * ShareAccessMapping.STATE_ACTIVE = 'active'
 * ShareAccessMapping.STATE_DELETED = 'deleted'
 * ShareAccessMapping.STATE_DELETING = 'deleting'
 * ShareAccessMapping.STATE_ERROR = 'error'
 * ShareAccessMapping.STATE_NEW = 'new'
 * ShareAccessMapping.access_to None
 * ShareAccessMapping.access_type None
 * ShareAccessMapping.created_at None
 * ShareAccessMapping.deleted None
 * ShareAccessMapping.deleted_at None
 * ShareAccessMapping.id None
 * ShareAccessMapping.share_id None
 * ShareAccessMapping.state None
 * ShareAccessMapping.updated_at None

class ShareSnapshot(**kwargs)


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


 * Represents a snapshot of a share.


 * ShareSnapshot.created_at None
 * ShareSnapshot.deleted None
 * ShareSnapshot.deleted_at None
 * ShareSnapshot.display_description None
 * ShareSnapshot.display_name None
 * ShareSnapshot.export_location None
 * ShareSnapshot.id None
 * ShareSnapshot.name None
 * ShareSnapshot.progress None
 * ShareSnapshot.project_id None
 * ShareSnapshot.share None
 * ShareSnapshot.share_id None
 * ShareSnapshot.share_name None
 * ShareSnapshot.share_proto None
 * ShareSnapshot.share_size None
 * ShareSnapshot.size None
 * ShareSnapshot.status None
 * ShareSnapshot.updated_at None
 * ShareSnapshot.user_id None

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.

The manila.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.