Merge "Fix 033 add encryption unique key migration"

This commit is contained in:
Jenkins 2015-08-17 18:05:43 +00:00 committed by Gerrit Code Review
commit b4794620fb
2 changed files with 67 additions and 34 deletions

View File

@ -13,8 +13,8 @@
import uuid
from migrate import PrimaryKeyConstraint, ForeignKeyConstraint
from sqlalchemy import Column
from sqlalchemy import MetaData, String, Table
from sqlalchemy import Column, MetaData, Table
from sqlalchemy import String, Integer, Boolean, DateTime
def upgrade(migrate_engine):
@ -24,6 +24,10 @@ def upgrade(migrate_engine):
encryptions = Table('encryption', meta, autoload=True)
# NOTE: SQLite doesn't support 'drop constraint' statament
if migrate_engine.name == 'sqlite':
_upgrade_sqlite(meta, encryptions)
else:
encryption_id_column_kwargs = {}
if migrate_engine.name == 'ibm_db_sa':
# NOTE(junxiebj): DB2 10.5 doesn't support primary key
@ -50,16 +54,9 @@ def upgrade(migrate_engine):
volume_type_fk = ForeignKeyConstraint(**params)
volume_type_fk.drop()
try:
volume_type_pk = PrimaryKeyConstraint('volume_type_id',
table=encryptions)
volume_type_pk.drop()
except Exception:
# NOTE (e0ne): SQLite doesn't support 'drop constraint' statament
if migrate_engine.url.get_dialect().name.startswith('sqlite'):
pass
else:
raise
pkey = PrimaryKeyConstraint(encryptions.columns.encryption_id)
pkey.create()
@ -84,3 +81,36 @@ def downgrade(migrate_engine):
'name': 'encryption_ibfk_1'}
volume_type_fk = ForeignKeyConstraint(**params)
volume_type_fk.create()
def _upgrade_sqlite(meta, encryptions):
new_encryptions = Table(
'encryption_33', meta,
Column('created_at', DateTime(timezone=False)),
Column('updated_at', DateTime(timezone=False)),
Column('deleted_at', DateTime(timezone=False)),
Column('deleted', Boolean(create_constraint=True, name=None)),
Column('cipher', String(255)),
Column('key_size', Integer),
Column('provider', String(255)),
Column('control_location', String(255)),
Column('encryption_id', String(36), primary_key=True),
Column('volume_type_id', String(36))
)
new_encryptions.create()
encryption_items = list(encryptions.select().execute())
for item in encryption_items:
new_encryptions.insert().\
values(created_at=item['created_at'],
updated_at=item['updated_at'],
deleted_at=item['deleted_at'],
deleted=item['deleted'],
cipher=item['cipher'],
key_size=item['key_size'],
provider=item['provider'],
control_location=item['control_location'],
encryption_id=str(uuid.uuid4()),
volume_type_id=item['volume_type_id']).execute()
encryptions.drop()
new_encryptions.rename('encryption')

View File

@ -37,11 +37,14 @@ ignore_codes = ["E1103"]
# Note(xyang): the fourth and fifth error messages are for the code [E1101].
# They should be ignored because 'sha256' and 'sha224' are functions in
# 'hashlib'.
# Note(aarefiev): the sixth error message is for SQLAlchemy rename calls in
# DB migration(033_add_encryption_unique_key).
ignore_messages = ["An attribute affected in cinder.tests",
"No name 'urllib' in module '_MovedItems'",
"No value passed for parameter 'dml'",
"Module 'hashlib' has no 'sha256' member",
"Module 'hashlib' has no 'sha224' member"]
"Module 'hashlib' has no 'sha224' member",
"Instance of 'Table' has no 'rename' member"]
# Note(maoy): we ignore all errors in openstack.common because it should be
# checked elsewhere. We also ignore cinder.tests for now due to high false
# positive rate.