1 This patchset is for bug: |
|
2 |
|
3 22725887 - Heat needs to support MySQL Cluster |
|
4 |
|
5 This fixes the following aspects of Heat: |
|
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/heat/+bug/1564110 |
|
16 |
|
17 |
|
18 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/054_stack_tags_table.py.orig 2016-07-29 12:03:45.066916862 -0600 |
|
19 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/054_stack_tags_table.py 2016-07-29 12:08:17.012890454 -0600 |
|
20 @@ -11,10 +11,12 @@ |
|
21 # License for the specific language governing permissions and limitations |
|
22 # under the License. |
|
23 |
|
24 +from oslo_config import cfg |
|
25 import sqlalchemy |
|
26 |
|
27 from heat.db.sqlalchemy import types as heat_db_types |
|
28 |
|
29 +CONF = cfg.CONF |
|
30 |
|
31 def upgrade(migrate_engine): |
|
32 meta = sqlalchemy.MetaData(bind=migrate_engine) |
|
33 @@ -35,7 +37,7 @@ def upgrade(migrate_engine): |
|
34 sqlalchemy.String(36), |
|
35 sqlalchemy.ForeignKey('stack.id'), |
|
36 nullable=False), |
|
37 - mysql_engine='InnoDB', |
|
38 + mysql_engine=CONF.database.mysql_storage_engine, |
|
39 mysql_charset='utf8' |
|
40 ) |
|
41 stack_tag.create() |
|
42 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/015_grizzly.py.orig 2016-07-29 12:03:53.884104708 -0600 |
|
43 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/015_grizzly.py 2016-07-29 12:08:35.264920866 -0600 |
|
44 @@ -11,8 +11,10 @@ |
|
45 # License for the specific language governing permissions and limitations |
|
46 # under the License. |
|
47 |
|
48 +from oslo_config import cfg |
|
49 import sqlalchemy |
|
50 |
|
51 +CONF = cfg.CONF |
|
52 |
|
53 def upgrade(migrate_engine): |
|
54 meta = sqlalchemy.MetaData() |
|
55 @@ -25,7 +27,7 @@ def upgrade(migrate_engine): |
|
56 sqlalchemy.Column('created_at', sqlalchemy.DateTime), |
|
57 sqlalchemy.Column('updated_at', sqlalchemy.DateTime), |
|
58 sqlalchemy.Column('template', sqlalchemy.Text), |
|
59 - mysql_engine='InnoDB', |
|
60 + mysql_engine=CONF.database.mysql_storage_engine, |
|
61 mysql_charset='utf8' |
|
62 ) |
|
63 |
|
64 @@ -44,7 +46,7 @@ def upgrade(migrate_engine): |
|
65 sqlalchemy.Column('aws_auth_url', sqlalchemy.Text), |
|
66 sqlalchemy.Column('tenant_id', sqlalchemy.String(256)), |
|
67 sqlalchemy.Column('aws_creds', sqlalchemy.Text), |
|
68 - mysql_engine='InnoDB', |
|
69 + mysql_engine=CONF.database.mysql_storage_engine, |
|
70 mysql_charset='utf8' |
|
71 ) |
|
72 |
|
73 @@ -71,7 +73,7 @@ def upgrade(migrate_engine): |
|
74 sqlalchemy.Column('tenant', sqlalchemy.String(256)), |
|
75 sqlalchemy.Column('disable_rollback', sqlalchemy.Boolean, |
|
76 nullable=False), |
|
77 - mysql_engine='InnoDB', |
|
78 + mysql_engine=CONF.database.mysql_storage_engine, |
|
79 mysql_charset='utf8' |
|
80 ) |
|
81 |
|
82 @@ -88,7 +90,7 @@ def upgrade(migrate_engine): |
|
83 sqlalchemy.Column('stack_id', sqlalchemy.String(36), |
|
84 sqlalchemy.ForeignKey('stack.id'), nullable=False), |
|
85 sqlalchemy.Column('rsrc_metadata', sqlalchemy.Text), |
|
86 - mysql_engine='InnoDB', |
|
87 + mysql_engine=CONF.database.mysql_storage_engine, |
|
88 mysql_charset='utf8' |
|
89 ) |
|
90 |
|
91 @@ -106,7 +108,7 @@ def upgrade(migrate_engine): |
|
92 sqlalchemy.Column('resource_status_reason', sqlalchemy.String(255)), |
|
93 sqlalchemy.Column('resource_type', sqlalchemy.String(255)), |
|
94 sqlalchemy.Column('resource_properties', sqlalchemy.PickleType), |
|
95 - mysql_engine='InnoDB', |
|
96 + mysql_engine=CONF.database.mysql_storage_engine, |
|
97 mysql_charset='utf8' |
|
98 ) |
|
99 |
|
100 @@ -122,7 +124,7 @@ def upgrade(migrate_engine): |
|
101 sqlalchemy.Column('last_evaluated', sqlalchemy.DateTime), |
|
102 sqlalchemy.Column('stack_id', sqlalchemy.String(36), |
|
103 sqlalchemy.ForeignKey('stack.id'), nullable=False), |
|
104 - mysql_engine='InnoDB', |
|
105 + mysql_engine=CONF.database.mysql_storage_engine, |
|
106 mysql_charset='utf8' |
|
107 ) |
|
108 |
|
109 @@ -136,7 +138,7 @@ def upgrade(migrate_engine): |
|
110 sqlalchemy.Column('watch_rule_id', sqlalchemy.Integer, |
|
111 sqlalchemy.ForeignKey('watch_rule.id'), |
|
112 nullable=False), |
|
113 - mysql_engine='InnoDB', |
|
114 + mysql_engine=CONF.database.mysql_storage_engine, |
|
115 mysql_charset='utf8' |
|
116 ) |
|
117 |
|
118 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/059_sync_point.py.orig 2016-07-29 12:04:02.707922940 -0600 |
|
119 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/059_sync_point.py 2016-07-29 12:09:00.649161442 -0600 |
|
120 @@ -11,10 +11,12 @@ |
|
121 # License for the specific language governing permissions and limitations |
|
122 # under the License. |
|
123 |
|
124 +from oslo_config import cfg |
|
125 import sqlalchemy |
|
126 |
|
127 from heat.db.sqlalchemy import types as heat_db_types |
|
128 |
|
129 +CONF = cfg.CONF |
|
130 |
|
131 def upgrade(migrate_engine): |
|
132 meta = sqlalchemy.MetaData() |
|
133 @@ -41,7 +43,7 @@ def upgrade(migrate_engine): |
|
134 sqlalchemy.ForeignKeyConstraint(['stack_id'], ['stack.id'], |
|
135 name='fk_stack_id'), |
|
136 |
|
137 - mysql_engine='InnoDB', |
|
138 + mysql_engine=CONF.database.mysql_storage_engine, |
|
139 mysql_charset='utf8' |
|
140 ) |
|
141 sync_point.create() |
|
142 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/033_software_config.py.orig 2016-07-29 12:04:10.260632439 -0600 |
|
143 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/033_software_config.py 2016-07-29 12:09:20.089705318 -0600 |
|
144 @@ -11,10 +11,12 @@ |
|
145 # License for the specific language governing permissions and limitations |
|
146 # under the License. |
|
147 |
|
148 +from oslo_config import cfg |
|
149 import sqlalchemy |
|
150 |
|
151 from heat.db.sqlalchemy import types |
|
152 |
|
153 +CONF = cfg.CONF |
|
154 |
|
155 def upgrade(migrate_engine): |
|
156 meta = sqlalchemy.MetaData() |
|
157 @@ -34,7 +36,7 @@ def upgrade(migrate_engine): |
|
158 sqlalchemy.Column('tenant', sqlalchemy.String(64), |
|
159 nullable=False, |
|
160 index=True), |
|
161 - mysql_engine='InnoDB', |
|
162 + mysql_engine=CONF.database.mysql_storage_engine, |
|
163 mysql_charset='utf8' |
|
164 ) |
|
165 software_config.create() |
|
166 @@ -63,7 +65,7 @@ def upgrade(migrate_engine): |
|
167 sqlalchemy.Column('tenant', sqlalchemy.String(64), |
|
168 nullable=False, |
|
169 index=True), |
|
170 - mysql_engine='InnoDB', |
|
171 + mysql_engine=CONF.database.mysql_storage_engine, |
|
172 mysql_charset='utf8' |
|
173 ) |
|
174 software_deployment.create() |
|
175 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/057_resource_uuid_to_id.py.orig 2016-07-29 12:04:19.750231791 -0600 |
|
176 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/057_resource_uuid_to_id.py 2016-07-28 14:01:17.581307597 -0600 |
|
177 @@ -194,10 +194,11 @@ def upgrade_resource_data_post(migrate_e |
|
178 name = inspector.get_indexes('resource_data')[0]['name'] |
|
179 sqlalchemy.Index(name, rd_table.c.resource_id).drop() |
|
180 |
|
181 + # Change column before it becomes a foreign key |
|
182 + rd_table.c.resource_id.alter(nullable=False) |
|
183 cons = migrate.ForeignKeyConstraint(columns=[rd_table.c.resource_id], |
|
184 refcolumns=[res_table.c.id]) |
|
185 cons.create() |
|
186 - rd_table.c.resource_id.alter(nullable=False) |
|
187 |
|
188 rd_table.c.tmp_res_uuid.drop() |
|
189 |
|
190 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/044_snapshots.py.orig 2016-07-29 12:04:27.749158504 -0600 |
|
191 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/044_snapshots.py 2016-07-29 12:10:54.210544287 -0600 |
|
192 @@ -11,10 +11,12 @@ |
|
193 # License for the specific language governing permissions and limitations |
|
194 # under the License. |
|
195 |
|
196 +from oslo_config import cfg |
|
197 import sqlalchemy |
|
198 |
|
199 from heat.db.sqlalchemy import types |
|
200 |
|
201 +CONF = cfg.CONF |
|
202 |
|
203 def upgrade(migrate_engine): |
|
204 meta = sqlalchemy.MetaData() |
|
205 @@ -38,7 +40,7 @@ def upgrade(migrate_engine): |
|
206 sqlalchemy.Column('tenant', sqlalchemy.String(64), |
|
207 nullable=False, |
|
208 index=True), |
|
209 - mysql_engine='InnoDB', |
|
210 + mysql_engine=CONF.database.mysql_storage_engine, |
|
211 mysql_charset='utf8' |
|
212 ) |
|
213 sqlalchemy.Table('stack', meta, autoload=True) |
|
214 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/051_service.py.orig 2016-07-29 12:04:36.470596083 -0600 |
|
215 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/051_service.py 2016-07-29 12:11:18.330506769 -0600 |
|
216 @@ -15,8 +15,10 @@ |
|
217 |
|
218 import uuid |
|
219 |
|
220 +from oslo_config import cfg |
|
221 import sqlalchemy |
|
222 |
|
223 +CONF = cfg.CONF |
|
224 |
|
225 def upgrade(migrate_engine): |
|
226 meta = sqlalchemy.MetaData() |
|
227 @@ -36,7 +38,7 @@ def upgrade(migrate_engine): |
|
228 sqlalchemy.Column('created_at', sqlalchemy.DateTime), |
|
229 sqlalchemy.Column('updated_at', sqlalchemy.DateTime), |
|
230 sqlalchemy.Column('deleted_at', sqlalchemy.DateTime), |
|
231 - mysql_engine='InnoDB', |
|
232 + mysql_engine=CONF.database.mysql_storage_engine, |
|
233 mysql_charset='utf8' |
|
234 ) |
|
235 service.create() |
|
236 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/021_resource_data.py.orig 2016-07-29 12:04:51.248485607 -0600 |
|
237 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/021_resource_data.py 2016-07-29 12:11:47.651134656 -0600 |
|
238 @@ -11,8 +11,10 @@ |
|
239 # License for the specific language governing permissions and limitations |
|
240 # under the License. |
|
241 |
|
242 +from oslo_config import cfg |
|
243 import sqlalchemy |
|
244 |
|
245 +CONF = cfg.CONF |
|
246 |
|
247 def upgrade(migrate_engine): |
|
248 meta = sqlalchemy.MetaData() |
|
249 @@ -33,7 +35,7 @@ def upgrade(migrate_engine): |
|
250 sqlalchemy.String(36), |
|
251 sqlalchemy.ForeignKey('resource.id'), |
|
252 nullable=False), |
|
253 - mysql_engine='InnoDB', |
|
254 + mysql_engine=CONF.database.mysql_storage_engine, |
|
255 mysql_charset='utf8' |
|
256 ) |
|
257 sqlalchemy.Table('resource', meta, autoload=True) |
|
258 --- heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/031_stack_lock.py.orig 2016-07-29 12:04:59.100720052 -0600 |
|
259 +++ heat-2015.1.2/heat/db/sqlalchemy/migrate_repo/versions/031_stack_lock.py 2016-07-29 12:12:03.834952665 -0600 |
|
260 @@ -11,8 +11,10 @@ |
|
261 # License for the specific language governing permissions and limitations |
|
262 # under the License. |
|
263 |
|
264 +from oslo_config import cfg |
|
265 import sqlalchemy |
|
266 |
|
267 +CONF = cfg.CONF |
|
268 |
|
269 def upgrade(migrate_engine): |
|
270 meta = sqlalchemy.MetaData() |
|
271 @@ -27,7 +29,7 @@ def upgrade(migrate_engine): |
|
272 sqlalchemy.Column('created_at', sqlalchemy.DateTime), |
|
273 sqlalchemy.Column('updated_at', sqlalchemy.DateTime), |
|
274 sqlalchemy.Column('engine_id', sqlalchemy.String(length=36)), |
|
275 - mysql_engine='InnoDB', |
|
276 + mysql_engine=CONF.database.mysql_storage_engine, |
|
277 mysql_charset='utf8' |
|
278 ) |
|
279 sqlalchemy.Table('stack', meta, autoload=True) |
|
280 --- heat-2015.1.2/heat/db/sqlalchemy/models.py.orig 2016-07-29 12:05:08.842912688 -0600 |
|
281 +++ heat-2015.1.2/heat/db/sqlalchemy/models.py 2016-07-29 12:15:35.087392556 -0600 |
|
282 @@ -16,6 +16,7 @@ SQLAlchemy models for heat data. |
|
283 |
|
284 import uuid |
|
285 |
|
286 +from oslo_config import cfg |
|
287 from oslo_db.sqlalchemy import models |
|
288 from oslo_utils import timeutils |
|
289 import six |
|
290 @@ -27,6 +28,8 @@ from sqlalchemy.orm import session as or |
|
291 |
|
292 from heat.db.sqlalchemy import types |
|
293 |
|
294 +CONF = cfg.CONF |
|
295 + |
|
296 BASE = declarative.declarative_base() |
|
297 |
|
298 |
|
299 @@ -37,7 +40,7 @@ def get_session(): |
|
300 |
|
301 class HeatBase(models.ModelBase, models.TimestampMixin): |
|
302 """Base class for Heat Models.""" |
|
303 - __table_args__ = {'mysql_engine': 'InnoDB'} |
|
304 + __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine} |
|
305 |
|
306 def expire(self, session=None, attrs=None): |
|
307 """Expire this object ().""" |
|