|
1 This patchset is for bug: |
|
2 |
|
3 24394524 Mitaka Cinder should support MySQL Cluster |
|
4 |
|
5 This fixes the following aspects of Cinder: |
|
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/cinder/+bug/1564110 |
|
16 |
|
17 |
|
18 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py.orig 2016-08-25 08:57:00.626583510 -0700 |
|
19 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/001_cinder_init.py 2016-08-25 09:53:31.239234646 -0700 |
|
20 @@ -12,8 +12,17 @@ |
|
21 # License for the specific language governing permissions and limitations |
|
22 # under the License. |
|
23 |
|
24 +from oslo_config import cfg |
|
25 from sqlalchemy import Boolean, Column, DateTime, ForeignKey |
|
26 +from sqlalchemy import dialects |
|
27 from sqlalchemy import Integer, MetaData, String, Table |
|
28 +from sqlalchemy import Text |
|
29 + |
|
30 +CONF = cfg.CONF |
|
31 + |
|
32 + |
|
33 +def TinyText(): |
|
34 + return Text().with_variant(dialects.mysql.TINYTEXT(), 'mysql') |
|
35 |
|
36 |
|
37 def define_tables(meta): |
|
38 @@ -31,7 +40,7 @@ def define_tables(meta): |
|
39 Column('instance_uuid', String(length=255)), |
|
40 Column('old_instance_type_id', Integer), |
|
41 Column('new_instance_type_id', Integer), |
|
42 - mysql_engine='InnoDB' |
|
43 + mysql_engine=CONF.database.mysql_storage_engine |
|
44 ) |
|
45 |
|
46 services = Table( |
|
47 @@ -47,7 +56,7 @@ def define_tables(meta): |
|
48 Column('report_count', Integer, nullable=False), |
|
49 Column('disabled', Boolean), |
|
50 Column('availability_zone', String(length=255)), |
|
51 - mysql_engine='InnoDB' |
|
52 + mysql_engine=CONF.database.mysql_storage_engine |
|
53 ) |
|
54 |
|
55 sm_flavors = Table( |
|
56 @@ -59,7 +68,7 @@ def define_tables(meta): |
|
57 Column('id', Integer, primary_key=True, nullable=False), |
|
58 Column('label', String(length=255)), |
|
59 Column('description', String(length=255)), |
|
60 - mysql_engine='InnoDB' |
|
61 + mysql_engine=CONF.database.mysql_storage_engine |
|
62 ) |
|
63 |
|
64 sm_backend_config = Table( |
|
65 @@ -74,7 +83,7 @@ def define_tables(meta): |
|
66 Column('sr_uuid', String(length=255)), |
|
67 Column('sr_type', String(length=255)), |
|
68 Column('config_params', String(length=2047)), |
|
69 - mysql_engine='InnoDB' |
|
70 + mysql_engine=CONF.database.mysql_storage_engine |
|
71 ) |
|
72 |
|
73 sm_volume = Table( |
|
74 @@ -90,7 +99,7 @@ def define_tables(meta): |
|
75 Column('backend_id', Integer, ForeignKey('sm_backend_config.id'), |
|
76 nullable=False), |
|
77 Column('vdi_uuid', String(length=255)), |
|
78 - mysql_engine='InnoDB' |
|
79 + mysql_engine=CONF.database.mysql_storage_engine |
|
80 ) |
|
81 |
|
82 snapshots = Table( |
|
83 @@ -109,7 +118,7 @@ def define_tables(meta): |
|
84 Column('scheduled_at', DateTime), |
|
85 Column('display_name', String(length=255)), |
|
86 Column('display_description', String(length=255)), |
|
87 - mysql_engine='InnoDB' |
|
88 + mysql_engine=CONF.database.mysql_storage_engine |
|
89 ) |
|
90 |
|
91 volume_types = Table( |
|
92 @@ -120,7 +129,7 @@ def define_tables(meta): |
|
93 Column('deleted', Boolean), |
|
94 Column('id', Integer, primary_key=True, nullable=False), |
|
95 Column('name', String(length=255)), |
|
96 - mysql_engine='InnoDB' |
|
97 + mysql_engine=CONF.database.mysql_storage_engine |
|
98 ) |
|
99 |
|
100 volume_metadata = Table( |
|
101 @@ -134,7 +143,7 @@ def define_tables(meta): |
|
102 nullable=False), |
|
103 Column('key', String(length=255)), |
|
104 Column('value', String(length=255)), |
|
105 - mysql_engine='InnoDB' |
|
106 + mysql_engine=CONF.database.mysql_storage_engine |
|
107 ) |
|
108 |
|
109 volume_type_extra_specs = Table( |
|
110 @@ -148,38 +157,69 @@ def define_tables(meta): |
|
111 nullable=False), |
|
112 Column('key', String(length=255)), |
|
113 Column('value', String(length=255)), |
|
114 - mysql_engine='InnoDB' |
|
115 + mysql_engine=CONF.database.mysql_storage_engine |
|
116 ) |
|
117 |
|
118 - volumes = Table( |
|
119 - 'volumes', meta, |
|
120 - Column('created_at', DateTime), |
|
121 - Column('updated_at', DateTime), |
|
122 - Column('deleted_at', DateTime), |
|
123 - Column('deleted', Boolean), |
|
124 - Column('id', String(length=36), primary_key=True, nullable=False), |
|
125 - Column('ec2_id', String(length=255)), |
|
126 - Column('user_id', String(length=255)), |
|
127 - Column('project_id', String(length=255)), |
|
128 - Column('host', String(length=255)), |
|
129 - Column('size', Integer), |
|
130 - Column('availability_zone', String(length=255)), |
|
131 - Column('instance_uuid', String(length=36)), |
|
132 - Column('mountpoint', String(length=255)), |
|
133 - Column('attach_time', String(length=255)), |
|
134 - Column('status', String(length=255)), |
|
135 - Column('attach_status', String(length=255)), |
|
136 - Column('scheduled_at', DateTime), |
|
137 - Column('launched_at', DateTime), |
|
138 - Column('terminated_at', DateTime), |
|
139 - Column('display_name', String(length=255)), |
|
140 - Column('display_description', String(length=255)), |
|
141 - Column('provider_location', String(length=256)), |
|
142 - Column('provider_auth', String(length=256)), |
|
143 - Column('snapshot_id', String(length=36)), |
|
144 - Column('volume_type_id', Integer), |
|
145 - mysql_engine='InnoDB' |
|
146 - ) |
|
147 + if CONF.database.mysql_storage_engine == 'NDBCLUSTER': |
|
148 + volumes = Table( |
|
149 + 'volumes', meta, |
|
150 + Column('created_at', DateTime), |
|
151 + Column('updated_at', DateTime), |
|
152 + Column('deleted_at', DateTime), |
|
153 + Column('deleted', Boolean), |
|
154 + Column('id', String(length=36), primary_key=True, nullable=False), |
|
155 + Column('ec2_id', String(length=255)), |
|
156 + Column('user_id', String(length=255)), |
|
157 + Column('project_id', String(length=255)), |
|
158 + Column('host', String(length=255)), |
|
159 + Column('size', Integer), |
|
160 + Column('availability_zone', TinyText()), |
|
161 + Column('instance_uuid', String(length=36)), |
|
162 + Column('mountpoint', TinyText()), |
|
163 + Column('attach_time', TinyText()), |
|
164 + Column('status', String(length=64)), |
|
165 + Column('attach_status', String(length=64)), |
|
166 + Column('scheduled_at', DateTime), |
|
167 + Column('launched_at', DateTime), |
|
168 + Column('terminated_at', DateTime), |
|
169 + Column('display_name', String(length=255)), |
|
170 + Column('display_description', TinyText()), |
|
171 + Column('provider_location', String(length=256)), |
|
172 + Column('provider_auth', String(length=256)), |
|
173 + Column('snapshot_id', String(length=36)), |
|
174 + Column('volume_type_id', Integer), |
|
175 + mysql_engine=CONF.database.mysql_storage_engine |
|
176 + ) |
|
177 + else: |
|
178 + volumes = Table( |
|
179 + 'volumes', meta, |
|
180 + Column('created_at', DateTime), |
|
181 + Column('updated_at', DateTime), |
|
182 + Column('deleted_at', DateTime), |
|
183 + Column('deleted', Boolean), |
|
184 + Column('id', String(length=36), primary_key=True, nullable=False), |
|
185 + Column('ec2_id', String(length=255)), |
|
186 + Column('user_id', String(length=255)), |
|
187 + Column('project_id', String(length=255)), |
|
188 + Column('host', String(length=255)), |
|
189 + Column('size', Integer), |
|
190 + Column('availability_zone', String(length=255)), |
|
191 + Column('instance_uuid', String(length=36)), |
|
192 + Column('mountpoint', String(length=255)), |
|
193 + Column('attach_time', String(length=255)), |
|
194 + Column('status', String(length=255)), |
|
195 + Column('attach_status', String(length=255)), |
|
196 + Column('scheduled_at', DateTime), |
|
197 + Column('launched_at', DateTime), |
|
198 + Column('terminated_at', DateTime), |
|
199 + Column('display_name', String(length=255)), |
|
200 + Column('display_description', String(length=255)), |
|
201 + Column('provider_location', String(length=256)), |
|
202 + Column('provider_auth', String(length=256)), |
|
203 + Column('snapshot_id', String(length=36)), |
|
204 + Column('volume_type_id', Integer), |
|
205 + mysql_engine=CONF.database.mysql_storage_engine |
|
206 + ) |
|
207 |
|
208 quotas = Table( |
|
209 'quotas', meta, |
|
210 @@ -191,7 +231,7 @@ def define_tables(meta): |
|
211 Column('project_id', String(length=255)), |
|
212 Column('resource', String(length=255), nullable=False), |
|
213 Column('hard_limit', Integer), |
|
214 - mysql_engine='InnoDB' |
|
215 + mysql_engine=CONF.database.mysql_storage_engine |
|
216 ) |
|
217 |
|
218 iscsi_targets = Table( |
|
219 @@ -205,7 +245,7 @@ def define_tables(meta): |
|
220 Column('host', String(length=255)), |
|
221 Column('volume_id', String(length=36), ForeignKey('volumes.id'), |
|
222 nullable=True), |
|
223 - mysql_engine='InnoDB' |
|
224 + mysql_engine=CONF.database.mysql_storage_engine |
|
225 ) |
|
226 return [sm_flavors, |
|
227 sm_backend_config, |
|
228 @@ -255,4 +295,5 @@ def upgrade(migrate_engine): |
|
229 migrate_engine.execute( |
|
230 "ALTER DATABASE %s DEFAULT CHARACTER SET utf8" % |
|
231 migrate_engine.url.database) |
|
232 - migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" % table) |
|
233 + migrate_engine.execute("ALTER TABLE %(db_table)s Engine=%(mysql_storage_engine)s" % |
|
234 + dict(db_table=table, mysql_storage_engine=CONF.database.mysql_storage_engine)) |
|
235 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py.orig 2016-08-25 08:57:08.652633578 -0700 |
|
236 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py 2016-08-25 08:56:32.039341151 -0700 |
|
237 @@ -12,9 +12,12 @@ |
|
238 # License for the specific language governing permissions and limitations |
|
239 # under the License. |
|
240 |
|
241 +from oslo_config import cfg |
|
242 from sqlalchemy import Boolean, Column, DateTime |
|
243 from sqlalchemy import MetaData, Integer, String, Table, ForeignKey |
|
244 |
|
245 +CONF = cfg.CONF |
|
246 + |
|
247 |
|
248 def upgrade(migrate_engine): |
|
249 meta = MetaData() |
|
250 @@ -34,7 +37,7 @@ def upgrade(migrate_engine): |
|
251 Column('resource', |
|
252 String(length=255)), |
|
253 Column('hard_limit', Integer(), nullable=True), |
|
254 - mysql_engine='InnoDB', |
|
255 + mysql_engine=CONF.database.mysql_storage_engine, |
|
256 mysql_charset='utf8', |
|
257 ) |
|
258 |
|
259 @@ -55,7 +58,7 @@ def upgrade(migrate_engine): |
|
260 Column('in_use', Integer(), nullable=False), |
|
261 Column('reserved', Integer(), nullable=False), |
|
262 Column('until_refresh', Integer(), nullable=True), |
|
263 - mysql_engine='InnoDB', |
|
264 + mysql_engine=CONF.database.mysql_storage_engine, |
|
265 mysql_charset='utf8', |
|
266 ) |
|
267 |
|
268 @@ -82,7 +85,7 @@ def upgrade(migrate_engine): |
|
269 String(length=255)), |
|
270 Column('delta', Integer(), nullable=False), |
|
271 Column('expire', DateTime(timezone=False)), |
|
272 - mysql_engine='InnoDB', |
|
273 + mysql_engine=CONF.database.mysql_storage_engine, |
|
274 mysql_charset='utf8', |
|
275 ) |
|
276 |
|
277 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py.orig 2016-08-25 08:57:16.312610448 -0700 |
|
278 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/003_glance_metadata.py 2016-08-25 08:56:32.040239306 -0700 |
|
279 @@ -12,9 +12,12 @@ |
|
280 # License for the specific language governing permissions and limitations |
|
281 # under the License. |
|
282 |
|
283 +from oslo_config import cfg |
|
284 from sqlalchemy import Column, DateTime, Text, Boolean |
|
285 from sqlalchemy import MetaData, Integer, String, Table, ForeignKey |
|
286 |
|
287 +CONF = cfg.CONF |
|
288 + |
|
289 |
|
290 def upgrade(migrate_engine): |
|
291 meta = MetaData() |
|
292 @@ -26,11 +29,11 @@ def upgrade(migrate_engine): |
|
293 Table('volumes', |
|
294 meta, |
|
295 Column('id', Integer(), primary_key=True, nullable=False), |
|
296 - mysql_engine='InnoDB') |
|
297 + mysql_engine=CONF.database.mysql_storage_engine) |
|
298 Table('snapshots', |
|
299 meta, |
|
300 Column('id', Integer(), primary_key=True, nullable=False), |
|
301 - mysql_engine='InnoDB') |
|
302 + mysql_engine=CONF.database.mysql_storage_engine) |
|
303 # Create new table |
|
304 volume_glance_metadata = Table( |
|
305 'volume_glance_metadata', |
|
306 @@ -45,7 +48,7 @@ def upgrade(migrate_engine): |
|
307 ForeignKey('snapshots.id')), |
|
308 Column('key', String(255)), |
|
309 Column('value', Text), |
|
310 - mysql_engine='InnoDB' |
|
311 + mysql_engine=CONF.database.mysql_storage_engine |
|
312 ) |
|
313 |
|
314 try: |
|
315 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py.orig 2016-08-25 08:57:23.692681043 -0700 |
|
316 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py 2016-08-25 08:56:32.041089963 -0700 |
|
317 @@ -13,9 +13,12 @@ |
|
318 # License for the specific language governing permissions and limitations |
|
319 # under the License. |
|
320 |
|
321 +from oslo_config import cfg |
|
322 from sqlalchemy import Boolean, Column, DateTime |
|
323 from sqlalchemy import MetaData, Integer, String, Table |
|
324 |
|
325 +CONF = cfg.CONF |
|
326 + |
|
327 |
|
328 def upgrade(migrate_engine): |
|
329 meta = MetaData() |
|
330 @@ -43,7 +46,7 @@ def upgrade(migrate_engine): |
|
331 Column('service', String(length=255)), |
|
332 Column('size', Integer()), |
|
333 Column('object_count', Integer()), |
|
334 - mysql_engine='InnoDB' |
|
335 + mysql_engine=CONF.database.mysql_storage_engine |
|
336 ) |
|
337 |
|
338 backups.create() |
|
339 --- 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 |
|
340 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/009_add_snapshot_metadata_table.py 2016-08-25 08:56:32.041930428 -0700 |
|
341 @@ -10,9 +10,12 @@ |
|
342 # License for the specific language governing permissions and limitations |
|
343 # under the License. |
|
344 |
|
345 +from oslo_config import cfg |
|
346 from sqlalchemy import Boolean, Column, DateTime |
|
347 from sqlalchemy import Integer, MetaData, String, Table, ForeignKey |
|
348 |
|
349 +CONF = cfg.CONF |
|
350 + |
|
351 |
|
352 def upgrade(migrate_engine): |
|
353 meta = MetaData() |
|
354 @@ -32,7 +35,7 @@ def upgrade(migrate_engine): |
|
355 nullable=False), |
|
356 Column('key', String(length=255)), |
|
357 Column('value', String(length=255)), |
|
358 - mysql_engine='InnoDB' |
|
359 + mysql_engine=CONF.database.mysql_storage_engine |
|
360 ) |
|
361 |
|
362 snapshot_metadata.create() |
|
363 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py.orig 2016-08-25 08:57:36.677754626 -0700 |
|
364 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/010_add_transfers_table.py 2016-08-25 08:56:32.042766768 -0700 |
|
365 @@ -10,9 +10,12 @@ |
|
366 # License for the specific language governing permissions and limitations |
|
367 # under the License. |
|
368 |
|
369 +from oslo_config import cfg |
|
370 from sqlalchemy import Boolean, Column, DateTime |
|
371 from sqlalchemy import MetaData, String, Table, ForeignKey |
|
372 |
|
373 +CONF = cfg.CONF |
|
374 + |
|
375 |
|
376 def upgrade(migrate_engine): |
|
377 meta = MetaData() |
|
378 @@ -34,7 +37,7 @@ def upgrade(migrate_engine): |
|
379 Column('salt', String(length=255)), |
|
380 Column('crypt_hash', String(length=255)), |
|
381 Column('expires_at', DateTime(timezone=False)), |
|
382 - mysql_engine='InnoDB', |
|
383 + mysql_engine=CONF.database.mysql_storage_engine, |
|
384 mysql_charset='utf8' |
|
385 ) |
|
386 |
|
387 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py.orig 2016-08-25 08:57:43.340435246 -0700 |
|
388 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/017_add_encryption_information.py 2016-08-25 08:56:32.043630671 -0700 |
|
389 @@ -13,9 +13,12 @@ |
|
390 # License for the specific language governing permissions and limitations |
|
391 # under the License. |
|
392 |
|
393 +from oslo_config import cfg |
|
394 from sqlalchemy import Column, ForeignKey, MetaData, Table |
|
395 from sqlalchemy import Boolean, DateTime, Integer, String |
|
396 |
|
397 +CONF = cfg.CONF |
|
398 + |
|
399 |
|
400 def upgrade(migrate_engine): |
|
401 meta = MetaData(bind=migrate_engine) |
|
402 @@ -51,9 +54,9 @@ def upgrade(migrate_engine): |
|
403 # scheme unless each volume type is associated with at most one |
|
404 # encryption scheme. |
|
405 Column('volume_type_id', String(length=36), |
|
406 - ForeignKey(volume_types.c.id), |
|
407 + ForeignKey(volume_types.c.id, name='encryption_ibfk_1'), |
|
408 primary_key=True, nullable=False), |
|
409 - mysql_engine='InnoDB', |
|
410 + mysql_engine=CONF.database.mysql_storage_engine, |
|
411 mysql_charset='utf8' |
|
412 ) |
|
413 |
|
414 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py.orig 2016-08-25 08:57:51.329501203 -0700 |
|
415 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/018_add_qos_specs.py 2016-08-25 08:56:32.044466643 -0700 |
|
416 @@ -14,9 +14,12 @@ |
|
417 # License for the specific language governing permissions and limitations |
|
418 # under the License. |
|
419 |
|
420 +from oslo_config import cfg |
|
421 from sqlalchemy import Boolean, Column, DateTime |
|
422 from sqlalchemy import ForeignKey, MetaData, String, Table |
|
423 |
|
424 +CONF = cfg.CONF |
|
425 + |
|
426 |
|
427 def upgrade(migrate_engine): |
|
428 """Add volume_type_rate_limit table.""" |
|
429 @@ -34,7 +37,7 @@ def upgrade(migrate_engine): |
|
430 ForeignKey('quality_of_service_specs.id')), |
|
431 Column('key', String(255)), |
|
432 Column('value', String(255)), |
|
433 - mysql_engine='InnoDB', |
|
434 + mysql_engine=CONF.database.mysql_storage_engine, |
|
435 mysql_charset='utf8' |
|
436 ) |
|
437 |
|
438 --- 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 |
|
439 +++ 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 |
|
440 @@ -10,9 +10,12 @@ |
|
441 # License for the specific language governing permissions and limitations |
|
442 # under the License. |
|
443 |
|
444 +from oslo_config import cfg |
|
445 from sqlalchemy import Boolean, Column, DateTime |
|
446 from sqlalchemy import Integer, MetaData, String, Table, ForeignKey |
|
447 |
|
448 +CONF = cfg.CONF |
|
449 + |
|
450 |
|
451 def upgrade(migrate_engine): |
|
452 meta = MetaData() |
|
453 @@ -32,7 +35,7 @@ def upgrade(migrate_engine): |
|
454 nullable=False), |
|
455 Column('key', String(length=255)), |
|
456 Column('value', String(length=255)), |
|
457 - mysql_engine='InnoDB', |
|
458 + mysql_engine=CONF.database.mysql_storage_engine, |
|
459 mysql_charset='utf8' |
|
460 ) |
|
461 |
|
462 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py.orig 2016-08-25 08:58:07.982189985 -0700 |
|
463 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/025_add_consistencygroup.py 2016-08-25 08:56:32.046312221 -0700 |
|
464 @@ -13,9 +13,12 @@ |
|
465 # License for the specific language governing permissions and limitations |
|
466 # under the License. |
|
467 |
|
468 +from oslo_config import cfg |
|
469 from sqlalchemy import Boolean, Column, DateTime |
|
470 from sqlalchemy import ForeignKey, MetaData, String, Table |
|
471 |
|
472 +CONF = cfg.CONF |
|
473 + |
|
474 |
|
475 def upgrade(migrate_engine): |
|
476 meta = MetaData() |
|
477 @@ -37,7 +40,7 @@ def upgrade(migrate_engine): |
|
478 Column('description', String(length=255)), |
|
479 Column('volume_type_id', String(length=255)), |
|
480 Column('status', String(length=255)), |
|
481 - mysql_engine='InnoDB', |
|
482 + mysql_engine=CONF.database.mysql_storage_engine, |
|
483 mysql_charset='utf8', |
|
484 ) |
|
485 |
|
486 @@ -59,7 +62,7 @@ def upgrade(migrate_engine): |
|
487 Column('name', String(length=255)), |
|
488 Column('description', String(length=255)), |
|
489 Column('status', String(length=255)), |
|
490 - mysql_engine='InnoDB', |
|
491 + mysql_engine=CONF.database.mysql_storage_engine, |
|
492 mysql_charset='utf8', |
|
493 ) |
|
494 |
|
495 --- 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 |
|
496 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/032_add_volume_type_projects.py 2016-08-25 08:56:32.047162211 -0700 |
|
497 @@ -10,9 +10,12 @@ |
|
498 # License for the specific language governing permissions and limitations |
|
499 # under the License. |
|
500 |
|
501 +from oslo_config import cfg |
|
502 from sqlalchemy import Boolean, Column, DateTime, UniqueConstraint |
|
503 from sqlalchemy import Integer, MetaData, String, Table, ForeignKey |
|
504 |
|
505 +CONF = cfg.CONF |
|
506 + |
|
507 |
|
508 def upgrade(migrate_engine): |
|
509 meta = MetaData() |
|
510 @@ -35,7 +38,7 @@ def upgrade(migrate_engine): |
|
511 Column('project_id', String(length=255)), |
|
512 Column('deleted', Boolean(create_constraint=True, name=None)), |
|
513 UniqueConstraint('volume_type_id', 'project_id', 'deleted'), |
|
514 - mysql_engine='InnoDB', |
|
515 + mysql_engine=CONF.database.mysql_storage_engine, |
|
516 ) |
|
517 |
|
518 volume_type_projects.create() |
|
519 --- 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 |
|
520 +++ 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 |
|
521 @@ -10,9 +10,12 @@ |
|
522 # License for the specific language governing permissions and limitations |
|
523 # under the License. |
|
524 |
|
525 +from oslo_config import cfg |
|
526 from sqlalchemy import Column, DateTime, Integer |
|
527 from sqlalchemy import MetaData, String, Table, UniqueConstraint |
|
528 |
|
529 +CONF = cfg.CONF |
|
530 + |
|
531 |
|
532 def upgrade(migrate_engine): |
|
533 meta = MetaData() |
|
534 @@ -29,7 +32,7 @@ def upgrade(migrate_engine): |
|
535 Column('key', String(length=255), nullable=False), |
|
536 Column('value', String(length=255)), |
|
537 UniqueConstraint('initiator', 'namespace', 'key'), |
|
538 - mysql_engine='InnoDB', |
|
539 + mysql_engine=CONF.database.mysql_storage_engine, |
|
540 mysql_charset='utf8' |
|
541 ) |
|
542 |
|
543 --- cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py.orig 2016-08-25 08:58:30.054762283 -0700 |
|
544 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/040_add_volume_attachment.py 2016-08-25 08:56:32.049123043 -0700 |
|
545 @@ -16,11 +16,13 @@ |
|
546 import datetime |
|
547 import uuid |
|
548 |
|
549 +from oslo_config import cfg |
|
550 import six |
|
551 from sqlalchemy import Boolean, Column, DateTime |
|
552 from sqlalchemy import ForeignKey, MetaData, String, Table |
|
553 |
|
554 CREATED_AT = datetime.datetime.now() # noqa |
|
555 +CONF = cfg.CONF |
|
556 |
|
557 |
|
558 def upgrade(migrate_engine): |
|
559 @@ -51,7 +53,7 @@ def upgrade(migrate_engine): |
|
560 Column('detach_time', DateTime), |
|
561 Column('attach_mode', String(length=36)), |
|
562 Column('attach_status', String(length=255)), |
|
563 - mysql_engine='InnoDB' |
|
564 + mysql_engine=CONF.database.mysql_storage_engine |
|
565 ) |
|
566 |
|
567 volume_attachment.create() |
|
568 --- 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 |
|
569 +++ 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 |
|
570 @@ -12,9 +12,12 @@ |
|
571 # License for the specific language governing permissions and limitations |
|
572 # under the License. |
|
573 |
|
574 +from oslo_config import cfg |
|
575 from sqlalchemy import Column, DateTime, Integer |
|
576 from sqlalchemy import MetaData, String, Table |
|
577 |
|
578 +CONF = cfg.CONF |
|
579 + |
|
580 |
|
581 def upgrade(migrate_engine): |
|
582 meta = MetaData() |
|
583 @@ -30,7 +33,7 @@ def upgrade(migrate_engine): |
|
584 Column('volume_id', String(length=36), nullable=False), |
|
585 Column('size', Integer, nullable=False), |
|
586 Column('last_used', DateTime, nullable=False), |
|
587 - mysql_engine='InnoDB', |
|
588 + mysql_engine=CONF.database.mysql_storage_engine, |
|
589 mysql_charset='utf8' |
|
590 ) |
|
591 |
|
592 --- 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 |
|
593 +++ cinder-8.0.0/cinder/db/sqlalchemy/migrate_repo/versions/067_readd_iscsi_targets_table.py 2016-08-25 08:56:32.050821951 -0700 |
|
594 @@ -10,9 +10,12 @@ |
|
595 # License for the specific language governing permissions and limitations |
|
596 # under the License. |
|
597 |
|
598 +from oslo_config import cfg |
|
599 from sqlalchemy import Boolean, Column, DateTime, ForeignKey |
|
600 from sqlalchemy import Integer, MetaData, String, Table |
|
601 |
|
602 +CONF = cfg.CONF |
|
603 + |
|
604 |
|
605 def upgrade(migrate_engine): |
|
606 meta = MetaData() |
|
607 @@ -30,7 +33,7 @@ def upgrade(migrate_engine): |
|
608 Column('host', String(length=255)), |
|
609 Column('volume_id', String(length=36), ForeignKey('volumes.id'), |
|
610 nullable=True), |
|
611 - mysql_engine='InnoDB', |
|
612 + mysql_engine=CONF.database.mysql_storage_engine, |
|
613 mysql_charset='utf8' |
|
614 ) |
|
615 |
|
616 --- cinder-8.0.0/cinder/db/sqlalchemy/models.py.orig 2016-08-25 08:58:53.030663246 -0700 |
|
617 +++ cinder-8.0.0/cinder/db/sqlalchemy/models.py 2016-08-25 10:02:19.406765223 -0700 |
|
618 @@ -24,6 +24,7 @@ from oslo_config import cfg |
|
619 from oslo_db.sqlalchemy import models |
|
620 from oslo_utils import timeutils |
|
621 from sqlalchemy import Column, Integer, String, Text, schema |
|
622 +from sqlalchemy import dialects |
|
623 from sqlalchemy.ext.declarative import declarative_base |
|
624 from sqlalchemy import ForeignKey, DateTime, Boolean |
|
625 from sqlalchemy.orm import relationship, backref, validates |
|
626 @@ -33,11 +34,15 @@ CONF = cfg.CONF |
|
627 BASE = declarative_base() |
|
628 |
|
629 |
|
630 +def TinyText(): |
|
631 + return Text().with_variant(dialects.mysql.TINYTEXT(), 'mysql') |
|
632 + |
|
633 + |
|
634 class CinderBase(models.TimestampMixin, |
|
635 models.ModelBase): |
|
636 """Base class for Cinder Models.""" |
|
637 |
|
638 - __table_args__ = {'mysql_engine': 'InnoDB'} |
|
639 + __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine} |
|
640 |
|
641 # TODO(rpodolyaka): reuse models.SoftDeleteMixin in the next stage |
|
642 # of implementing of BP db-cleanup |
|
643 @@ -150,9 +155,16 @@ class Volume(BASE, CinderBase): |
|
644 |
|
645 host = Column(String(255)) # , ForeignKey('hosts.id')) |
|
646 size = Column(Integer) |
|
647 - availability_zone = Column(String(255)) # TODO(vish): foreign key? |
|
648 - status = Column(String(255)) # TODO(vish): enum? |
|
649 - attach_status = Column(String(255)) # TODO(vish): enum |
|
650 + |
|
651 + if CONF.database.mysql_storage_engine == 'NDBCLUSTER': |
|
652 + availability_zone = Column(TinyText()) |
|
653 + status = Column(String(64)) |
|
654 + attach_status = Column(String(64)) |
|
655 + else: |
|
656 + availability_zone = Column(String(255)) # TODO(vish): foreign key? |
|
657 + status = Column(String(255)) # TODO(vish): enum? |
|
658 + attach_status = Column(String(255)) # TODO(vish): enum |
|
659 + |
|
660 migration_status = Column(String(255)) |
|
661 |
|
662 scheduled_at = Column(DateTime) |
|
663 @@ -160,7 +172,11 @@ class Volume(BASE, CinderBase): |
|
664 terminated_at = Column(DateTime) |
|
665 |
|
666 display_name = Column(String(255)) |
|
667 - display_description = Column(String(255)) |
|
668 + |
|
669 + if CONF.database.mysql_storage_engine == 'NDBCLUSTER': |
|
670 + display_description = Column(TinyText()) |
|
671 + else: |
|
672 + display_description = Column(String(255)) |
|
673 |
|
674 provider_location = Column(String(255)) |
|
675 provider_auth = Column(String(255)) |
|
676 @@ -592,7 +608,7 @@ class DriverInitiatorData(BASE, models.T |
|
677 __tablename__ = 'driver_initiator_data' |
|
678 __table_args__ = ( |
|
679 schema.UniqueConstraint("initiator", "namespace", "key"), |
|
680 - {'mysql_engine': 'InnoDB'} |
|
681 + {'mysql_engine': CONF.database.mysql_storage_engine} |
|
682 ) |
|
683 id = Column(Integer, primary_key=True, nullable=False) |
|
684 initiator = Column(String(255), index=True, nullable=False) |
|
685 --- cinder-8.0.0/cinder/tests/unit/test_migrations.py.orig 2016-08-25 08:59:01.630728551 -0700 |
|
686 +++ cinder-8.0.0/cinder/tests/unit/test_migrations.py 2016-08-25 08:56:32.054462196 -0700 |
|
687 @@ -25,6 +25,7 @@ import uuid |
|
688 import fixtures |
|
689 from migrate.versioning import api as migration_api |
|
690 from migrate.versioning import repository |
|
691 +from oslo_config import cfg |
|
692 from oslo_db.sqlalchemy import test_base |
|
693 from oslo_db.sqlalchemy import test_migrations |
|
694 from oslo_db.sqlalchemy import utils as db_utils |
|
695 @@ -33,6 +34,8 @@ import sqlalchemy |
|
696 from cinder.db import migration |
|
697 import cinder.db.sqlalchemy.migrate_repo |
|
698 |
|
699 +CONF = cfg.CONF |
|
700 + |
|
701 |
|
702 class MigrationsMixin(test_migrations.WalkVersionsMixin): |
|
703 """Test sqlalchemy-migrate migrations.""" |
|
704 @@ -842,8 +845,9 @@ class TestMysqlMigrations(test_base.MySQ |
|
705 "SELECT count(*) " |
|
706 "from information_schema.TABLES " |
|
707 "where TABLE_SCHEMA='openstack_citest' " |
|
708 - "and ENGINE!='InnoDB' " |
|
709 - "and TABLE_NAME!='migrate_version'") |
|
710 + "and ENGINE!='%(mysql_storage_engine)s' " |
|
711 + "and TABLE_NAME!='migrate_version'" % |
|
712 + dict(mysql_storage_engine=CONF.database.mysql_storage_engine)) |
|
713 count = noninnodb.scalar() |
|
714 self.assertEqual(count, 0, "%d non InnoDB tables created" % count) |
|
715 |