diff --git a/manila/db/api.py b/manila/db/api.py
index da1b360043..ac59b27ab0 100644
--- a/manila/db/api.py
+++ b/manila/db/api.py
@@ -118,15 +118,6 @@ def service_get_all_by_host(context, host):
     return IMPL.service_get_all_by_host(context, host)
 
 
-def service_get_all_volume_sorted(context):
-    """Get all volume services sorted by volume count.
-
-    :returns: a list of (Service, volume_count) tuples.
-
-    """
-    return IMPL.service_get_all_volume_sorted(context)
-
-
 def service_get_all_share_sorted(context):
     """Get all share services sorted by share count.
 
@@ -186,321 +177,6 @@ def migration_get_all_unconfirmed(context, confirm_window):
 ###################
 
 
-def iscsi_target_count_by_host(context, host):
-    """Return count of export devices."""
-    return IMPL.iscsi_target_count_by_host(context, host)
-
-
-def 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.
-
-    """
-    return IMPL.iscsi_target_create_safe(context, values)
-
-
-###############
-
-def volume_allocate_iscsi_target(context, volume_id, host):
-    """Atomically allocate a free iscsi_target from the pool."""
-    return IMPL.volume_allocate_iscsi_target(context, volume_id, host)
-
-
-def volume_attached(context, volume_id, instance_id, mountpoint):
-    """Ensure that a volume is set as attached."""
-    return IMPL.volume_attached(context, volume_id, instance_id, mountpoint)
-
-
-def volume_create(context, values):
-    """Create a volume from the values dictionary."""
-    return IMPL.volume_create(context, values)
-
-
-def volume_data_get_for_host(context, host, session=None):
-    """Get (volume_count, gigabytes) for project."""
-    return IMPL.volume_data_get_for_host(context,
-                                         host,
-                                         session)
-
-
-def volume_data_get_for_project(context, project_id, session=None):
-    """Get (volume_count, gigabytes) for project."""
-    return IMPL.volume_data_get_for_project(context,
-                                            project_id,
-                                            session)
-
-
-def volume_destroy(context, volume_id):
-    """Destroy the volume or raise if it does not exist."""
-    return IMPL.volume_destroy(context, volume_id)
-
-
-def volume_detached(context, volume_id):
-    """Ensure that a volume is set as detached."""
-    return IMPL.volume_detached(context, volume_id)
-
-
-def volume_get(context, volume_id):
-    """Get a volume or raise if it does not exist."""
-    return IMPL.volume_get(context, volume_id)
-
-
-def volume_get_all(context, marker, limit, sort_key, sort_dir):
-    """Get all volumes."""
-    return IMPL.volume_get_all(context, marker, limit, sort_key, sort_dir)
-
-
-def volume_get_all_by_host(context, host):
-    """Get all volumes belonging to a host."""
-    return IMPL.volume_get_all_by_host(context, host)
-
-
-def volume_get_all_by_instance_uuid(context, instance_uuid):
-    """Get all volumes belonging to a instance."""
-    return IMPL.volume_get_all_by_instance_uuid(context, instance_uuid)
-
-
-def volume_get_all_by_project(context, project_id, marker, limit, sort_key,
-                              sort_dir):
-    """Get all volumes belonging to a project."""
-    return IMPL.volume_get_all_by_project(context, project_id, marker, limit,
-                                          sort_key, sort_dir)
-
-
-def volume_get_iscsi_target_num(context, volume_id):
-    """Get the target num (tid) allocated to the volume."""
-    return IMPL.volume_get_iscsi_target_num(context, volume_id)
-
-
-def volume_update(context, volume_id, values):
-    """Set the given properties on an volume and update it.
-
-    Raises NotFound if volume does not exist.
-
-    """
-    return IMPL.volume_update(context, volume_id, values)
-
-
-####################
-
-
-def snapshot_create(context, values):
-    """Create a snapshot from the values dictionary."""
-    return IMPL.snapshot_create(context, values)
-
-
-def snapshot_destroy(context, snapshot_id):
-    """Destroy the snapshot or raise if it does not exist."""
-    return IMPL.snapshot_destroy(context, snapshot_id)
-
-
-def snapshot_get(context, snapshot_id):
-    """Get a snapshot or raise if it does not exist."""
-    return IMPL.snapshot_get(context, snapshot_id)
-
-
-def snapshot_get_all(context):
-    """Get all snapshots."""
-    return IMPL.snapshot_get_all(context)
-
-
-def snapshot_get_all_by_project(context, project_id):
-    """Get all snapshots belonging to a project."""
-    return IMPL.snapshot_get_all_by_project(context, project_id)
-
-
-def snapshot_get_all_for_volume(context, volume_id):
-    """Get all snapshots for a volume."""
-    return IMPL.snapshot_get_all_for_volume(context, volume_id)
-
-
-def snapshot_update(context, snapshot_id, values):
-    """Set the given properties on an snapshot and update it.
-
-    Raises NotFound if snapshot does not exist.
-
-    """
-    return IMPL.snapshot_update(context, snapshot_id, values)
-
-
-def snapshot_data_get_for_project(context, project_id, session=None):
-    """Get count and gigabytes used for snapshots for specified project."""
-    return IMPL.snapshot_data_get_for_project(context,
-                                              project_id,
-                                              session)
-
-
-def snapshot_get_active_by_window(context, begin, end=None, project_id=None):
-    """Get all the snapshots inside the window.
-
-    Specifying a project_id will filter for a certain project."""
-    return IMPL.snapshot_get_active_by_window(context, begin, end, project_id)
-
-
-####################
-
-
-def snapshot_metadata_get(context, snapshot_id):
-    """Get all metadata for a snapshot."""
-    return IMPL.snapshot_metadata_get(context, snapshot_id)
-
-
-def snapshot_metadata_delete(context, snapshot_id, key):
-    """Delete the given metadata item."""
-    IMPL.snapshot_metadata_delete(context, snapshot_id, key)
-
-
-def snapshot_metadata_update(context, snapshot_id, metadata, delete):
-    """Update metadata if it exists, otherwise create it."""
-    IMPL.snapshot_metadata_update(context, snapshot_id, metadata, delete)
-
-
-####################
-
-
-def volume_metadata_get(context, volume_id):
-    """Get all metadata for a volume."""
-    return IMPL.volume_metadata_get(context, volume_id)
-
-
-def volume_metadata_delete(context, volume_id, key):
-    """Delete the given metadata item."""
-    IMPL.volume_metadata_delete(context, volume_id, key)
-
-
-def volume_metadata_update(context, volume_id, metadata, delete):
-    """Update metadata if it exists, otherwise create it."""
-    IMPL.volume_metadata_update(context, volume_id, metadata, delete)
-
-
-##################
-
-
-def volume_type_create(context, values):
-    """Create a new volume type."""
-    return IMPL.volume_type_create(context, values)
-
-
-def volume_type_get_all(context, inactive=False):
-    """Get all volume types."""
-    return IMPL.volume_type_get_all(context, inactive)
-
-
-def volume_type_get(context, id):
-    """Get volume type by id."""
-    return IMPL.volume_type_get(context, id)
-
-
-def volume_type_get_by_name(context, name):
-    """Get volume type by name."""
-    return IMPL.volume_type_get_by_name(context, name)
-
-
-def volume_type_destroy(context, id):
-    """Delete a volume type."""
-    return IMPL.volume_type_destroy(context, id)
-
-
-def 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."""
-    return IMPL.volume_get_active_by_window(context, begin, end, project_id)
-
-
-####################
-
-
-def volume_type_extra_specs_get(context, volume_type_id):
-    """Get all extra specs for a volume type."""
-    return IMPL.volume_type_extra_specs_get(context, volume_type_id)
-
-
-def volume_type_extra_specs_delete(context, volume_type_id, key):
-    """Delete the given extra specs item."""
-    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):
-    """Create or update volume type extra specs. This adds or modifies the
-    key/value pairs specified in the extra specs dict argument"""
-    IMPL.volume_type_extra_specs_update_or_create(context,
-                                                  volume_type_id,
-                                                  extra_specs)
-
-
-###################
-
-
-def volume_glance_metadata_create(context, volume_id, key, value):
-    """Update the Glance metadata for the specified volume."""
-    return IMPL.volume_glance_metadata_create(context,
-                                              volume_id,
-                                              key,
-                                              value)
-
-
-def volume_glance_metadata_get(context, volume_id):
-    """Return the glance metadata for a volume."""
-    return IMPL.volume_glance_metadata_get(context, volume_id)
-
-
-def volume_snapshot_glance_metadata_get(context, snapshot_id):
-    """Return the Glance metadata for the specified snapshot."""
-    return IMPL.volume_snapshot_glance_metadata_get(context, snapshot_id)
-
-
-def volume_glance_metadata_copy_to_snapshot(context, snapshot_id, volume_id):
-    """
-    Update the Glance metadata for a snapshot by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the snapshot will retain the original metadata.
-    """
-    return IMPL.volume_glance_metadata_copy_to_snapshot(context, snapshot_id,
-                                                        volume_id)
-
-
-def volume_glance_metadata_copy_to_volume(context, volume_id, snapshot_id):
-    """
-    Update the Glance metadata from a volume (created from a snapshot) by
-    copying all of the key:value pairs from the originating snapshot. This is
-    so that the Glance metadata from the original volume is retained.
-    """
-    return IMPL.volume_glance_metadata_copy_to_volume(context, volume_id,
-                                                      snapshot_id)
-
-
-def volume_glance_metadata_delete_by_volume(context, volume_id):
-    """Delete the glance metadata for a volume."""
-    return IMPL.volume_glance_metadata_delete_by_volume(context, volume_id)
-
-
-def volume_glance_metadata_delete_by_snapshot(context, snapshot_id):
-    """Delete the glance metadata for a snapshot."""
-    return IMPL.volume_glance_metadata_delete_by_snapshot(context, snapshot_id)
-
-
-def volume_glance_metadata_copy_from_volume_to_volume(context,
-                                                      src_volume_id,
-                                                      volume_id):
-    """
-    Update the Glance metadata for a volume by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the volume (clone) will retain the original metadata.
-    """
-    return IMPL.volume_glance_metadata_copy_from_volume_to_volume(
-        context,
-        src_volume_id,
-        volume_id)
-
-###################
-
-
 def sm_backend_conf_create(context, values):
     """Create a new SM Backend Config entry."""
     return IMPL.sm_backend_conf_create(context, values)
diff --git a/manila/db/sqlalchemy/api.py b/manila/db/sqlalchemy/api.py
index cd7835bc54..414cb352e2 100644
--- a/manila/db/sqlalchemy/api.py
+++ b/manila/db/sqlalchemy/api.py
@@ -37,7 +37,6 @@ from manila import exception
 from manila import flags
 from manila.openstack.common import log as logging
 from manila.openstack.common import timeutils
-from manila.openstack.common import uuidutils
 
 
 FLAGS = flags.FLAGS
@@ -124,34 +123,6 @@ def require_context(f):
     return wrapper
 
 
-def require_volume_exists(f):
-    """Decorator to require the specified volume to exist.
-
-    Requires the wrapped function to use context and volume_id as
-    their first two arguments.
-    """
-
-    def wrapper(context, volume_id, *args, **kwargs):
-        db.volume_get(context, volume_id)
-        return f(context, volume_id, *args, **kwargs)
-    wrapper.__name__ = f.__name__
-    return wrapper
-
-
-def require_snapshot_exists(f):
-    """Decorator to require the specified snapshot to exist.
-
-    Requires the wrapped function to use context and snapshot_id as
-    their first two arguments.
-    """
-
-    def wrapper(context, snapshot_id, *args, **kwargs):
-        db.api.snapshot_get(context, snapshot_id)
-        return f(context, snapshot_id, *args, **kwargs)
-    wrapper.__name__ = f.__name__
-    return wrapper
-
-
 def model_query(context, *args, **kwargs):
     """Query helper that accounts for context's `read_deleted` field.
 
