DB cleaned

This commit is contained in:
Yulia Portnova 2013-09-03 11:14:00 +03:00
parent 439855f1e8
commit 1dde8fb5cf
6 changed files with 16 additions and 445 deletions

@ -17,7 +17,7 @@
# License for the specific language governing permissions and limitations
# under the License.
"""
DB abstraction for Cinder
DB abstraction for Manila
"""
from manila.db.api import *

@ -56,9 +56,6 @@ db_opts = [
cfg.BoolOpt('enable_new_services',
default=True,
help='Services to be added to the available pool on create'),
cfg.StrOpt('volume_name_template',
default='volume-%s',
help='Template string to be used to generate volume names'),
cfg.StrOpt('share_name_template',
default='share-%s',
help='Template string to be used to generate share names'),
@ -80,11 +77,6 @@ IMPL = utils.LazyPluggable('db_backend',
sqlalchemy='manila.db.sqlalchemy.api')
class NoMoreTargets(exception.CinderException):
"""No more available targets"""
pass
###################
@ -174,97 +166,9 @@ def migration_get_all_unconfirmed(context, confirm_window):
return IMPL.migration_get_all_unconfirmed(context, confirm_window)
###################
def sm_backend_conf_create(context, values):
"""Create a new SM Backend Config entry."""
return IMPL.sm_backend_conf_create(context, values)
def sm_backend_conf_update(context, sm_backend_conf_id, values):
"""Update a SM Backend Config entry."""
return IMPL.sm_backend_conf_update(context, sm_backend_conf_id, values)
def sm_backend_conf_delete(context, sm_backend_conf_id):
"""Delete a SM Backend Config."""
return IMPL.sm_backend_conf_delete(context, sm_backend_conf_id)
def sm_backend_conf_get(context, sm_backend_conf_id):
"""Get a specific SM Backend Config."""
return IMPL.sm_backend_conf_get(context, sm_backend_conf_id)
def sm_backend_conf_get_by_sr(context, sr_uuid):
"""Get a specific SM Backend Config."""
return IMPL.sm_backend_conf_get_by_sr(context, sr_uuid)
def sm_backend_conf_get_all(context):
"""Get all SM Backend Configs."""
return IMPL.sm_backend_conf_get_all(context)
####################
def sm_flavor_create(context, values):
"""Create a new SM Flavor entry."""
return IMPL.sm_flavor_create(context, values)
def sm_flavor_update(context, sm_flavor_id, values):
"""Update a SM Flavor entry."""
return IMPL.sm_flavor_update(context, values)
def sm_flavor_delete(context, sm_flavor_id):
"""Delete a SM Flavor."""
return IMPL.sm_flavor_delete(context, sm_flavor_id)
def sm_flavor_get(context, sm_flavor):
"""Get a specific SM Flavor."""
return IMPL.sm_flavor_get(context, sm_flavor)
def sm_flavor_get_all(context):
"""Get all SM Flavors."""
return IMPL.sm_flavor_get_all(context)
####################
def sm_volume_create(context, values):
"""Create a new child Zone entry."""
return IMPL.sm_volume_create(context, values)
def sm_volume_update(context, volume_id, values):
"""Update a child Zone entry."""
return IMPL.sm_volume_update(context, values)
def sm_volume_delete(context, volume_id):
"""Delete a child Zone."""
return IMPL.sm_volume_delete(context, volume_id)
def sm_volume_get(context, volume_id):
"""Get a specific child Zone."""
return IMPL.sm_volume_get(context, volume_id)
def sm_volume_get_all(context):
"""Get all child Zones."""
return IMPL.sm_volume_get_all(context)
###################
def quota_create(context, project_id, resource, limit):
"""Create a quota for the given project and resource."""
return IMPL.quota_create(context, project_id, resource, limit)
@ -403,48 +307,6 @@ def reservation_expire(context):
###################
def backup_get(context, backup_id):
"""Get a backup or raise if it does not exist."""
return IMPL.backup_get(context, backup_id)
def backup_get_all(context):
"""Get all backups."""
return IMPL.backup_get_all(context)
def backup_get_all_by_host(context, host):
"""Get all backups belonging to a host."""
return IMPL.backup_get_all_by_host(context, host)
def backup_create(context, values):
"""Create a backup from the values dictionary."""
return IMPL.backup_create(context, values)
def backup_get_all_by_project(context, project_id):
"""Get all backups belonging to a project."""
return IMPL.backup_get_all_by_project(context, project_id)
def backup_update(context, backup_id, values):
"""
Set the given properties on a backup and update it.
Raises NotFound if backup does not exist.
"""
return IMPL.backup_update(context, backup_id, values)
def backup_destroy(context, backup_id):
"""Destroy the backup or raise if it does not exist."""
return IMPL.backup_destroy(context, backup_id)
####################
def share_create(context, values):
"""Create new share."""
return IMPL.share_create(context, values)

@ -328,39 +328,6 @@ def service_update(context, service_id, values):
###################
def _metadata_refs(metadata_dict, meta_class):
metadata_refs = []
if metadata_dict:
for k, v in metadata_dict.iteritems():
metadata_ref = meta_class()
metadata_ref['key'] = k
metadata_ref['value'] = v
metadata_refs.append(metadata_ref)
return metadata_refs
def _dict_with_extra_specs(inst_type_query):
"""Takes an instance, volume, or instance type query returned
by sqlalchemy and returns it as a dictionary, converting the
extra_specs entry from a list of dicts:
'extra_specs' : [{'key': 'k1', 'value': 'v1', ...}, ...]
to a single dict:
'extra_specs' : {'k1': 'v1'}
"""
inst_type_dict = dict(inst_type_query)
extra_specs = dict([(x['key'], x['value'])
for x in inst_type_query['extra_specs']])
inst_type_dict['extra_specs'] = extra_specs
return inst_type_dict
###################
@require_context
def quota_get(context, project_id, resource, session=None):
result = model_query(context, models.Quota, session=session,
@ -838,238 +805,6 @@ def reservation_expire(context):
reservation.delete(session=session)
###################
@require_admin_context
def sm_backend_conf_create(context, values):
backend_conf = models.SMBackendConf()
backend_conf.update(values)
backend_conf.save()
return backend_conf
@require_admin_context
def sm_backend_conf_update(context, sm_backend_id, values):
session = get_session()
with session.begin():
backend_conf = model_query(context, models.SMBackendConf,
session=session,
read_deleted="yes").\
filter_by(id=sm_backend_id).\
first()
if not backend_conf:
raise exception.NotFound(
_("No backend config with id %(sm_backend_id)s") % locals())
backend_conf.update(values)
backend_conf.save(session=session)
return backend_conf
@require_admin_context
def sm_backend_conf_delete(context, sm_backend_id):
# FIXME(sirp): for consistency, shouldn't this just mark as deleted with
# `purge` actually deleting the record?
session = get_session()
with session.begin():
model_query(context, models.SMBackendConf, session=session,
read_deleted="yes").\
filter_by(id=sm_backend_id).\
delete()
@require_admin_context
def sm_backend_conf_get(context, sm_backend_id):
result = model_query(context, models.SMBackendConf, read_deleted="yes").\
filter_by(id=sm_backend_id).\
first()
if not result:
raise exception.NotFound(_("No backend config with id "
"%(sm_backend_id)s") % locals())
return result
@require_admin_context
def sm_backend_conf_get_by_sr(context, sr_uuid):
return model_query(context, models.SMBackendConf, read_deleted="yes").\
filter_by(sr_uuid=sr_uuid).\
first()
@require_admin_context
def sm_backend_conf_get_all(context):
return model_query(context, models.SMBackendConf, read_deleted="yes").\
all()
####################
def _sm_flavor_get_query(context, sm_flavor_label, session=None):
return model_query(context, models.SMFlavors, session=session,
read_deleted="yes").\
filter_by(label=sm_flavor_label)
@require_admin_context
def sm_flavor_create(context, values):
sm_flavor = models.SMFlavors()
sm_flavor.update(values)
sm_flavor.save()
return sm_flavor
@require_admin_context
def sm_flavor_update(context, sm_flavor_label, values):
sm_flavor = sm_flavor_get(context, sm_flavor_label)
sm_flavor.update(values)
sm_flavor.save()
return sm_flavor
@require_admin_context
def sm_flavor_delete(context, sm_flavor_label):
session = get_session()
with session.begin():
_sm_flavor_get_query(context, sm_flavor_label).delete()
@require_admin_context
def sm_flavor_get(context, sm_flavor_label):
result = _sm_flavor_get_query(context, sm_flavor_label).first()
if not result:
raise exception.NotFound(
_("No sm_flavor called %(sm_flavor)s") % locals())
return result
@require_admin_context
def sm_flavor_get_all(context):
return model_query(context, models.SMFlavors, read_deleted="yes").all()
###############################
def _sm_volume_get_query(context, volume_id, session=None):
return model_query(context, models.SMVolume, session=session,
read_deleted="yes").\
filter_by(id=volume_id)
def sm_volume_create(context, values):
sm_volume = models.SMVolume()
sm_volume.update(values)
sm_volume.save()
return sm_volume
def sm_volume_update(context, volume_id, values):
sm_volume = sm_volume_get(context, volume_id)
sm_volume.update(values)
sm_volume.save()
return sm_volume
def sm_volume_delete(context, volume_id):
session = get_session()
with session.begin():
_sm_volume_get_query(context, volume_id, session=session).delete()
def sm_volume_get(context, volume_id):
result = _sm_volume_get_query(context, volume_id).first()
if not result:
raise exception.NotFound(
_("No sm_volume with id %(volume_id)s") % locals())
return result
def sm_volume_get_all(context):
return model_query(context, models.SMVolume, read_deleted="yes").all()
###############################
@require_context
def backup_get(context, backup_id, session=None):
result = model_query(context, models.Backup,
session=session, project_only=True).\
filter_by(id=backup_id).\
first()
if not result:
raise exception.BackupNotFound(backup_id=backup_id)
return result
@require_admin_context
def backup_get_all(context):
return model_query(context, models.Backup).all()
@require_admin_context
def backup_get_all_by_host(context, host):
return model_query(context, models.Backup).filter_by(host=host).all()
@require_context
def backup_get_all_by_project(context, project_id):
authorize_project_context(context, project_id)
return model_query(context, models.Backup).\
filter_by(project_id=project_id).all()
@require_context
def backup_create(context, values):
backup = models.Backup()
if not values.get('id'):
values['id'] = str(uuid.uuid4())
backup.update(values)
backup.save()
return backup
@require_context
def backup_update(context, backup_id, values):
session = get_session()
with session.begin():
backup = model_query(context, models.Backup,
session=session, read_deleted="yes").\
filter_by(id=backup_id).first()
if not backup:
raise exception.BackupNotFound(
_("No backup with id %(backup_id)s") % locals())
backup.update(values)
backup.save(session=session)
return backup
@require_admin_context
def backup_destroy(context, backup_id):
session = get_session()
with session.begin():
session.query(models.Backup).\
filter_by(id=backup_id).\
update({'status': 'deleted',
'deleted': True,
'deleted_at': timeutils.utcnow(),
'updated_at': literal_column('updated_at')})
################

@ -1,7 +1,7 @@
[db_settings]
# Used to identify which repository this database is versioned under.
# You can use the name of your project.
repository_id=cinder
repository_id=manila
# The name of the database table used to track the schema version.
# This name shouldn't already be used by your project.

@ -106,4 +106,4 @@ def upgrade(migrate_engine):
def downgrade(migrate_engine):
LOG.exception(_('Downgrade from initial Cinder install is unsupported.'))
LOG.exception(_('Downgrade from initial Manila install is unsupported.'))

@ -18,7 +18,7 @@
# License for the specific language governing permissions and limitations
# under the License.
"""
SQLAlchemy models for manila data.
SQLAlchemy models for Manila data.
"""
from sqlalchemy import Column, Integer, String, Text, schema
@ -38,8 +38,8 @@ FLAGS = flags.FLAGS
BASE = declarative_base()
class CinderBase(object):
"""Base class for Cinder Models."""
class ManilaBase(object):
"""Base class for Manila Models."""
__table_args__ = {'mysql_engine': 'InnoDB'}
__table_initialized__ = False
created_at = Column(DateTime, default=timeutils.utcnow)
@ -100,7 +100,7 @@ class CinderBase(object):
return local.iteritems()
class Service(BASE, CinderBase):
class Service(BASE, ManilaBase):
"""Represents a running service on a host."""
__tablename__ = 'services'
@ -113,7 +113,7 @@ class Service(BASE, CinderBase):
availability_zone = Column(String(255), default='manila')
class ManilaNode(BASE, CinderBase):
class ManilaNode(BASE, ManilaBase):
"""Represents a running manila service on a host."""
__tablename__ = 'manila_nodes'
@ -121,7 +121,7 @@ class ManilaNode(BASE, CinderBase):
service_id = Column(Integer, ForeignKey('services.id'), nullable=True)
class Quota(BASE, CinderBase):
class Quota(BASE, ManilaBase):
"""Represents a single quota override for a project.
If there is no row for a given project id and resource, then the
@ -140,7 +140,7 @@ class Quota(BASE, CinderBase):
hard_limit = Column(Integer, nullable=True)
class QuotaClass(BASE, CinderBase):
class QuotaClass(BASE, ManilaBase):
"""Represents a single quota override for a quota class.
If there is no row for a given quota class and resource, then the
@ -157,7 +157,7 @@ class QuotaClass(BASE, CinderBase):
hard_limit = Column(Integer, nullable=True)
class QuotaUsage(BASE, CinderBase):
class QuotaUsage(BASE, ManilaBase):
"""Represents the current usage for a given resource."""
__tablename__ = 'quota_usages'
@ -176,7 +176,7 @@ class QuotaUsage(BASE, CinderBase):
until_refresh = Column(Integer, nullable=True)
class Reservation(BASE, CinderBase):
class Reservation(BASE, ManilaBase):
"""Represents a resource reservation for quotas."""
__tablename__ = 'reservations'
@ -192,7 +192,7 @@ class Reservation(BASE, CinderBase):
expire = Column(DateTime, nullable=False)
class Migration(BASE, CinderBase):
class Migration(BASE, ManilaBase):
"""Represents a running host-to-host migration."""
__tablename__ = 'migrations'
id = Column(Integer, primary_key=True, nullable=False)
@ -210,33 +210,7 @@ class Migration(BASE, CinderBase):
status = Column(String(255))
class Backup(BASE, CinderBase):
"""Represents a backup of a volume to Swift."""
__tablename__ = 'backups'
id = Column(String(36), primary_key=True)
@property
def name(self):
return FLAGS.backup_name_template % self.id
user_id = Column(String(255), nullable=False)
project_id = Column(String(255), nullable=False)
volume_id = Column(String(36), nullable=False)
host = Column(String(255))
availability_zone = Column(String(255))
display_name = Column(String(255))
display_description = Column(String(255))
container = Column(String(255))
status = Column(String(255))
fail_reason = Column(String(255))
service_metadata = Column(String(255))
service = Column(String(255))
size = Column(Integer)
object_count = Column(Integer)
class Share(BASE, CinderBase):
class Share(BASE, ManilaBase):
"""Represents an NFS and CIFS shares."""
__tablename__ = 'shares'
@ -261,7 +235,7 @@ class Share(BASE, CinderBase):
export_location = Column(String(255))
class ShareAccessMapping(BASE, CinderBase):
class ShareAccessMapping(BASE, ManilaBase):
"""Represents access to NFS."""
STATE_NEW = 'new'
STATE_ACTIVE = 'active'
@ -279,7 +253,7 @@ class ShareAccessMapping(BASE, CinderBase):
default=STATE_NEW)
class ShareSnapshot(BASE, CinderBase):
class ShareSnapshot(BASE, ManilaBase):
"""Represents a snapshot of a share."""
__tablename__ = 'share_snapshots'