components/openstack/cinder/patches/15-mysql_cluster_support.patch
changeset 6866 4c1935f5ec9a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/openstack/cinder/patches/15-mysql_cluster_support.patch	Thu Sep 08 13:16:06 2016 -0600
@@ -0,0 +1,715 @@
+This patchset is for bug:
+
+24394524 Mitaka Cinder should support MySQL Cluster
+
+This fixes the following aspects of Cinder:
+1. Implementation of an oslo.db configuration parameter to specify the MySQL
+   storage engine (mysql_storage_engine).
+2. Replacement of hardcoded SQL statements that set the engine to "InnoDB"
+   to the above configuration value.
+3. Logic to handle SQL differences between MySQL InnoDB and MySQL Cluster (NDB).
+   This includes column lengths, constraints, foreign keys, and indexes.
+
+This has not been committed upstream, but has been filed in launchpad:
+
+https://bugs.launchpad.net/cinder/+bug/1564110
+
+
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py.orig	2016-08-25 08:57:00.626583510 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py	2016-08-25 09:53:31.239234646 -0700
+@@ -12,8 +12,17 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime, ForeignKey
++from sqlalchemy import dialects
+ from sqlalchemy import Integer, MetaData, String, Table
++from sqlalchemy import Text
++
++CONF = cfg.CONF
++
++
++def TinyText():
++    return Text().with_variant(dialects.mysql.TINYTEXT(), 'mysql')
+ 
+ 
+ def define_tables(meta):
+@@ -31,7 +40,7 @@ def define_tables(meta):
+         Column('instance_uuid', String(length=255)),
+         Column('old_instance_type_id', Integer),
+         Column('new_instance_type_id', Integer),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     services = Table(
+@@ -47,7 +56,7 @@ def define_tables(meta):
+         Column('report_count', Integer, nullable=False),
+         Column('disabled', Boolean),
+         Column('availability_zone', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     sm_flavors = Table(
+@@ -59,7 +68,7 @@ def define_tables(meta):
+         Column('id', Integer, primary_key=True, nullable=False),
+         Column('label', String(length=255)),
+         Column('description', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     sm_backend_config = Table(
+@@ -74,7 +83,7 @@ def define_tables(meta):
+         Column('sr_uuid', String(length=255)),
+         Column('sr_type', String(length=255)),
+         Column('config_params', String(length=2047)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     sm_volume = Table(
+@@ -90,7 +99,7 @@ def define_tables(meta):
+         Column('backend_id', Integer, ForeignKey('sm_backend_config.id'),
+                nullable=False),
+         Column('vdi_uuid', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     snapshots = Table(
+@@ -109,7 +118,7 @@ def define_tables(meta):
+         Column('scheduled_at', DateTime),
+         Column('display_name', String(length=255)),
+         Column('display_description', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     volume_types = Table(
+@@ -120,7 +129,7 @@ def define_tables(meta):
+         Column('deleted', Boolean),
+         Column('id', Integer, primary_key=True, nullable=False),
+         Column('name', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     volume_metadata = Table(
+@@ -134,7 +143,7 @@ def define_tables(meta):
+                nullable=False),
+         Column('key', String(length=255)),
+         Column('value', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     volume_type_extra_specs = Table(
+@@ -148,38 +157,69 @@ def define_tables(meta):
+                nullable=False),
+         Column('key', String(length=255)),
+         Column('value', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+-    volumes = Table(
+-        'volumes', meta,
+-        Column('created_at', DateTime),
+-        Column('updated_at', DateTime),
+-        Column('deleted_at', DateTime),
+-        Column('deleted', Boolean),
+-        Column('id', String(length=36), primary_key=True, nullable=False),
+-        Column('ec2_id', String(length=255)),
+-        Column('user_id', String(length=255)),
+-        Column('project_id', String(length=255)),
+-        Column('host', String(length=255)),
+-        Column('size', Integer),
+-        Column('availability_zone', String(length=255)),
+-        Column('instance_uuid', String(length=36)),
+-        Column('mountpoint', String(length=255)),
+-        Column('attach_time', String(length=255)),
+-        Column('status', String(length=255)),
+-        Column('attach_status', String(length=255)),
+-        Column('scheduled_at', DateTime),
+-        Column('launched_at', DateTime),
+-        Column('terminated_at', DateTime),
+-        Column('display_name', String(length=255)),
+-        Column('display_description', String(length=255)),
+-        Column('provider_location', String(length=256)),
+-        Column('provider_auth', String(length=256)),
+-        Column('snapshot_id', String(length=36)),
+-        Column('volume_type_id', Integer),
+-        mysql_engine='InnoDB'
+-    )
++    if CONF.database.mysql_storage_engine == 'NDBCLUSTER':
++        volumes = Table(
++            'volumes', meta,
++            Column('created_at', DateTime),
++            Column('updated_at', DateTime),
++            Column('deleted_at', DateTime),
++            Column('deleted', Boolean),
++            Column('id', String(length=36), primary_key=True, nullable=False),
++            Column('ec2_id', String(length=255)),
++            Column('user_id', String(length=255)),
++            Column('project_id', String(length=255)),
++            Column('host', String(length=255)),
++            Column('size', Integer),
++            Column('availability_zone', TinyText()),
++            Column('instance_uuid', String(length=36)),
++            Column('mountpoint', TinyText()),
++            Column('attach_time', TinyText()),
++            Column('status', String(length=64)),
++            Column('attach_status', String(length=64)),
++            Column('scheduled_at', DateTime),
++            Column('launched_at', DateTime),
++            Column('terminated_at', DateTime),
++            Column('display_name', String(length=255)),
++            Column('display_description', TinyText()),
++            Column('provider_location', String(length=256)),
++            Column('provider_auth', String(length=256)),
++            Column('snapshot_id', String(length=36)),
++            Column('volume_type_id', Integer),
++            mysql_engine=CONF.database.mysql_storage_engine
++        )
++    else:
++        volumes = Table(
++            'volumes', meta,
++            Column('created_at', DateTime),
++            Column('updated_at', DateTime),
++            Column('deleted_at', DateTime),
++            Column('deleted', Boolean),
++            Column('id', String(length=36), primary_key=True, nullable=False),
++            Column('ec2_id', String(length=255)),
++            Column('user_id', String(length=255)),
++            Column('project_id', String(length=255)),
++            Column('host', String(length=255)),
++            Column('size', Integer),
++            Column('availability_zone', String(length=255)),
++            Column('instance_uuid', String(length=36)),
++            Column('mountpoint', String(length=255)),
++            Column('attach_time', String(length=255)),
++            Column('status', String(length=255)),
++            Column('attach_status', String(length=255)),
++            Column('scheduled_at', DateTime),
++            Column('launched_at', DateTime),
++            Column('terminated_at', DateTime),
++            Column('display_name', String(length=255)),
++            Column('display_description', String(length=255)),
++            Column('provider_location', String(length=256)),
++            Column('provider_auth', String(length=256)),
++            Column('snapshot_id', String(length=36)),
++            Column('volume_type_id', Integer),
++            mysql_engine=CONF.database.mysql_storage_engine
++        )
+ 
+     quotas = Table(
+         'quotas', meta,
+@@ -191,7 +231,7 @@ def define_tables(meta):
+         Column('project_id', String(length=255)),
+         Column('resource', String(length=255), nullable=False),
+         Column('hard_limit', Integer),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     iscsi_targets = Table(
+@@ -205,7 +245,7 @@ def define_tables(meta):
+         Column('host', String(length=255)),
+         Column('volume_id', String(length=36), ForeignKey('volumes.id'),
+                nullable=True),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+     return [sm_flavors,
+             sm_backend_config,
+@@ -255,4 +295,5 @@ def upgrade(migrate_engine):
+         migrate_engine.execute(
+             "ALTER DATABASE %s DEFAULT CHARACTER SET utf8" %
+             migrate_engine.url.database)
+-        migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" % table)
++        migrate_engine.execute("ALTER TABLE %(db_table)s Engine=%(mysql_storage_engine)s" %
++                               dict(db_table=table, mysql_storage_engine=CONF.database.mysql_storage_engine))
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py.orig	2016-08-25 08:57:08.652633578 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py	2016-08-25 08:56:32.039341151 -0700
+@@ -12,9 +12,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import MetaData, Integer, String, Table, ForeignKey
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -34,7 +37,7 @@ def upgrade(migrate_engine):
+                           Column('resource',
+                                  String(length=255)),
+                           Column('hard_limit', Integer(), nullable=True),
+-                          mysql_engine='InnoDB',
++                          mysql_engine=CONF.database.mysql_storage_engine,
+                           mysql_charset='utf8',
+                           )
+ 
+@@ -55,7 +58,7 @@ def upgrade(migrate_engine):
+                          Column('in_use', Integer(), nullable=False),
+                          Column('reserved', Integer(), nullable=False),
+                          Column('until_refresh', Integer(), nullable=True),
+-                         mysql_engine='InnoDB',
++                         mysql_engine=CONF.database.mysql_storage_engine,
+                          mysql_charset='utf8',
+                          )
+ 
+@@ -82,7 +85,7 @@ def upgrade(migrate_engine):
+                                 String(length=255)),
+                          Column('delta', Integer(), nullable=False),
+                          Column('expire', DateTime(timezone=False)),
+-                         mysql_engine='InnoDB',
++                         mysql_engine=CONF.database.mysql_storage_engine,
+                          mysql_charset='utf8',
+                          )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py.orig	2016-08-25 08:57:16.312610448 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py	2016-08-25 08:56:32.040239306 -0700
+@@ -12,9 +12,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Column, DateTime, Text, Boolean
+ from sqlalchemy import MetaData, Integer, String, Table, ForeignKey
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -26,11 +29,11 @@ def upgrade(migrate_engine):
+     Table('volumes',
+           meta,
+           Column('id', Integer(), primary_key=True, nullable=False),
+-          mysql_engine='InnoDB')
++          mysql_engine=CONF.database.mysql_storage_engine)
+     Table('snapshots',
+           meta,
+           Column('id', Integer(), primary_key=True, nullable=False),
+-          mysql_engine='InnoDB')
++          mysql_engine=CONF.database.mysql_storage_engine)
+     # Create new table
+     volume_glance_metadata = Table(
+         'volume_glance_metadata',
+@@ -45,7 +48,7 @@ def upgrade(migrate_engine):
+                ForeignKey('snapshots.id')),
+         Column('key', String(255)),
+         Column('value', Text),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     try:
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py.orig	2016-08-25 08:57:23.692681043 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py	2016-08-25 08:56:32.041089963 -0700
+@@ -13,9 +13,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import MetaData, Integer, String, Table
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -43,7 +46,7 @@ def upgrade(migrate_engine):
+         Column('service', String(length=255)),
+         Column('size', Integer()),
+         Column('object_count', Integer()),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     backups.create()
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py.orig	2016-08-25 08:57:30.092571835 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py	2016-08-25 08:56:32.041930428 -0700
+@@ -10,9 +10,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import Integer, MetaData, String, Table, ForeignKey
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -32,7 +35,7 @@ def upgrade(migrate_engine):
+                nullable=False),
+         Column('key', String(length=255)),
+         Column('value', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     snapshot_metadata.create()
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py.orig	2016-08-25 08:57:36.677754626 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py	2016-08-25 08:56:32.042766768 -0700
+@@ -10,9 +10,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import MetaData, String, Table, ForeignKey
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -34,7 +37,7 @@ def upgrade(migrate_engine):
+         Column('salt', String(length=255)),
+         Column('crypt_hash', String(length=255)),
+         Column('expires_at', DateTime(timezone=False)),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py.orig	2016-08-25 08:57:43.340435246 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py	2016-08-25 08:56:32.043630671 -0700
+@@ -13,9 +13,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Column, ForeignKey, MetaData, Table
+ from sqlalchemy import Boolean, DateTime, Integer, String
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData(bind=migrate_engine)
+@@ -51,9 +54,9 @@ def upgrade(migrate_engine):
+         # scheme unless each volume type is associated with at most one
+         # encryption scheme.
+         Column('volume_type_id', String(length=36),
+-               ForeignKey(volume_types.c.id),
++               ForeignKey(volume_types.c.id, name='encryption_ibfk_1'),
+                primary_key=True, nullable=False),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py.orig	2016-08-25 08:57:51.329501203 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py	2016-08-25 08:56:32.044466643 -0700
+@@ -14,9 +14,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import ForeignKey, MetaData, String, Table
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     """Add volume_type_rate_limit table."""
+@@ -34,7 +37,7 @@ def upgrade(migrate_engine):
+                ForeignKey('quality_of_service_specs.id')),
+         Column('key', String(255)),
+         Column('value', String(255)),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/020_add_volume_admin_metadata_table.py.orig	2016-08-25 08:58:01.270351421 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/020_add_volume_admin_metadata_table.py	2016-08-25 08:56:32.045303898 -0700
+@@ -10,9 +10,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import Integer, MetaData, String, Table, ForeignKey
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -32,7 +35,7 @@ def upgrade(migrate_engine):
+                nullable=False),
+         Column('key', String(length=255)),
+         Column('value', String(length=255)),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py.orig	2016-08-25 08:58:07.982189985 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py	2016-08-25 08:56:32.046312221 -0700
+@@ -13,9 +13,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import ForeignKey, MetaData, String, Table
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -37,7 +40,7 @@ def upgrade(migrate_engine):
+         Column('description', String(length=255)),
+         Column('volume_type_id', String(length=255)),
+         Column('status', String(length=255)),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8',
+     )
+ 
+@@ -59,7 +62,7 @@ def upgrade(migrate_engine):
+         Column('name', String(length=255)),
+         Column('description', String(length=255)),
+         Column('status', String(length=255)),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8',
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/032_add_volume_type_projects.py.orig	2016-08-25 08:58:14.732428526 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/032_add_volume_type_projects.py	2016-08-25 08:56:32.047162211 -0700
+@@ -10,9 +10,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime, UniqueConstraint
+ from sqlalchemy import Integer, MetaData, String, Table, ForeignKey
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -35,7 +38,7 @@ def upgrade(migrate_engine):
+         Column('project_id', String(length=255)),
+         Column('deleted', Boolean(create_constraint=True, name=None)),
+         UniqueConstraint('volume_type_id', 'project_id', 'deleted'),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+     )
+ 
+     volume_type_projects.create()
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/038_add_driver_initiator_data_table.py.orig	2016-08-25 08:58:22.055008365 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/038_add_driver_initiator_data_table.py	2016-08-25 08:56:32.048168233 -0700
+@@ -10,9 +10,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Column, DateTime, Integer
+ from sqlalchemy import MetaData, String, Table, UniqueConstraint
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -29,7 +32,7 @@ def upgrade(migrate_engine):
+         Column('key', String(length=255), nullable=False),
+         Column('value', String(length=255)),
+         UniqueConstraint('initiator', 'namespace', 'key'),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py.orig	2016-08-25 08:58:30.054762283 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py	2016-08-25 08:56:32.049123043 -0700
+@@ -16,11 +16,13 @@
+ import datetime
+ import uuid
+ 
++from oslo_config import cfg
+ import six
+ from sqlalchemy import Boolean, Column, DateTime
+ from sqlalchemy import ForeignKey, MetaData, String, Table
+ 
+ CREATED_AT = datetime.datetime.now()  # noqa
++CONF = cfg.CONF
+ 
+ 
+ def upgrade(migrate_engine):
+@@ -51,7 +53,7 @@ def upgrade(migrate_engine):
+         Column('detach_time', DateTime),
+         Column('attach_mode', String(length=36)),
+         Column('attach_status', String(length=255)),
+-        mysql_engine='InnoDB'
++        mysql_engine=CONF.database.mysql_storage_engine
+     )
+ 
+     volume_attachment.create()
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/055_add_image_volume_cache_table.py.orig	2016-08-25 08:58:37.835313620 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/055_add_image_volume_cache_table.py	2016-08-25 08:56:32.049959998 -0700
+@@ -12,9 +12,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Column, DateTime, Integer
+ from sqlalchemy import MetaData, String, Table
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -30,7 +33,7 @@ def upgrade(migrate_engine):
+         Column('volume_id', String(length=36), nullable=False),
+         Column('size', Integer, nullable=False),
+         Column('last_used', DateTime, nullable=False),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/067_readd_iscsi_targets_table.py.orig	2016-08-25 08:58:44.335850305 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/067_readd_iscsi_targets_table.py	2016-08-25 08:56:32.050821951 -0700
+@@ -10,9 +10,12 @@
+ #    License for the specific language governing permissions and limitations
+ #    under the License.
+ 
++from oslo_config import cfg
+ from sqlalchemy import Boolean, Column, DateTime, ForeignKey
+ from sqlalchemy import Integer, MetaData, String, Table
+ 
++CONF = cfg.CONF
++
+ 
+ def upgrade(migrate_engine):
+     meta = MetaData()
+@@ -30,7 +33,7 @@ def upgrade(migrate_engine):
+         Column('host', String(length=255)),
+         Column('volume_id', String(length=36), ForeignKey('volumes.id'),
+                nullable=True),
+-        mysql_engine='InnoDB',
++        mysql_engine=CONF.database.mysql_storage_engine,
+         mysql_charset='utf8'
+     )
+ 
+--- cinder-8.0.0/cinder/db/sqlalchemy/models.py.orig	2016-08-25 08:58:53.030663246 -0700
++++ cinder-8.0.0/cinder/db/sqlalchemy/models.py	2016-08-25 10:02:19.406765223 -0700
+@@ -24,6 +24,7 @@ from oslo_config import cfg
+ from oslo_db.sqlalchemy import models
+ from oslo_utils import timeutils
+ from sqlalchemy import Column, Integer, String, Text, schema
++from sqlalchemy import dialects
+ from sqlalchemy.ext.declarative import declarative_base
+ from sqlalchemy import ForeignKey, DateTime, Boolean
+ from sqlalchemy.orm import relationship, backref, validates
+@@ -33,11 +34,15 @@ CONF = cfg.CONF
+ BASE = declarative_base()
+ 
+ 
++def TinyText():
++            return Text().with_variant(dialects.mysql.TINYTEXT(), 'mysql')
++
++
+ class CinderBase(models.TimestampMixin,
+                  models.ModelBase):
+     """Base class for Cinder Models."""
+ 
+-    __table_args__ = {'mysql_engine': 'InnoDB'}
++    __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine}
+ 
+     # TODO(rpodolyaka): reuse models.SoftDeleteMixin in the next stage
+     #                   of implementing of BP db-cleanup
+@@ -150,9 +155,16 @@ class Volume(BASE, CinderBase):
+ 
+     host = Column(String(255))  # , ForeignKey('hosts.id'))
+     size = Column(Integer)
+-    availability_zone = Column(String(255))  # TODO(vish): foreign key?
+-    status = Column(String(255))  # TODO(vish): enum?
+-    attach_status = Column(String(255))  # TODO(vish): enum
++
++    if CONF.database.mysql_storage_engine == 'NDBCLUSTER':
++        availability_zone = Column(TinyText())
++        status = Column(String(64))
++        attach_status = Column(String(64))
++    else:
++        availability_zone = Column(String(255))  # TODO(vish): foreign key?
++        status = Column(String(255))  # TODO(vish): enum?
++        attach_status = Column(String(255))  # TODO(vish): enum
++
+     migration_status = Column(String(255))
+ 
+     scheduled_at = Column(DateTime)
+@@ -160,7 +172,11 @@ class Volume(BASE, CinderBase):
+     terminated_at = Column(DateTime)
+ 
+     display_name = Column(String(255))
+-    display_description = Column(String(255))
++
++    if CONF.database.mysql_storage_engine == 'NDBCLUSTER':
++        display_description = Column(TinyText())
++    else:
++        display_description = Column(String(255))
+ 
+     provider_location = Column(String(255))
+     provider_auth = Column(String(255))
+@@ -592,7 +608,7 @@ class DriverInitiatorData(BASE, models.T
+     __tablename__ = 'driver_initiator_data'
+     __table_args__ = (
+         schema.UniqueConstraint("initiator", "namespace", "key"),
+-        {'mysql_engine': 'InnoDB'}
++        {'mysql_engine': CONF.database.mysql_storage_engine}
+     )
+     id = Column(Integer, primary_key=True, nullable=False)
+     initiator = Column(String(255), index=True, nullable=False)
+--- cinder-8.0.0/cinder/tests/unit/test_migrations.py.orig	2016-08-25 08:59:01.630728551 -0700
++++ cinder-8.0.0/cinder/tests/unit/test_migrations.py	2016-08-25 08:56:32.054462196 -0700
+@@ -25,6 +25,7 @@ import uuid
+ import fixtures
+ from migrate.versioning import api as migration_api
+ from migrate.versioning import repository
++from oslo_config import cfg
+ from oslo_db.sqlalchemy import test_base
+ from oslo_db.sqlalchemy import test_migrations
+ from oslo_db.sqlalchemy import utils as db_utils
+@@ -33,6 +34,8 @@ import sqlalchemy
+ from cinder.db import migration
+ import cinder.db.sqlalchemy.migrate_repo
+ 
++CONF = cfg.CONF
++
+ 
+ class MigrationsMixin(test_migrations.WalkVersionsMixin):
+     """Test sqlalchemy-migrate migrations."""
+@@ -842,8 +845,9 @@ class TestMysqlMigrations(test_base.MySQ
+             "SELECT count(*) "
+             "from information_schema.TABLES "
+             "where TABLE_SCHEMA='openstack_citest' "
+-            "and ENGINE!='InnoDB' "
+-            "and TABLE_NAME!='migrate_version'")
++            "and ENGINE!='%(mysql_storage_engine)s' "
++            "and TABLE_NAME!='migrate_version'" %
++            dict(mysql_storage_engine=CONF.database.mysql_storage_engine))
+         count = noninnodb.scalar()
+         self.assertEqual(count, 0, "%d non InnoDB tables created" % count)
+