]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Use storage engine when creating tables in migrations
authorJakub Libosvar <libosvar@redhat.com>
Tue, 22 Jul 2014 16:50:07 +0000 (18:50 +0200)
committerAnn Kamyshnikova <akamyshnikova@mirantis.com>
Thu, 31 Jul 2014 13:35:42 +0000 (17:35 +0400)
Although __table_args__ is set correctly in the base model, existing
migration scripts were not generated with the mysql_engine option in
the alembic output, likely due to:

https://bitbucket.org/zzzeek/alembic/issue/110/

This adds the mysql_engine option to each table creation operation.

Change-Id: I990e8d64bcadf2be4e1e319319bc23225123b304
Closes-Bug: #1288358

neutron/db/migration/alembic_migrations/env.py
neutron/db/migration/cli.py

index 88502779282b779411bda11e10f56f6a090b6d2f..7f2373fc7b0ea45031d9684c44cbf035db29dcb5 100644 (file)
 from logging import config as logging_config
 
 from alembic import context
-from sqlalchemy import create_engine, pool
+import sqlalchemy as sa
+from sqlalchemy import create_engine, event, pool
 
 from neutron.db import model_base
 from neutron.openstack.common import importutils
 
 
+MYSQL_ENGINE = None
+
 DATABASE_QUOTA_DRIVER = 'neutron.extensions._quotav2_driver.DbQuotaDriver'
 
 # this is the Alembic Config object, which provides
@@ -45,6 +48,12 @@ for class_path in active_plugins:
 target_metadata = model_base.BASEV2.metadata
 
 
+def set_mysql_engine(mysql_engine):
+    global MYSQL_ENGINE
+    MYSQL_ENGINE = (mysql_engine or
+                    model_base.BASEV2.__table_args__['mysql_engine'])
+
+
 def run_migrations_offline():
     """Run migrations in 'offline' mode.
 
@@ -55,6 +64,8 @@ def run_migrations_offline():
     script output.
 
     """
+    set_mysql_engine(neutron_config.command.mysql_engine)
+
     kwargs = dict()
     if neutron_config.database.connection:
         kwargs['url'] = neutron_config.database.connection
@@ -67,6 +78,12 @@ def run_migrations_offline():
                                options=build_options())
 
 
+@event.listens_for(sa.Table, 'after_parent_attach')
+def set_storage_engine(target, parent):
+    if MYSQL_ENGINE:
+        target.kwargs['mysql_engine'] = MYSQL_ENGINE
+
+
 def run_migrations_online():
     """Run migrations in 'online' mode.
 
@@ -74,6 +91,8 @@ def run_migrations_online():
     and associate a connection with the context.
 
     """
+    set_mysql_engine(neutron_config.command.mysql_engine)
+
     engine = create_engine(
         neutron_config.database.connection,
         poolclass=pool.NullPool)
index 83f620b0a8e630e2a77a1ae7c1a6e2e7c315c0df..b25c520e0655230e3cdbff49cf99f405ac9c8b54 100644 (file)
@@ -135,6 +135,10 @@ def add_command_parsers(subparsers):
         parser.add_argument('--delta', type=int)
         parser.add_argument('--sql', action='store_true')
         parser.add_argument('revision', nargs='?')
+        parser.add_argument('--mysql-engine',
+                            default='',
+                            help='Change MySQL storage engine of current '
+                                 'existing tables')
         parser.set_defaults(func=do_upgrade_downgrade)
 
     parser = subparsers.add_parser('stamp')