components/openstack/ironic/patches/mysql_cluster_support.patch
changeset 5757 9c6a2daa1337
parent 5756 8233953c0160
child 5760 ae78071b3cad
equal deleted inserted replaced
5756:8233953c0160 5757:9c6a2daa1337
     1 This patchset is for bug:
       
     2 
       
     3 22726240 - Ironic needs to support MySQL Cluster
       
     4 
       
     5 This fixes the following aspects of Ironic:
       
     6 1. Implementation of an oslo.db configuration parameter to specify the MySQL 
       
     7    storage engine (mysql_storage_engine).
       
     8 2. Replacement of hardcoded SQL statements that set the engine to "InnoDB" 
       
     9    to the above configuration value.
       
    10 3. Logic to handle SQL differences between MySQL InnoDB and MySQL Cluster (NDB). 
       
    11    This includes column lengths, constraints, foreign keys, and indexes.
       
    12 
       
    13 This has not been committed upstream, but has been filed in launchpad:
       
    14 
       
    15 https://bugs.launchpad.net/ironic/+bug/1564110
       
    16 
       
    17 
       
    18 --- ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py.orig	2016-03-21 16:12:03.214356068 -0600
       
    19 +++ ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/2581ebaf0cb2_initial_migration.py	2016-03-21 16:33:15.312722952 -0600
       
    20 @@ -26,6 +26,8 @@ down_revision = None
       
    21  from alembic import op
       
    22  import sqlalchemy as sa
       
    23  
       
    24 +from oslo_config import cfg
       
    25 +CONF = cfg.CONF
       
    26  
       
    27  def upgrade():
       
    28      # commands auto generated by Alembic - please adjust!
       
    29 @@ -38,7 +40,7 @@ def upgrade():
       
    30          sa.Column('drivers', sa.Text(), nullable=True),
       
    31          sa.PrimaryKeyConstraint('id'),
       
    32          sa.UniqueConstraint('hostname', name='uniq_conductors0hostname'),
       
    33 -        mysql_ENGINE='InnoDB',
       
    34 +        mysql_ENGINE=CONF.database.mysql_storage_engine,
       
    35          mysql_DEFAULT_CHARSET='UTF8'
       
    36      )
       
    37      op.create_table(
       
    38 @@ -51,7 +53,7 @@ def upgrade():
       
    39          sa.Column('description', sa.String(length=255), nullable=True),
       
    40          sa.PrimaryKeyConstraint('id'),
       
    41          sa.UniqueConstraint('uuid', name='uniq_chassis0uuid'),
       
    42 -        mysql_ENGINE='InnoDB',
       
    43 +        mysql_ENGINE=CONF.database.mysql_storage_engine,
       
    44          mysql_DEFAULT_CHARSET='UTF8'
       
    45      )
       
    46      op.create_table(
       
    47 @@ -77,7 +79,7 @@ def upgrade():
       
    48          sa.ForeignKeyConstraint(['chassis_id'], ['chassis.id'], ),
       
    49          sa.PrimaryKeyConstraint('id'),
       
    50          sa.UniqueConstraint('uuid', name='uniq_nodes0uuid'),
       
    51 -        mysql_ENGINE='InnoDB',
       
    52 +        mysql_ENGINE=CONF.database.mysql_storage_engine,
       
    53          mysql_DEFAULT_CHARSET='UTF8'
       
    54      )
       
    55      op.create_index('node_instance_uuid', 'nodes', ['instance_uuid'],
       
    56 @@ -95,7 +97,7 @@ def upgrade():
       
    57          sa.PrimaryKeyConstraint('id'),
       
    58          sa.UniqueConstraint('address', name='uniq_ports0address'),
       
    59          sa.UniqueConstraint('uuid', name='uniq_ports0uuid'),
       
    60 -        mysql_ENGINE='InnoDB',
       
    61 +        mysql_ENGINE=CONF.database.mysql_storage_engine,
       
    62          mysql_DEFAULT_CHARSET='UTF8'
       
    63      )
       
    64      # end Alembic commands
       
    65 --- ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/487deb87cc9d_add_conductor_affinity_and_online.py.orig	2016-03-21 17:24:03.913800383 -0600
       
    66 +++ ironic-2015.1.2/ironic/db/sqlalchemy/alembic/versions/487deb87cc9d_add_conductor_affinity_and_online.py	2016-03-22 10:35:08.185257998 -0600
       
    67 @@ -29,7 +29,7 @@ import sqlalchemy as sa
       
    68  def upgrade():
       
    69      op.add_column(
       
    70          'conductors',
       
    71 -        sa.Column('online', sa.Boolean(), default=True))
       
    72 +        sa.Column('online', sa.Boolean(), default=True, quote=True))
       
    73      op.add_column(
       
    74          'nodes',
       
    75          sa.Column('conductor_affinity', sa.Integer(),
       
    76 --- ironic-2015.1.2/ironic/db/sqlalchemy/models.py.orig	2016-03-21 16:12:03.216554516 -0600
       
    77 +++ ironic-2015.1.2/ironic/db/sqlalchemy/models.py	2016-03-21 17:13:13.683753382 -0600
       
    78 @@ -49,8 +49,12 @@ db_options.set_defaults(cfg.CONF, _DEFAU
       
    79  def table_args():
       
    80      engine_name = urlparse.urlparse(cfg.CONF.database.connection).scheme
       
    81      if engine_name == 'mysql':
       
    82 -        return {'mysql_engine': cfg.CONF.database.mysql_engine,
       
    83 -                'mysql_charset': "utf8"}
       
    84 +        if cfg.CONF.database.mysql_storage_engine == "NDBCLUSTER":
       
    85 +            return {'mysql_engine': cfg.CONF.database.mysql_storage_engine,
       
    86 +                    'mysql_charset': "utf8"}
       
    87 +        else:
       
    88 +            return {'mysql_engine': cfg.CONF.database.mysql_engine,
       
    89 +                    'mysql_charset': "utf8"}
       
    90      return None
       
    91  
       
    92