@@ -303,23 +274,6 @@ def _service_get_all_topic_subquery(context, session, topic, subq, label):
         all()
 
 
-@require_admin_context
-def service_get_all_volume_sorted(context):
-    session = get_session()
-    with session.begin():
-        topic = FLAGS.volume_topic
-        label = 'volume_gigabytes'
-        subq = model_query(context, models.Volume.host,
-                           func.sum(models.Volume.size).label(label),
-                           session=session, read_deleted="no").\
-            group_by(models.Volume.host).\
-            subquery()
-        return _service_get_all_topic_subquery(context,
-                                               session,
-                                               topic,
-                                               subq,
-                                               label)
-
 
 @require_admin_context
 def service_get_all_share_sorted(context):
@@ -407,29 +361,6 @@ def _dict_with_extra_specs(inst_type_query):
 ###################
 
 
-@require_admin_context
-def iscsi_target_count_by_host(context, host):
-    return model_query(context, models.IscsiTarget).\
-        filter_by(host=host).\
-        count()
-
-
-@require_admin_context
-def iscsi_target_create_safe(context, values):
-    iscsi_target_ref = models.IscsiTarget()
-
-    for (key, value) in values.iteritems():
-        iscsi_target_ref[key] = value
-    try:
-        iscsi_target_ref.save()
-        return iscsi_target_ref
-    except IntegrityError:
-        return None
-
-
-###################
-
-
 @require_context
 def quota_get(context, project_id, resource, session=None):
     result = model_query(context, models.Quota, session=session,
@@ -910,888 +841,6 @@ def reservation_expire(context):
 ###################
 
 
-@require_admin_context
-def volume_allocate_iscsi_target(context, volume_id, host):
-    session = get_session()
-    with session.begin():
-        iscsi_target_ref = model_query(context, models.IscsiTarget,
-                                       session=session, read_deleted="no").\
-            filter_by(volume=None).\
-            filter_by(host=host).\
-            with_lockmode('update').\
-            first()
-
-        # NOTE(vish): if with_lockmode isn't supported, as in sqlite,
-        #             then this has concurrency issues
-        if not iscsi_target_ref:
-            raise db.NoMoreTargets()
-
-        iscsi_target_ref.volume_id = volume_id
-        session.add(iscsi_target_ref)
-
-    return iscsi_target_ref.target_num
-
-
-@require_admin_context
-def volume_attached(context, volume_id, instance_uuid, mountpoint):
-    if not uuidutils.is_uuid_like(instance_uuid):
-        raise exception.InvalidUUID(uuid=instance_uuid)
-
-    session = get_session()
-    with session.begin():
-        volume_ref = volume_get(context, volume_id, session=session)
-        volume_ref['status'] = 'in-use'
-        volume_ref['mountpoint'] = mountpoint
-        volume_ref['attach_status'] = 'attached'
-        volume_ref['instance_uuid'] = instance_uuid
-        volume_ref.save(session=session)
-
-
-@require_context
-def volume_create(context, values):
-    values['volume_metadata'] = _metadata_refs(values.get('metadata'),
-                                               models.VolumeMetadata)
-    volume_ref = models.Volume()
-    if not values.get('id'):
-        values['id'] = str(uuid.uuid4())
-    volume_ref.update(values)
-
-    session = get_session()
-    with session.begin():
-        volume_ref.save(session=session)
-
-    return volume_get(context, values['id'], session=session)
-
-
-@require_admin_context
-def volume_data_get_for_host(context, host, session=None):
-    result = model_query(context,
-                         func.count(models.Volume.id),
-                         func.sum(models.Volume.size),
-                         read_deleted="no",
-                         session=session).\
-        filter_by(host=host).\
-        first()
-
-    # NOTE(vish): convert None to 0
-    return (result[0] or 0, result[1] or 0)
-
-
-@require_admin_context
-def volume_data_get_for_project(context, project_id, session=None):
-    result = model_query(context,
-                         func.count(models.Volume.id),
-                         func.sum(models.Volume.size),
-                         read_deleted="no",
-                         session=session).\
-        filter_by(project_id=project_id).\
-        first()
-
-    # NOTE(vish): convert None to 0
-    return (result[0] or 0, result[1] or 0)
-
-
-@require_admin_context
-def volume_destroy(context, volume_id):
-    session = get_session()
-    with session.begin():
-        session.query(models.Volume).\
-            filter_by(id=volume_id).\
-            update({'status': 'deleted',
-                    'deleted': True,
-                    'deleted_at': timeutils.utcnow(),
-                    'updated_at': literal_column('updated_at')})
-        session.query(models.IscsiTarget).\
-            filter_by(volume_id=volume_id).\
-            update({'volume_id': None})
-        session.query(models.VolumeMetadata).\
-            filter_by(volume_id=volume_id).\
-            update({'deleted': True,
-                    'deleted_at': timeutils.utcnow(),
-                    'updated_at': literal_column('updated_at')})
-
-
-@require_admin_context
-def volume_detached(context, volume_id):
-    session = get_session()
-    with session.begin():
-        volume_ref = volume_get(context, volume_id, session=session)
-        volume_ref['status'] = 'available'
-        volume_ref['mountpoint'] = None
-        volume_ref['attach_status'] = 'detached'
-        volume_ref['instance_uuid'] = None
-        volume_ref.save(session=session)
-
-
-@require_context
-def _volume_get_query(context, session=None, project_only=False):
-    return model_query(context, models.Volume, session=session,
-                       project_only=project_only).\
-        options(joinedload('volume_metadata')).\
-        options(joinedload('volume_type'))
-
-
-@require_context
-def volume_get(context, volume_id, session=None):
-    result = _volume_get_query(context, session=session, project_only=True).\
-        filter_by(id=volume_id).\
-        first()
-
-    if not result:
-        raise exception.VolumeNotFound(volume_id=volume_id)
-
-    return result
-
-
-@require_admin_context
-def volume_get_all(context, marker, limit, sort_key, sort_dir):
-    query = _volume_get_query(context)
-
-    marker_volume = None
-    if marker is not None:
-        marker_volume = volume_get(context, marker)
-
-    query = sqlalchemyutils.paginate_query(query, models.Volume, limit,
-                                           [sort_key, 'created_at', 'id'],
-                                           marker=marker_volume,
-                                           sort_dir=sort_dir)
-
-    return query.all()
-
-
-@require_admin_context
-def volume_get_all_by_host(context, host):
-    return _volume_get_query(context).filter_by(host=host).all()
-
-
-@require_admin_context
-def volume_get_all_by_instance_uuid(context, instance_uuid):
-    result = model_query(context, models.Volume, read_deleted="no").\
-        options(joinedload('volume_metadata')).\
-        options(joinedload('volume_type')).\
-        filter_by(instance_uuid=instance_uuid).\
-        all()
-
-    if not result:
-        return []
-
-    return result
-
-
-@require_context
-def volume_get_all_by_project(context, project_id, marker, limit, sort_key,
-                              sort_dir):
-    authorize_project_context(context, project_id)
-    query = _volume_get_query(context).filter_by(project_id=project_id)
-
-    marker_volume = None
-    if marker is not None:
-        marker_volume = volume_get(context, marker)
-
-    query = sqlalchemyutils.paginate_query(query, models.Volume, limit,
-                                           [sort_key, 'created_at', 'id'],
-                                           marker=marker_volume,
-                                           sort_dir=sort_dir)
-
-    return query.all()
-
-
-@require_admin_context
-def volume_get_iscsi_target_num(context, volume_id):
-    result = model_query(context, models.IscsiTarget, read_deleted="yes").\
-        filter_by(volume_id=volume_id).\
-        first()
-
-    if not result:
-        raise exception.ISCSITargetNotFoundForVolume(volume_id=volume_id)
-
-    return result.target_num
-
-
-@require_context
-def volume_update(context, volume_id, values):
-    session = get_session()
-    metadata = values.get('metadata')
-    if metadata is not None:
-        volume_metadata_update(context,
-                               volume_id,
-                               values.pop('metadata'),
-                               delete=True)
-    with session.begin():
-        volume_ref = volume_get(context, volume_id, session=session)
-        volume_ref.update(values)
-        volume_ref.save(session=session)
-        return volume_ref
-
-
-####################
-
-def _volume_metadata_get_query(context, volume_id, session=None):
-    return model_query(context, models.VolumeMetadata,
-                       session=session, read_deleted="no").\
-        filter_by(volume_id=volume_id)
-
-
-@require_context
-@require_volume_exists
-def volume_metadata_get(context, volume_id):
-    rows = _volume_metadata_get_query(context, volume_id).all()
-    result = {}
-    for row in rows:
-        result[row['key']] = row['value']
-
-    return result
-
-
-@require_context
-@require_volume_exists
-def volume_metadata_delete(context, volume_id, key):
-    _volume_metadata_get_query(context, volume_id).\
-        filter_by(key=key).\
-        update({'deleted': True,
-                'deleted_at': timeutils.utcnow(),
-                'updated_at': literal_column('updated_at')})
-
-
-@require_context
-@require_volume_exists
-def volume_metadata_get_item(context, volume_id, key, session=None):
-    result = _volume_metadata_get_query(context, volume_id, session=session).\
-        filter_by(key=key).\
-        first()
-
-    if not result:
-        raise exception.VolumeMetadataNotFound(metadata_key=key,
-                                               volume_id=volume_id)
-    return result
-
-
-@require_context
-@require_volume_exists
-def volume_metadata_update(context, volume_id, metadata, delete):
-    session = get_session()
-
-    # Set existing metadata to deleted if delete argument is True
-    if delete:
-        original_metadata = volume_metadata_get(context, volume_id)
-        for meta_key, meta_value in original_metadata.iteritems():
-            if meta_key not in metadata:
-                meta_ref = volume_metadata_get_item(context, volume_id,
-                                                    meta_key, session)
-                meta_ref.update({'deleted': True})
-                meta_ref.save(session=session)
-
-    meta_ref = None
-
-    # Now update all existing items with new values, or create new meta objects
-    for meta_key, meta_value in metadata.items():
-
-        # update the value whether it exists or not
-        item = {"value": meta_value}
-
-        try:
-            meta_ref = volume_metadata_get_item(context, volume_id,
-                                                meta_key, session)
-        except exception.VolumeMetadataNotFound as e:
-            meta_ref = models.VolumeMetadata()
-            item.update({"key": meta_key, "volume_id": volume_id})
-
-        meta_ref.update(item)
-        meta_ref.save(session=session)
-
-    return metadata
-
-
-###################
-
-
-@require_context
-def snapshot_create(context, values):
-    values['snapshot_metadata'] = _metadata_refs(values.get('metadata'),
-                                                 models.SnapshotMetadata)
-    snapshot_ref = models.Snapshot()
-    if not values.get('id'):
-        values['id'] = str(uuid.uuid4())
-    snapshot_ref.update(values)
-
-    session = get_session()
-    with session.begin():
-        snapshot_ref.save(session=session)
-
-    return snapshot_get(context, values['id'], session=session)
-
-
-@require_admin_context
-def snapshot_destroy(context, snapshot_id):
-    session = get_session()
-    with session.begin():
-        session.query(models.Snapshot).\
-            filter_by(id=snapshot_id).\
-            update({'status': 'deleted',
-                    'deleted': True,
-                    'deleted_at': timeutils.utcnow(),
-                    'updated_at': literal_column('updated_at')})
-
-
-@require_context
-def snapshot_get(context, snapshot_id, session=None):
-    result = model_query(context, models.Snapshot, session=session,
-                         project_only=True).\
-        filter_by(id=snapshot_id).\
-        first()
-
-    if not result:
-        raise exception.SnapshotNotFound(snapshot_id=snapshot_id)
-
-    return result
-
-
-@require_admin_context
-def snapshot_get_all(context):
-    return model_query(context, models.Snapshot).all()
-
-
-@require_context
-def snapshot_get_all_for_volume(context, volume_id):
-    return model_query(context, models.Snapshot, read_deleted='no',
-                       project_only=True).\
-        filter_by(volume_id=volume_id).all()
-
-
-@require_context
-def snapshot_get_all_by_project(context, project_id):
-    authorize_project_context(context, project_id)
-    return model_query(context, models.Snapshot).\
-        filter_by(project_id=project_id).\
-        all()
-
-
-@require_context
-def snapshot_data_get_for_project(context, project_id, session=None):
-    authorize_project_context(context, project_id)
-    result = model_query(context,
-                         func.count(models.Snapshot.id),
-                         func.sum(models.Snapshot.volume_size),
-                         read_deleted="no",
-                         session=session).\
-        filter_by(project_id=project_id).\
-        first()
-
-    # NOTE(vish): convert None to 0
-    return (result[0] or 0, result[1] or 0)
-
-
-@require_context
-def snapshot_get_active_by_window(context, begin, end=None, project_id=None):
-    """Return snapshots that were active during window."""
-    session = get_session()
-    query = session.query(models.Snapshot)
-
-    query = query.filter(or_(models.Snapshot.deleted_at == None,
-                             models.Snapshot.deleted_at > begin))
-    if end:
-        query = query.filter(models.Snapshot.created_at < end)
-    if project_id:
-        query = query.filter_by(project_id=project_id)
-
-    return query.all()
-
-
-@require_context
-def snapshot_update(context, snapshot_id, values):
-    session = get_session()
-    with session.begin():
-        snapshot_ref = snapshot_get(context, snapshot_id, session=session)
-        snapshot_ref.update(values)
-        snapshot_ref.save(session=session)
-
-####################
-
-
-def _snapshot_metadata_get_query(context, snapshot_id, session=None):
-    return model_query(context, models.SnapshotMetadata,
-                       session=session, read_deleted="no").\
-        filter_by(snapshot_id=snapshot_id)
-
-
-@require_context
-@require_snapshot_exists
-def snapshot_metadata_get(context, snapshot_id):
-    rows = _snapshot_metadata_get_query(context, snapshot_id).all()
-    result = {}
-    for row in rows:
-        result[row['key']] = row['value']
-
-    return result
-
-
-@require_context
-@require_snapshot_exists
-def snapshot_metadata_delete(context, snapshot_id, key):
-    _snapshot_metadata_get_query(context, snapshot_id).\
-        filter_by(key=key).\
-        update({'deleted': True,
-                'deleted_at': timeutils.utcnow(),
-                'updated_at': literal_column('updated_at')})
-
-
-@require_context
-@require_snapshot_exists
-def snapshot_metadata_get_item(context, snapshot_id, key, session=None):
-    result = _snapshot_metadata_get_query(context,
-                                          snapshot_id,
-                                          session=session).\
-        filter_by(key=key).\
-        first()
-
-    if not result:
-        raise exception.SnapshotMetadataNotFound(metadata_key=key,
-                                                 snapshot_id=snapshot_id)
-    return result
-
-
-@require_context
-@require_snapshot_exists
-def snapshot_metadata_update(context, snapshot_id, metadata, delete):
-    session = get_session()
-
-    # Set existing metadata to deleted if delete argument is True
-    if delete:
-        original_metadata = snapshot_metadata_get(context, snapshot_id)
-        for meta_key, meta_value in original_metadata.iteritems():
-            if meta_key not in metadata:
-                meta_ref = snapshot_metadata_get_item(context, snapshot_id,
-                                                      meta_key, session)
-                meta_ref.update({'deleted': True})
-                meta_ref.save(session=session)
-
-    meta_ref = None
-
-    # Now update all existing items with new values, or create new meta objects
-    for meta_key, meta_value in metadata.items():
-
-        # update the value whether it exists or not
-        item = {"value": meta_value}
-
-        try:
-            meta_ref = snapshot_metadata_get_item(context, snapshot_id,
-                                                  meta_key, session)
-        except exception.SnapshotMetadataNotFound as e:
-            meta_ref = models.SnapshotMetadata()
-            item.update({"key": meta_key, "snapshot_id": snapshot_id})
-
-        meta_ref.update(item)
-        meta_ref.save(session=session)
-
-    return metadata
-
-###################
-
-
-@require_admin_context
-def migration_create(context, values):
-    migration = models.Migration()
-    migration.update(values)
-    migration.save()
-    return migration
-
-
-@require_admin_context
-def migration_update(context, id, values):
-    session = get_session()
-    with session.begin():
-        migration = migration_get(context, id, session=session)
-        migration.update(values)
-        migration.save(session=session)
-        return migration
-
-
-@require_admin_context
-def migration_get(context, id, session=None):
-    result = model_query(context, models.Migration, session=session,
-                         read_deleted="yes").\
-        filter_by(id=id).\
-        first()
-
-    if not result:
-        raise exception.MigrationNotFound(migration_id=id)
-
-    return result
-
-
-@require_admin_context
-def migration_get_by_instance_and_status(context, instance_uuid, status):
-    result = model_query(context, models.Migration, read_deleted="yes").\
-        filter_by(instance_uuid=instance_uuid).\
-        filter_by(status=status).\
-        first()
-
-    if not result:
-        raise exception.MigrationNotFoundByStatus(instance_id=instance_uuid,
-                                                  status=status)
-
-    return result
-
-
-@require_admin_context
-def migration_get_all_unconfirmed(context, confirm_window, session=None):
-    confirm_window = timeutils.utcnow() - datetime.timedelta(
-        seconds=confirm_window)
-
-    return model_query(context, models.Migration, session=session,
-                       read_deleted="yes").\
-        filter(models.Migration.updated_at <= confirm_window).\
-        filter_by(status="finished").\
-        all()
-
-
-##################
-
-
-@require_admin_context
-def volume_type_create(context, values):
-    """Create a new instance type. In order to pass in extra specs,
-    the values dict should contain a 'extra_specs' key/value pair:
-
-    {'extra_specs' : {'k1': 'v1', 'k2': 'v2', ...}}
-
-    """
-    if not values.get('id'):
-        values['id'] = str(uuid.uuid4())
-
-    session = get_session()
-    with session.begin():
-        try:
-            volume_type_get_by_name(context, values['name'], session)
-            raise exception.VolumeTypeExists(id=values['name'])
-        except exception.VolumeTypeNotFoundByName:
-            pass
-        try:
-            volume_type_get(context, values['id'], session)
-            raise exception.VolumeTypeExists(id=values['id'])
-        except exception.VolumeTypeNotFound:
-            pass
-        try:
-            values['extra_specs'] = _metadata_refs(values.get('extra_specs'),
-                                                   models.VolumeTypeExtraSpecs)
-            volume_type_ref = models.VolumeTypes()
-            volume_type_ref.update(values)
-            volume_type_ref.save()
-        except Exception, e:
-            raise exception.DBError(e)
-        return volume_type_ref
-
-
-@require_context
-def volume_type_get_all(context, inactive=False, filters=None):
-    """
-    Returns a dict describing all volume_types with name as key.
-    """
-    filters = filters or {}
-
-    read_deleted = "yes" if inactive else "no"
-    rows = model_query(context, models.VolumeTypes,
-                       read_deleted=read_deleted).\
-        options(joinedload('extra_specs')).\
-        order_by("name").\
-        all()
-
-    # TODO(sirp): this patern of converting rows to a result with extra_specs
-    # is repeated quite a bit, might be worth creating a method for it
-    result = {}
-    for row in rows:
-        result[row['name']] = _dict_with_extra_specs(row)
-
-    return result
-
-
-@require_context
-def volume_type_get(context, id, session=None):
-    """Returns a dict describing specific volume_type"""
-    result = model_query(context, models.VolumeTypes, session=session).\
-        options(joinedload('extra_specs')).\
-        filter_by(id=id).\
-        first()
-
-    if not result:
-        raise exception.VolumeTypeNotFound(volume_type_id=id)
-
-    return _dict_with_extra_specs(result)
-
-
-@require_context
-def volume_type_get_by_name(context, name, session=None):
-    """Returns a dict describing specific volume_type"""
-    result = model_query(context, models.VolumeTypes, session=session).\
-        options(joinedload('extra_specs')).\
-        filter_by(name=name).\
-        first()
-
-    if not result:
-        raise exception.VolumeTypeNotFoundByName(volume_type_name=name)
-    else:
-        return _dict_with_extra_specs(result)
-
-
-@require_admin_context
-def volume_type_destroy(context, id):
-    volume_type_get(context, id)
-
-    session = get_session()
-    with session.begin():
-        session.query(models.VolumeTypes).\
-            filter_by(id=id).\
-            update({'deleted': True,
-                    'deleted_at': timeutils.utcnow(),
-                    'updated_at': literal_column('updated_at')})
-        session.query(models.VolumeTypeExtraSpecs).\
-            filter_by(volume_type_id=id).\
-            update({'deleted': True,
-                    'deleted_at': timeutils.utcnow(),
-                    'updated_at': literal_column('updated_at')})
-
-
-@require_context
-def volume_get_active_by_window(context,
-                                begin,
-                                end=None,
-                                project_id=None):
-    """Return volumes that were active during window."""
-    session = get_session()
-    query = session.query(models.Volume)
-
-    query = query.filter(or_(models.Volume.deleted_at == None,
-                             models.Volume.deleted_at > begin))
-    if end:
-        query = query.filter(models.Volume.created_at < end)
-    if project_id:
-        query = query.filter_by(project_id=project_id)
-
-    return query.all()
-
-
-####################
-
-
-def _volume_type_extra_specs_query(context, volume_type_id, session=None):
-    return model_query(context, models.VolumeTypeExtraSpecs, session=session,
-                       read_deleted="no").\
-        filter_by(volume_type_id=volume_type_id)
-
-
-@require_context
-def volume_type_extra_specs_get(context, volume_type_id):
-    rows = _volume_type_extra_specs_query(context, volume_type_id).\
-        all()
-
-    result = {}
-    for row in rows:
-        result[row['key']] = row['value']
-
-    return result
-
-
-@require_context
-def volume_type_extra_specs_delete(context, volume_type_id, key):
-    _volume_type_extra_specs_query(context, volume_type_id).\
-        filter_by(key=key).\
-        update({'deleted': True,
-                'deleted_at': timeutils.utcnow(),
-                'updated_at': literal_column('updated_at')})
-
-
-@require_context
-def volume_type_extra_specs_get_item(context, volume_type_id, key,
-                                     session=None):
-    result = _volume_type_extra_specs_query(
-        context, volume_type_id, session=session).\
-        filter_by(key=key).\
-        first()
-
-    if not result:
-        raise exception.VolumeTypeExtraSpecsNotFound(
-            extra_specs_key=key,
-            volume_type_id=volume_type_id)
-
-    return result
-
-
-@require_context
-def volume_type_extra_specs_update_or_create(context, volume_type_id,
-                                             specs):
-    session = get_session()
-    spec_ref = None
-    for key, value in specs.iteritems():
-        try:
-            spec_ref = volume_type_extra_specs_get_item(
-                context, volume_type_id, key, session)
-        except exception.VolumeTypeExtraSpecsNotFound, e:
-            spec_ref = models.VolumeTypeExtraSpecs()
-        spec_ref.update({"key": key, "value": value,
-                         "volume_type_id": volume_type_id,
-                         "deleted": False})
-        spec_ref.save(session=session)
-    return specs
-
-
-####################
-
-
-@require_context
-@require_volume_exists
-def volume_glance_metadata_get(context, volume_id, session=None):
-    """Return the Glance metadata for the specified volume."""
-    if not session:
-        session = get_session()
-
-    return session.query(models.VolumeGlanceMetadata).\
-        filter_by(volume_id=volume_id).\
-        filter_by(deleted=False).all()
-
-
-@require_context
-@require_snapshot_exists
-def volume_snapshot_glance_metadata_get(context, snapshot_id, session=None):
-    """Return the Glance metadata for the specified snapshot."""
-    if not session:
-        session = get_session()
-
-    return session.query(models.VolumeGlanceMetadata).\
-        filter_by(snapshot_id=snapshot_id).\
-        filter_by(deleted=False).all()
-
-
-@require_context
-@require_volume_exists
-def volume_glance_metadata_create(context, volume_id, key, value,
-                                  session=None):
-    """
-    Update the Glance metadata for a volume by adding a new key:value pair.
-    This API does not support changing the value of a key once it has been
-    created.
-    """
-    if session is None:
-        session = get_session()
-
-    with session.begin():
-        rows = session.query(models.VolumeGlanceMetadata).\
-            filter_by(volume_id=volume_id).\
-            filter_by(key=key).\
-            filter_by(deleted=False).all()
-
-        if len(rows) > 0:
-            raise exception.GlanceMetadataExists(key=key,
-                                                 volume_id=volume_id)
-
-        vol_glance_metadata = models.VolumeGlanceMetadata()
-        vol_glance_metadata.volume_id = volume_id
-        vol_glance_metadata.key = key
-        vol_glance_metadata.value = value
-
-        vol_glance_metadata.save(session=session)
-
-    return
-
-
-@require_context
-@require_snapshot_exists
-def volume_glance_metadata_copy_to_snapshot(context, snapshot_id, volume_id,
-                                            session=None):
-    """
-    Update the Glance metadata for a snapshot by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the snapshot will retain the original metadata.
-    """
-    if session is None:
-        session = get_session()
-
-    metadata = volume_glance_metadata_get(context, volume_id, session=session)
-    with session.begin():
-        for meta in metadata:
-            vol_glance_metadata = models.VolumeGlanceMetadata()
-            vol_glance_metadata.snapshot_id = snapshot_id
-            vol_glance_metadata.key = meta['key']
-            vol_glance_metadata.value = meta['value']
-
-            vol_glance_metadata.save(session=session)
-
-
-@require_context
-@require_volume_exists
-def volume_glance_metadata_copy_from_volume_to_volume(context,
-                                                      src_volume_id,
-                                                      volume_id,
-                                                      session=None):
-    """
-    Update the Glance metadata for a volume by copying all of the key:value
-    pairs from the originating volume. This is so that a volume created from
-    the volume (clone) will retain the original metadata.
-    """
-    if session is None:
-        session = get_session()
-
-    metadata = volume_glance_metadata_get(context,
-                                          src_volume_id,
-                                          session=session)
-    with session.begin():
-        for meta in metadata:
-            vol_glance_metadata = models.VolumeGlanceMetadata()
-            vol_glance_metadata.volume_id = volume_id
-            vol_glance_metadata.key = meta['key']
-            vol_glance_metadata.value = meta['value']
-
-            vol_glance_metadata.save(session=session)
-
-
-@require_context
-@require_volume_exists
-def volume_glance_metadata_copy_to_volume(context, volume_id, snapshot_id,
-                                          session=None):
-    """
-    Update the Glance metadata from a volume (created from a snapshot) by
-    copying all of the key:value pairs from the originating snapshot. This is
-    so that the Glance metadata from the original volume is retained.
-    """
-    if session is None:
-        session = get_session()
-
-    metadata = volume_snapshot_glance_metadata_get(context, snapshot_id,
-                                                   session=session)
-    with session.begin():
-        for meta in metadata:
-            vol_glance_metadata = models.VolumeGlanceMetadata()
-            vol_glance_metadata.volume_id = volume_id
-            vol_glance_metadata.key = meta['key']
-            vol_glance_metadata.value = meta['value']
-
-            vol_glance_metadata.save(session=session)
-
-
-@require_context
-def volume_glance_metadata_delete_by_volume(context, volume_id):
-    session = get_session()
-    session.query(models.VolumeGlanceMetadata).\
-        filter_by(volume_id=volume_id).\
-        filter_by(deleted=False).\
-        update({'deleted': True,
-                'deleted_at': timeutils.utcnow(),
-                'updated_at': literal_column('updated_at')})
-
-
-@require_context
-def volume_glance_metadata_delete_by_snapshot(context, snapshot_id):
-    session = get_session()
-    session.query(models.VolumeGlanceMetadata).\
-        filter_by(snapshot_id=snapshot_id).\
-        filter_by(deleted=False).\
-        update({'deleted': True,
-                'deleted_at': timeutils.utcnow(),
-                'updated_at': literal_column('updated_at')})
-
-
-####################
-
-
 @require_admin_context
 def sm_backend_conf_create(context, values):
     backend_conf = models.SMBackendConf()