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 |
|