1 This patchset is for bug: |
|
2 |
|
3 22725863 - Glance needs to support MySQL Cluster |
|
4 |
|
5 This fixes the following aspects of Glance: |
|
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/glance/+bug/1564110 |
|
16 |
|
17 |
|
18 --- glance-2015.1.2/glance/tests/unit/test_migrations.py.orig 2016-07-29 11:30:42.506075746 -0600 |
|
19 +++ glance-2015.1.2/glance/tests/unit/test_migrations.py 2016-07-28 18:16:26.555277376 -0600 |
|
20 @@ -127,7 +127,7 @@ class MigrationsMixin(test_migrations.Wa |
|
21 sqlalchemy.Boolean(), |
|
22 nullable=False, |
|
23 default=False), |
|
24 - mysql_engine='InnoDB') |
|
25 + mysql_engine=CONF.database.mysql_storage_engine) |
|
26 images_001.create() |
|
27 |
|
28 def test_version_control_existing_db(self): |
|
29 @@ -1650,10 +1650,10 @@ class TestMysqlMigrations(test_base.MySQ |
|
30 noninnodb = self.migrate_engine.execute( |
|
31 "SELECT count(*) " |
|
32 "FROM information_schema.TABLES " |
|
33 - "WHERE TABLE_SCHEMA='%s' " |
|
34 - "AND ENGINE!='InnoDB' " |
|
35 + "WHERE TABLE_SCHEMA='%(table_schema)s' " |
|
36 + "AND ENGINE!='%(mysql_storage_engine)s' " |
|
37 "AND TABLE_NAME!='migrate_version'" |
|
38 - % self.migrate_engine.url.database) |
|
39 + % dict(table_schema=self.migrate_engine.url.database, mysql_storage_engine=CONF.database.mysql_storage_engine)) |
|
40 count = noninnodb.scalar() |
|
41 self.assertEqual(count, 0, "%d non InnoDB tables created" % count) |
|
42 |
|
43 --- glance-2015.1.2/glance/db/sqlalchemy/models_metadef.py.orig 2016-07-29 11:30:50.672701806 -0600 |
|
44 +++ glance-2015.1.2/glance/db/sqlalchemy/models_metadef.py 2016-07-29 11:37:23.040809599 -0600 |
|
45 @@ -16,6 +16,7 @@ |
|
46 SQLAlchemy models for glance metadata schema |
|
47 """ |
|
48 |
|
49 +from oslo_config import cfg |
|
50 from oslo_db.sqlalchemy import models |
|
51 from oslo_utils import timeutils |
|
52 from sqlalchemy import Boolean |
|
53 @@ -31,6 +32,7 @@ from sqlalchemy import Text |
|
54 |
|
55 from glance.db.sqlalchemy.models import JSONEncodedDict |
|
56 |
|
57 +CONF = cfg.CONF |
|
58 |
|
59 class DictionaryBase(models.ModelBase): |
|
60 metadata = None |
|
61 @@ -48,7 +50,7 @@ BASE_DICT = declarative_base(cls=Diction |
|
62 class GlanceMetadefBase(models.TimestampMixin): |
|
63 """Base class for Glance Metadef Models.""" |
|
64 |
|
65 - __table_args__ = {'mysql_engine': 'InnoDB'} |
|
66 + __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine} |
|
67 __table_initialized__ = False |
|
68 __protected_attributes__ = set(["created_at", "updated_at"]) |
|
69 |
|
70 --- glance-2015.1.2/glance/db/sqlalchemy/models_artifacts.py.orig 2016-07-29 11:30:58.519236555 -0600 |
|
71 +++ glance-2015.1.2/glance/db/sqlalchemy/models_artifacts.py 2016-07-28 18:16:26.556002509 -0600 |
|
72 @@ -14,6 +14,8 @@ |
|
73 |
|
74 import uuid |
|
75 |
|
76 +from oslo_config import cfg |
|
77 +from oslo_db import options as db_options |
|
78 from oslo_db.sqlalchemy import models |
|
79 from oslo_utils import timeutils |
|
80 from sqlalchemy import BigInteger |
|
81 @@ -36,6 +38,9 @@ from glance.common import semver_db |
|
82 from glance import i18n |
|
83 from oslo_log import log as os_logging |
|
84 |
|
85 +CONF = cfg.CONF |
|
86 +db_options.set_defaults(CONF) |
|
87 + |
|
88 BASE = declarative.declarative_base() |
|
89 LOG = os_logging.getLogger(__name__) |
|
90 _LW = i18n._LW |
|
91 @@ -44,7 +49,7 @@ _LW = i18n._LW |
|
92 class ArtifactBase(models.ModelBase, models.TimestampMixin): |
|
93 """Base class for Artifact Models.""" |
|
94 |
|
95 - __table_args__ = {'mysql_engine': 'InnoDB'} |
|
96 + __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine} |
|
97 __table_initialized__ = False |
|
98 __protected_attributes__ = set([ |
|
99 "created_at", "updated_at"]) |
|
100 @@ -102,7 +107,7 @@ class Artifact(BASE, ArtifactBase): |
|
101 Index('ix_artifact_state', 'state'), |
|
102 Index('ix_artifact_owner', 'owner'), |
|
103 Index('ix_artifact_visibility', 'visibility'), |
|
104 - {'mysql_engine': 'InnoDB'}) |
|
105 + {'mysql_engine': CONF.database.mysql_storage_engine}) |
|
106 |
|
107 __protected_attributes__ = ArtifactBase.__protected_attributes__.union( |
|
108 set(['published_at', 'deleted_at'])) |
|
109 @@ -219,7 +224,7 @@ class ArtifactDependency(BASE, ArtifactB |
|
110 'artifact_dest'), |
|
111 Index('ix_artifact_dependencies_direct_dependencies', |
|
112 'artifact_source', 'is_direct'), |
|
113 - {'mysql_engine': 'InnoDB'}) |
|
114 + {'mysql_engine': CONF.database.mysql_storage_engine}) |
|
115 |
|
116 id = Column(String(36), primary_key=True, nullable=False, |
|
117 default=lambda: str(uuid.uuid4())) |
|
118 @@ -248,7 +253,7 @@ class ArtifactTag(BASE, ArtifactBase): |
|
119 __table_args__ = (Index('ix_artifact_tags_artifact_id', 'artifact_id'), |
|
120 Index('ix_artifact_tags_artifact_id_tag_value', |
|
121 'artifact_id', 'value'), |
|
122 - {'mysql_engine': 'InnoDB'},) |
|
123 + {'mysql_engine': CONF.database.mysql_storage_engine},) |
|
124 |
|
125 id = Column(String(36), primary_key=True, nullable=False, |
|
126 default=lambda: str(uuid.uuid4())) |
|
127 @@ -265,7 +270,7 @@ class ArtifactProperty(BASE, ArtifactBas |
|
128 __table_args__ = ( |
|
129 Index('ix_artifact_properties_artifact_id', 'artifact_id'), |
|
130 Index('ix_artifact_properties_name', 'name'), |
|
131 - {'mysql_engine': 'InnoDB'},) |
|
132 + {'mysql_engine': CONF.database.mysql_storage_engine},) |
|
133 id = Column(String(36), primary_key=True, nullable=False, |
|
134 default=lambda: str(uuid.uuid4())) |
|
135 artifact_id = Column(String(36), ForeignKey('artifacts.id'), |
|
136 @@ -287,7 +292,7 @@ class ArtifactBlob(BASE, ArtifactBase): |
|
137 __table_args__ = ( |
|
138 Index('ix_artifact_blobs_artifact_id', 'artifact_id'), |
|
139 Index('ix_artifact_blobs_name', 'name'), |
|
140 - {'mysql_engine': 'InnoDB'},) |
|
141 + {'mysql_engine': CONF.database.mysql_storage_engine},) |
|
142 id = Column(String(36), primary_key=True, nullable=False, |
|
143 default=lambda: str(uuid.uuid4())) |
|
144 artifact_id = Column(String(36), ForeignKey('artifacts.id'), |
|
145 @@ -306,7 +311,7 @@ class ArtifactBlobLocation(BASE, Artifac |
|
146 __tablename__ = 'artifact_blob_locations' |
|
147 __table_args__ = (Index('ix_artifact_blob_locations_blob_id', |
|
148 'blob_id'), |
|
149 - {'mysql_engine': 'InnoDB'}) |
|
150 + {'mysql_engine': CONF.database.mysql_storage_engine}) |
|
151 |
|
152 id = Column(String(36), primary_key=True, nullable=False, |
|
153 default=lambda: str(uuid.uuid4())) |
|
154 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/007_add_owner.py.orig 2016-07-29 11:31:06.067376033 -0600 |
|
155 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/007_add_owner.py 2016-07-29 11:38:21.570131052 -0600 |
|
156 @@ -14,12 +14,14 @@ |
|
157 # under the License. |
|
158 |
|
159 from migrate.changeset import * # noqa |
|
160 +from oslo_config import cfg |
|
161 from sqlalchemy import * # noqa |
|
162 |
|
163 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
164 Boolean, DateTime, BigInteger, Integer, String, |
|
165 Text, from_migration_import) # noqa |
|
166 |
|
167 +CONF = cfg.CONF |
|
168 |
|
169 def get_images_table(meta): |
|
170 """ |
|
171 @@ -50,7 +52,7 @@ def get_images_table(meta): |
|
172 index=True), |
|
173 Column('checksum', String(32)), |
|
174 Column('owner', String(255)), |
|
175 - mysql_engine='InnoDB', |
|
176 + mysql_engine=CONF.database.mysql_storage_engine, |
|
177 extend_existing=True) |
|
178 |
|
179 return images |
|
180 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/003_add_disk_format.py.orig 2016-07-29 11:31:13.058662840 -0600 |
|
181 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/003_add_disk_format.py 2016-07-29 11:38:43.705439106 -0600 |
|
182 @@ -14,11 +14,13 @@ |
|
183 # under the License. |
|
184 |
|
185 from migrate.changeset import * # noqa |
|
186 +from oslo_config import cfg |
|
187 from sqlalchemy import * # noqa |
|
188 |
|
189 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
190 Boolean, DateTime, Integer, String, Text, from_migration_import) # noqa |
|
191 |
|
192 +CONF = cfg.CONF |
|
193 |
|
194 def get_images_table(meta): |
|
195 """ |
|
196 @@ -47,7 +49,7 @@ def get_images_table(meta): |
|
197 nullable=False, |
|
198 default=False, |
|
199 index=True), |
|
200 - mysql_engine='InnoDB', |
|
201 + mysql_engine=CONF.database.mysql_storage_engine, |
|
202 extend_existing=True) |
|
203 |
|
204 return images |
|
205 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/005_size_big_integer.py.orig 2016-07-29 11:31:20.152951372 -0600 |
|
206 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/005_size_big_integer.py 2016-07-29 11:39:04.202176317 -0600 |
|
207 @@ -14,12 +14,14 @@ |
|
208 # under the License. |
|
209 |
|
210 from migrate.changeset import * # noqa |
|
211 +from oslo_config import cfg |
|
212 from sqlalchemy import * # noqa |
|
213 |
|
214 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
215 Boolean, DateTime, BigInteger, Integer, String, |
|
216 Text, from_migration_import) # noqa |
|
217 |
|
218 +CONF = cfg.CONF |
|
219 |
|
220 def get_images_table(meta): |
|
221 """ |
|
222 @@ -48,7 +50,7 @@ def get_images_table(meta): |
|
223 nullable=False, |
|
224 default=False, |
|
225 index=True), |
|
226 - mysql_engine='InnoDB', |
|
227 + mysql_engine=CONF.database.mysql_storage_engine, |
|
228 extend_existing=True) |
|
229 |
|
230 return images |
|
231 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/022_image_member_index.py.orig 2016-07-29 11:31:30.015287184 -0600 |
|
232 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/022_image_member_index.py 2016-07-29 11:39:26.850998479 -0600 |
|
233 @@ -16,11 +16,13 @@ |
|
234 import re |
|
235 |
|
236 from migrate.changeset import UniqueConstraint |
|
237 +from oslo_config import cfg |
|
238 from oslo_db import exception as db_exception |
|
239 from sqlalchemy import and_, func, orm |
|
240 from sqlalchemy import MetaData, Table |
|
241 from sqlalchemy.exc import OperationalError, ProgrammingError |
|
242 |
|
243 +CONF = cfg.CONF |
|
244 |
|
245 NEW_KEYNAME = 'image_members_image_id_member_deleted_at_key' |
|
246 ORIGINAL_KEYNAME_RE = re.compile('image_members_image_id.*_key') |
|
247 @@ -28,21 +30,24 @@ ORIGINAL_KEYNAME_RE = re.compile('image_ |
|
248 |
|
249 def upgrade(migrate_engine): |
|
250 image_members = _get_image_members_table(migrate_engine) |
|
251 - |
|
252 - if migrate_engine.name in ('mysql', 'postgresql'): |
|
253 - try: |
|
254 - UniqueConstraint('image_id', |
|
255 - name=_get_original_keyname(migrate_engine.name), |
|
256 - table=image_members).drop() |
|
257 - except (OperationalError, ProgrammingError, db_exception.DBError): |
|
258 - UniqueConstraint('image_id', |
|
259 - name=_infer_original_keyname(image_members), |
|
260 - table=image_members).drop() |
|
261 - UniqueConstraint('image_id', |
|
262 - 'member', |
|
263 - 'deleted_at', |
|
264 - name=NEW_KEYNAME, |
|
265 - table=image_members).create() |
|
266 + # MySQL Cluster, a.k.a. NDB does not support the original constraint and index. |
|
267 + # Only if we are not using MySQL Cluster, will the index be dropped. |
|
268 + if CONF.database.mysql_storage_engine != "NDBCLUSTER": |
|
269 + if migrate_engine.name in ('mysql', 'postgresql'): |
|
270 + try: |
|
271 + UniqueConstraint('image_id', |
|
272 + name=_get_original_keyname(migrate_engine.name), |
|
273 + table=image_members).drop() |
|
274 + except (OperationalError, ProgrammingError, db_exception.DBError): |
|
275 + UniqueConstraint('image_id', |
|
276 + name=_infer_original_keyname(image_members), |
|
277 + table=image_members).drop() |
|
278 + |
|
279 + UniqueConstraint('image_id', |
|
280 + 'member', |
|
281 + 'deleted_at', |
|
282 + name=NEW_KEYNAME, |
|
283 + table=image_members).create() |
|
284 |
|
285 |
|
286 def downgrade(migrate_engine): |
|
287 @@ -53,10 +58,13 @@ def downgrade(migrate_engine): |
|
288 UniqueConstraint('image_id', |
|
289 name=NEW_KEYNAME, |
|
290 table=image_members).drop() |
|
291 - UniqueConstraint('image_id', |
|
292 - 'member', |
|
293 - name=_get_original_keyname(migrate_engine.name), |
|
294 - table=image_members).create() |
|
295 + # MySQL Cluster, a.k.a. NDB does not support the original constraint and index. |
|
296 + # Only if we are not using MySQL Cluster, will the index be created. |
|
297 + if CONF.database.mysql_storage_engine != "NDBCLUSTER": |
|
298 + UniqueConstraint('image_id', |
|
299 + 'member', |
|
300 + name=_get_original_keyname(migrate_engine.name), |
|
301 + table=image_members).create() |
|
302 |
|
303 |
|
304 def _get_image_members_table(migrate_engine): |
|
305 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/040_add_changes_to_satisfy_metadefs_tags.py.orig 2016-07-29 11:31:37.098719056 -0600 |
|
306 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/040_add_changes_to_satisfy_metadefs_tags.py 2016-07-29 11:40:01.035865900 -0600 |
|
307 @@ -10,15 +10,18 @@ |
|
308 # License for the specific language governing permissions and limitations |
|
309 # under the License. |
|
310 |
|
311 - |
|
312 +from oslo_config import cfg |
|
313 import sqlalchemy |
|
314 from sqlalchemy import (Table, Index) |
|
315 |
|
316 +CONF = cfg.CONF |
|
317 |
|
318 def upgrade(migrate_engine): |
|
319 if migrate_engine.name == 'mysql': |
|
320 meta = sqlalchemy.MetaData() |
|
321 meta.bind = migrate_engine |
|
322 metadef_tags = Table('metadef_tags', meta, autoload=True) |
|
323 - Index('namespace_id', metadef_tags.c.namespace_id, |
|
324 - metadef_tags.c.name).drop() |
|
325 + # MySQL Cluster, a.k.a NDB, does not support this index drop. |
|
326 + if CONF.database.mysql_storage_engine != "NDBCLUSTER": |
|
327 + Index('namespace_id', metadef_tags.c.namespace_id, |
|
328 + metadef_tags.c.name).drop() |
|
329 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/001_add_images_table.py.orig 2016-07-29 11:31:43.878178070 -0600 |
|
330 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/001_add_images_table.py 2016-07-29 11:40:32.274838992 -0600 |
|
331 @@ -13,11 +13,13 @@ |
|
332 # License for the specific language governing permissions and limitations |
|
333 # under the License. |
|
334 |
|
335 +from oslo_config import cfg |
|
336 from sqlalchemy.schema import (Column, MetaData, Table) |
|
337 |
|
338 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
339 Boolean, DateTime, Integer, String, Text, create_tables, drop_tables) # noqa |
|
340 |
|
341 +CONF = cfg.CONF |
|
342 |
|
343 def define_images_table(meta): |
|
344 images = Table('images', |
|
345 @@ -41,7 +43,7 @@ def define_images_table(meta): |
|
346 nullable=False, |
|
347 default=False, |
|
348 index=True), |
|
349 - mysql_engine='InnoDB', |
|
350 + mysql_engine=CONF.database.mysql_storage_engine, |
|
351 extend_existing=True) |
|
352 |
|
353 return images |
|
354 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/014_add_image_tags_table.py.orig 2016-07-29 11:31:50.742219079 -0600 |
|
355 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/014_add_image_tags_table.py 2016-07-29 11:40:52.393996743 -0600 |
|
356 @@ -13,10 +13,12 @@ |
|
357 # License for the specific language governing permissions and limitations |
|
358 # under the License. |
|
359 |
|
360 +from oslo_config import cfg |
|
361 from sqlalchemy import schema |
|
362 |
|
363 from glance.db.sqlalchemy.migrate_repo import schema as glance_schema |
|
364 |
|
365 +CONF = cfg.CONF |
|
366 |
|
367 def define_image_tags_table(meta): |
|
368 # Load the images table so the foreign key can be set up properly |
|
369 @@ -46,7 +48,7 @@ def define_image_tags_table(meta): |
|
370 glance_schema.Boolean(), |
|
371 nullable=False, |
|
372 default=False), |
|
373 - mysql_engine='InnoDB') |
|
374 + mysql_engine=CONF.database.mysql_storage_engine) |
|
375 |
|
376 schema.Index('ix_image_tags_image_id', |
|
377 image_tags.c.image_id) |
|
378 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/038_add_metadef_tags_table.py.orig 2016-07-29 11:31:57.299857482 -0600 |
|
379 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/038_add_metadef_tags_table.py 2016-07-29 11:41:20.227494209 -0600 |
|
380 @@ -12,28 +12,46 @@ |
|
381 # License for the specific language governing permissions and limitations |
|
382 # under the License. |
|
383 |
|
384 +from oslo_config import cfg |
|
385 from sqlalchemy.schema import ( |
|
386 Column, Index, MetaData, Table, UniqueConstraint) # noqa |
|
387 |
|
388 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
389 DateTime, Integer, String, create_tables, drop_tables) # noqa |
|
390 |
|
391 +CONF = cfg.CONF |
|
392 |
|
393 def define_metadef_tags_table(meta): |
|
394 _constr_kwargs = {} |
|
395 - metadef_tags = Table('metadef_tags', |
|
396 - meta, |
|
397 - Column('id', Integer(), primary_key=True, |
|
398 - nullable=False), |
|
399 - Column('namespace_id', Integer(), |
|
400 - nullable=False), |
|
401 - Column('name', String(80), nullable=False), |
|
402 - Column('created_at', DateTime(), nullable=False), |
|
403 - Column('updated_at', DateTime()), |
|
404 - UniqueConstraint('namespace_id', 'name', |
|
405 - **_constr_kwargs), |
|
406 - mysql_engine='InnoDB', |
|
407 - extend_existing=False) |
|
408 + |
|
409 + # MySQL Cluster, a.k.a. NDB, does not support this constraint. |
|
410 + # If MySQL Cluster is enabled, the constraint will not be configured. |
|
411 + if CONF.database.mysql_storage_engine == "NDBCLUSTER": |
|
412 + metadef_tags = Table('metadef_tags', |
|
413 + meta, |
|
414 + Column('id', Integer(), primary_key=True, |
|
415 + nullable=False), |
|
416 + Column('namespace_id', Integer(), |
|
417 + nullable=False), |
|
418 + Column('name', String(80), nullable=False), |
|
419 + Column('created_at', DateTime(), nullable=False), |
|
420 + Column('updated_at', DateTime()), |
|
421 + mysql_engine=CONF.database.mysql_storage_engine, |
|
422 + extend_existing=False) |
|
423 + else: |
|
424 + metadef_tags = Table('metadef_tags', |
|
425 + meta, |
|
426 + Column('id', Integer(), primary_key=True, |
|
427 + nullable=False), |
|
428 + Column('namespace_id', Integer(), |
|
429 + nullable=False), |
|
430 + Column('name', String(80), nullable=False), |
|
431 + Column('created_at', DateTime(), nullable=False), |
|
432 + Column('updated_at', DateTime()), |
|
433 + UniqueConstraint('namespace_id', 'name', |
|
434 + **_constr_kwargs), |
|
435 + mysql_engine=CONF.database.mysql_storage_engine, |
|
436 + extend_existing=False) |
|
437 |
|
438 if meta.bind.name != 'ibm_db_sa': |
|
439 Index('ix_tags_namespace_id_name', |
|
440 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/006_key_to_name.py.orig 2016-07-29 11:32:03.190044222 -0600 |
|
441 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/006_key_to_name.py 2016-07-29 11:41:49.183401048 -0600 |
|
442 @@ -14,11 +14,13 @@ |
|
443 # under the License. |
|
444 |
|
445 from migrate.changeset import * # noqa |
|
446 +from oslo_config import cfg |
|
447 from sqlalchemy import * # noqa |
|
448 |
|
449 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
450 Boolean, DateTime, Integer, String, Text, from_migration_import) # noqa |
|
451 |
|
452 +CONF = cfg.CONF |
|
453 |
|
454 def get_images_table(meta): |
|
455 """ |
|
456 @@ -63,7 +65,7 @@ def get_image_properties_table(meta): |
|
457 default=False, |
|
458 index=True), |
|
459 UniqueConstraint('image_id', 'name'), |
|
460 - mysql_engine='InnoDB', |
|
461 + mysql_engine=CONF.database.mysql_storage_engine, |
|
462 extend_existing=True) |
|
463 |
|
464 return image_properties |
|
465 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/030_add_tasks_table.py.orig 2016-07-29 11:32:09.114402435 -0600 |
|
466 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/030_add_tasks_table.py 2016-07-29 11:42:12.979551894 -0600 |
|
467 @@ -14,11 +14,13 @@ |
|
468 # License for the specific language governing permissions and limitations |
|
469 # under the License. |
|
470 |
|
471 +from oslo_config import cfg |
|
472 from sqlalchemy.schema import (Column, MetaData, Table, Index) |
|
473 |
|
474 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
475 Boolean, DateTime, String, Text, create_tables, drop_tables) # noqa |
|
476 |
|
477 +CONF = cfg.CONF |
|
478 |
|
479 def define_tasks_table(meta): |
|
480 tasks = Table('tasks', |
|
481 @@ -38,7 +40,7 @@ def define_tasks_table(meta): |
|
482 Boolean(), |
|
483 nullable=False, |
|
484 default=False), |
|
485 - mysql_engine='InnoDB', |
|
486 + mysql_engine=CONF.database.mysql_storage_engine, |
|
487 extend_existing=True) |
|
488 |
|
489 Index('ix_tasks_type', tasks.c.type) |
|
490 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/039_add_changes_to_satisfy_models_metadef.py.orig 2016-07-29 11:32:16.102449889 -0600 |
|
491 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/039_add_changes_to_satisfy_models_metadef.py 2016-07-29 11:42:34.666058988 -0600 |
|
492 @@ -11,11 +11,13 @@ |
|
493 # under the License. |
|
494 |
|
495 import migrate |
|
496 +from oslo_config import cfg |
|
497 import sqlalchemy |
|
498 from sqlalchemy import inspect |
|
499 from sqlalchemy import (Table, Index, UniqueConstraint) |
|
500 from sqlalchemy.schema import (AddConstraint, DropConstraint) |
|
501 |
|
502 +CONF = cfg.CONF |
|
503 |
|
504 def upgrade(migrate_engine): |
|
505 meta = sqlalchemy.MetaData() |
|
506 @@ -36,10 +38,17 @@ def upgrade(migrate_engine): |
|
507 Index('ix_objects_namespace_id_name', metadef_objects.c.namespace_id, |
|
508 metadef_objects.c.name).drop() |
|
509 |
|
510 + fkc = migrate.ForeignKeyConstraint([metadef_properties.c.namespace_id], |
|
511 + [metadef_namespaces.c.id], |
|
512 + name='metadef_properties_ibfk_1') |
|
513 + fkc.drop() |
|
514 + |
|
515 Index('ix_metadef_properties_namespace_id_name', |
|
516 metadef_properties.c.namespace_id, |
|
517 metadef_properties.c.name).drop() |
|
518 |
|
519 + fkc.create() |
|
520 + |
|
521 fkc = migrate.ForeignKeyConstraint([metadef_tags.c.namespace_id], |
|
522 [metadef_namespaces.c.id]) |
|
523 fkc.create() |
|
524 @@ -57,9 +66,16 @@ def upgrade(migrate_engine): |
|
525 metadef_tags.c.name) |
|
526 uc.create() |
|
527 |
|
528 + fkc = migrate.ForeignKeyConstraint([metadef_tags.c.namespace_id], |
|
529 + [metadef_namespaces.c.id], |
|
530 + name='metadef_tags_namespace_id_fkey') |
|
531 + fkc.drop() |
|
532 + |
|
533 Index('ix_tags_namespace_id_name', metadef_tags.c.namespace_id, |
|
534 metadef_tags.c.name).drop() |
|
535 |
|
536 + fkc.create() |
|
537 + |
|
538 Index('ix_metadef_tags_name', metadef_tags.c.name).create() |
|
539 |
|
540 Index('ix_metadef_tags_namespace_id', metadef_tags.c.namespace_id, |
|
541 @@ -190,7 +206,6 @@ def downgrade(migrate_engine): |
|
542 fkc = migrate.ForeignKeyConstraint([metadef_tags.c.namespace_id], |
|
543 [metadef_namespaces.c.id]) |
|
544 fkc.drop() |
|
545 - |
|
546 Index('ix_tags_namespace_id_name', metadef_tags.c.namespace_id, |
|
547 metadef_tags.c.name).create() |
|
548 else: |
|
549 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/008_add_image_members_table.py.orig 2016-07-29 11:32:22.100185363 -0600 |
|
550 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/008_add_image_members_table.py 2016-07-29 11:42:54.820310263 -0600 |
|
551 @@ -14,12 +14,14 @@ |
|
552 # under the License. |
|
553 |
|
554 from migrate.changeset import * # noqa |
|
555 +from oslo_config import cfg |
|
556 from sqlalchemy import * # noqa |
|
557 |
|
558 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
559 Boolean, DateTime, Integer, String, create_tables, |
|
560 drop_tables, from_migration_import) # noqa |
|
561 |
|
562 +CONF = cfg.CONF |
|
563 |
|
564 def get_images_table(meta): |
|
565 """ |
|
566 @@ -45,40 +47,71 @@ def get_image_properties_table(meta): |
|
567 |
|
568 def get_image_members_table(meta): |
|
569 images = get_images_table(meta) # noqa |
|
570 - |
|
571 - image_members = Table('image_members', |
|
572 - meta, |
|
573 - Column('id', |
|
574 - Integer(), |
|
575 - primary_key=True, |
|
576 - nullable=False), |
|
577 - Column('image_id', |
|
578 - Integer(), |
|
579 - ForeignKey('images.id'), |
|
580 - nullable=False, |
|
581 - index=True), |
|
582 - Column('member', String(255), nullable=False), |
|
583 - Column('can_share', |
|
584 - Boolean(), |
|
585 - nullable=False, |
|
586 - default=False), |
|
587 - Column('created_at', DateTime(), nullable=False), |
|
588 - Column('updated_at', DateTime()), |
|
589 - Column('deleted_at', DateTime()), |
|
590 - Column('deleted', |
|
591 - Boolean(), |
|
592 - nullable=False, |
|
593 - default=False, |
|
594 - index=True), |
|
595 - UniqueConstraint('image_id', 'member'), |
|
596 - mysql_engine='InnoDB', |
|
597 - extend_existing=True) |
|
598 + |
|
599 + # MySQL Cluster, a.k.a. NDB, does not support this constraint and index. |
|
600 + # If MySQl Cluster is being used, the constraint and index will not be created. |
|
601 + if CONF.database.mysql_storage_engine == "NDBCLUSTER": |
|
602 + image_members = Table('image_members', |
|
603 + meta, |
|
604 + Column('id', |
|
605 + Integer(), |
|
606 + primary_key=True, |
|
607 + nullable=False), |
|
608 + Column('image_id', |
|
609 + Integer(), |
|
610 + ForeignKey('images.id'), |
|
611 + nullable=False, |
|
612 + index=True), |
|
613 + Column('member', String(255), nullable=False), |
|
614 + Column('can_share', |
|
615 + Boolean(), |
|
616 + nullable=False, |
|
617 + default=False), |
|
618 + Column('created_at', DateTime(), nullable=False), |
|
619 + Column('updated_at', DateTime()), |
|
620 + Column('deleted_at', DateTime()), |
|
621 + Column('deleted', |
|
622 + Boolean(), |
|
623 + nullable=False, |
|
624 + default=False, |
|
625 + index=True), |
|
626 + mysql_engine=CONF.database.mysql_storage_engine, |
|
627 + extend_existing=True) |
|
628 + else: |
|
629 + image_members = Table('image_members', |
|
630 + meta, |
|
631 + Column('id', |
|
632 + Integer(), |
|
633 + primary_key=True, |
|
634 + nullable=False), |
|
635 + Column('image_id', |
|
636 + Integer(), |
|
637 + ForeignKey('images.id'), |
|
638 + nullable=False, |
|
639 + index=True), |
|
640 + Column('member', String(255), nullable=False), |
|
641 + Column('can_share', |
|
642 + Boolean(), |
|
643 + nullable=False, |
|
644 + default=False), |
|
645 + Column('created_at', DateTime(), nullable=False), |
|
646 + Column('updated_at', DateTime()), |
|
647 + Column('deleted_at', DateTime()), |
|
648 + Column('deleted', |
|
649 + Boolean(), |
|
650 + nullable=False, |
|
651 + default=False, |
|
652 + index=True), |
|
653 + UniqueConstraint('image_id', 'member'), |
|
654 + mysql_engine=CONF.database.mysql_storage_engine, |
|
655 + extend_existing=True) |
|
656 |
|
657 # DB2: an index has already been created for the UniqueConstraint option |
|
658 # specified on the Table() statement above. |
|
659 - if meta.bind.name != "ibm_db_sa": |
|
660 - Index('ix_image_members_image_id_member', image_members.c.image_id, |
|
661 - image_members.c.member) |
|
662 + if CONF.database.mysql_storage_engine != "NDBCLUSTER": |
|
663 + if meta.bind.name != "ibm_db_sa": |
|
664 + Index('ix_image_members_image_id_member', image_members.c.image_id, |
|
665 + image_members.c.member) |
|
666 |
|
667 return image_members |
|
668 |
|
669 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/002_add_image_properties_table.py.orig 2016-07-29 11:32:28.641283394 -0600 |
|
670 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/002_add_image_properties_table.py 2016-07-29 11:43:17.467512143 -0600 |
|
671 @@ -13,6 +13,7 @@ |
|
672 # License for the specific language governing permissions and limitations |
|
673 # under the License. |
|
674 |
|
675 +from oslo_config import cfg |
|
676 from sqlalchemy.schema import ( |
|
677 Column, ForeignKey, Index, MetaData, Table, UniqueConstraint) |
|
678 |
|
679 @@ -20,6 +21,7 @@ from glance.db.sqlalchemy.migrate_repo.s |
|
680 Boolean, DateTime, Integer, String, Text, create_tables, drop_tables, |
|
681 from_migration_import) # noqa |
|
682 |
|
683 +CONF = cfg.CONF |
|
684 |
|
685 def define_image_properties_table(meta): |
|
686 (define_images_table,) = from_migration_import( |
|
687 @@ -36,31 +38,58 @@ def define_image_properties_table(meta): |
|
688 if meta.bind.name == 'ibm_db_sa': |
|
689 constr_kwargs['name'] = 'ix_image_properties_image_id_key' |
|
690 |
|
691 - image_properties = Table('image_properties', |
|
692 - meta, |
|
693 - Column('id', |
|
694 - Integer(), |
|
695 - primary_key=True, |
|
696 - nullable=False), |
|
697 - Column('image_id', |
|
698 - Integer(), |
|
699 - ForeignKey('images.id'), |
|
700 - nullable=False, |
|
701 - index=True), |
|
702 - Column('key', String(255), nullable=False), |
|
703 - Column('value', Text()), |
|
704 - Column('created_at', DateTime(), nullable=False), |
|
705 - Column('updated_at', DateTime()), |
|
706 - Column('deleted_at', DateTime()), |
|
707 - Column('deleted', |
|
708 - Boolean(), |
|
709 - nullable=False, |
|
710 - default=False, |
|
711 - index=True), |
|
712 - UniqueConstraint('image_id', 'key', |
|
713 - **constr_kwargs), |
|
714 - mysql_engine='InnoDB', |
|
715 - extend_existing=True) |
|
716 + # MySQL Cluster, a.k.a. NDB, does not support the constraint here. |
|
717 + # This will remove the constraint if MySQL Cluster is being used. |
|
718 + if CONF.database.mysql_storage_engine == "NDBCLUSTER": |
|
719 + image_properties = Table('image_properties', |
|
720 + meta, |
|
721 + Column('id', |
|
722 + Integer(), |
|
723 + primary_key=True, |
|
724 + nullable=False), |
|
725 + Column('image_id', |
|
726 + Integer(), |
|
727 + ForeignKey('images.id'), |
|
728 + nullable=False, |
|
729 + index=True), |
|
730 + Column('key', String(255), nullable=False), |
|
731 + Column('value', Text()), |
|
732 + Column('created_at', DateTime(), nullable=False), |
|
733 + Column('updated_at', DateTime()), |
|
734 + Column('deleted_at', DateTime()), |
|
735 + Column('deleted', |
|
736 + Boolean(), |
|
737 + nullable=False, |
|
738 + default=False, |
|
739 + index=True), |
|
740 + mysql_engine=CONF.database.mysql_storage_engine, |
|
741 + extend_existing=True) |
|
742 + else: |
|
743 + image_properties = Table('image_properties', |
|
744 + meta, |
|
745 + Column('id', |
|
746 + Integer(), |
|
747 + primary_key=True, |
|
748 + nullable=False), |
|
749 + Column('image_id', |
|
750 + Integer(), |
|
751 + ForeignKey('images.id'), |
|
752 + nullable=False, |
|
753 + index=True), |
|
754 + Column('key', String(255), nullable=False), |
|
755 + Column('value', Text()), |
|
756 + Column('created_at', DateTime(), nullable=False), |
|
757 + Column('updated_at', DateTime()), |
|
758 + Column('deleted_at', DateTime()), |
|
759 + Column('deleted', |
|
760 + Boolean(), |
|
761 + nullable=False, |
|
762 + default=False, |
|
763 + index=True), |
|
764 + UniqueConstraint('image_id', 'key', |
|
765 + **constr_kwargs), |
|
766 + mysql_engine=CONF.database.mysql_storage_engine, |
|
767 + extend_existing=True) |
|
768 |
|
769 if meta.bind.name != 'ibm_db_sa': |
|
770 Index('ix_image_properties_image_id_key', |
|
771 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/035_add_metadef_tables.py.orig 2016-07-29 11:32:34.891435682 -0600 |
|
772 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/035_add_metadef_tables.py 2016-07-29 11:43:39.940493840 -0600 |
|
773 @@ -12,6 +12,7 @@ |
|
774 # License for the specific language governing permissions and limitations |
|
775 # under the License. |
|
776 |
|
777 +from oslo_config import cfg |
|
778 from oslo_utils import timeutils |
|
779 import sqlalchemy |
|
780 from sqlalchemy.schema import ( |
|
781 @@ -21,6 +22,7 @@ from glance.db.sqlalchemy.migrate_repo.s |
|
782 Boolean, DateTime, Integer, String, Text, create_tables, |
|
783 drop_tables) # noqa |
|
784 |
|
785 +CONF = cfg.CONF |
|
786 |
|
787 RESOURCE_TYPES = [u'OS::Glance::Image', u'OS::Cinder::Volume', |
|
788 u'OS::Nova::Flavor', u'OS::Nova::Aggregate', |
|
789 @@ -65,7 +67,7 @@ def define_metadef_namespaces_table(meta |
|
790 Column('created_at', DateTime(), nullable=False), |
|
791 Column('updated_at', DateTime()), |
|
792 UniqueConstraint('namespace', **_constr_kwargs), |
|
793 - mysql_engine='InnoDB', |
|
794 + mysql_engine=CONF.database.mysql_storage_engine, |
|
795 extend_existing=True) |
|
796 |
|
797 if meta.bind.name != 'ibm_db_sa': |
|
798 @@ -80,22 +82,41 @@ def define_metadef_objects_table(meta): |
|
799 if meta.bind.name == 'ibm_db_sa': |
|
800 _constr_kwargs['name'] = 'ix_objects_namespace_id_name' |
|
801 |
|
802 - objects = Table('metadef_objects', |
|
803 - meta, |
|
804 - Column('id', Integer(), primary_key=True, nullable=False), |
|
805 - Column('namespace_id', Integer(), |
|
806 - ForeignKey('metadef_namespaces.id'), |
|
807 - nullable=False), |
|
808 - Column('name', String(80), nullable=False), |
|
809 - Column('description', Text()), |
|
810 - Column('required', Text()), |
|
811 - Column('schema', Text(), nullable=False), |
|
812 - Column('created_at', DateTime(), nullable=False), |
|
813 - Column('updated_at', DateTime()), |
|
814 - UniqueConstraint('namespace_id', 'name', |
|
815 - **_constr_kwargs), |
|
816 - mysql_engine='InnoDB', |
|
817 - extend_existing=True) |
|
818 + # MySQL Cluster, a.k.a. NDB, requires explicit foreign key names |
|
819 + if CONF.database.mysql_storage_engine == "NDBCLUSTER": |
|
820 + objects = Table('metadef_objects', |
|
821 + meta, |
|
822 + Column('id', Integer(), primary_key=True, nullable=False), |
|
823 + Column('namespace_id', Integer(), |
|
824 + ForeignKey('metadef_namespaces.id', name='metadef_objects_ibfk_1'), |
|
825 + nullable=False), |
|
826 + Column('name', String(80), nullable=False), |
|
827 + Column('description', Text()), |
|
828 + Column('required', Text()), |
|
829 + Column('schema', Text(), nullable=False), |
|
830 + Column('created_at', DateTime(), nullable=False), |
|
831 + Column('updated_at', DateTime()), |
|
832 + UniqueConstraint('namespace_id', 'name', |
|
833 + **_constr_kwargs), |
|
834 + mysql_engine=CONF.database.mysql_storage_engine, |
|
835 + extend_existing=True) |
|
836 + else: |
|
837 + objects = Table('metadef_objects', |
|
838 + meta, |
|
839 + Column('id', Integer(), primary_key=True, nullable=False), |
|
840 + Column('namespace_id', Integer(), |
|
841 + ForeignKey('metadef_namespaces.id'), |
|
842 + nullable=False), |
|
843 + Column('name', String(80), nullable=False), |
|
844 + Column('description', Text()), |
|
845 + Column('required', Text()), |
|
846 + Column('schema', Text(), nullable=False), |
|
847 + Column('created_at', DateTime(), nullable=False), |
|
848 + Column('updated_at', DateTime()), |
|
849 + UniqueConstraint('namespace_id', 'name', |
|
850 + **_constr_kwargs), |
|
851 + mysql_engine=CONF.database.mysql_storage_engine, |
|
852 + extend_existing=True) |
|
853 |
|
854 if meta.bind.name != 'ibm_db_sa': |
|
855 Index('ix_objects_namespace_id_name', |
|
856 @@ -111,19 +132,35 @@ def define_metadef_properties_table(meta |
|
857 if meta.bind.name == 'ibm_db_sa': |
|
858 _constr_kwargs['name'] = 'ix_metadef_properties_namespace_id_name' |
|
859 |
|
860 - metadef_properties = Table( |
|
861 - 'metadef_properties', |
|
862 - meta, |
|
863 - Column('id', Integer(), primary_key=True, nullable=False), |
|
864 - Column('namespace_id', Integer(), ForeignKey('metadef_namespaces.id'), |
|
865 - nullable=False), |
|
866 - Column('name', String(80), nullable=False), |
|
867 - Column('schema', Text(), nullable=False), |
|
868 - Column('created_at', DateTime(), nullable=False), |
|
869 - Column('updated_at', DateTime()), |
|
870 - UniqueConstraint('namespace_id', 'name', **_constr_kwargs), |
|
871 - mysql_engine='InnoDB', |
|
872 - extend_existing=True) |
|
873 + # MySQL Cluster, a.k.a. NDB, requires explicit foreign key names |
|
874 + if CONF.database.mysql_storage_engine == "NDBCLUSTER": |
|
875 + metadef_properties = Table( |
|
876 + 'metadef_properties', |
|
877 + meta, |
|
878 + Column('id', Integer(), primary_key=True, nullable=False), |
|
879 + Column('namespace_id', Integer(), ForeignKey('metadef_namespaces.id', name='metadef_properties_ibfk_1'), |
|
880 + nullable=False), |
|
881 + Column('name', String(80), nullable=False), |
|
882 + Column('schema', Text(), nullable=False), |
|
883 + Column('created_at', DateTime(), nullable=False), |
|
884 + Column('updated_at', DateTime()), |
|
885 + UniqueConstraint('namespace_id', 'name', **_constr_kwargs), |
|
886 + mysql_engine=CONF.database.mysql_storage_engine, |
|
887 + extend_existing=True) |
|
888 + else: |
|
889 + metadef_properties = Table( |
|
890 + 'metadef_properties', |
|
891 + meta, |
|
892 + Column('id', Integer(), primary_key=True, nullable=False), |
|
893 + Column('namespace_id', Integer(), ForeignKey('metadef_namespaces.id'), |
|
894 + nullable=False), |
|
895 + Column('name', String(80), nullable=False), |
|
896 + Column('schema', Text(), nullable=False), |
|
897 + Column('created_at', DateTime(), nullable=False), |
|
898 + Column('updated_at', DateTime()), |
|
899 + UniqueConstraint('namespace_id', 'name', **_constr_kwargs), |
|
900 + mysql_engine=CONF.database.mysql_storage_engine, |
|
901 + extend_existing=True) |
|
902 |
|
903 if meta.bind.name != 'ibm_db_sa': |
|
904 Index('ix_metadef_properties_namespace_id_name', |
|
905 @@ -148,7 +185,7 @@ def define_metadef_resource_types_table( |
|
906 Column('created_at', DateTime(), nullable=False), |
|
907 Column('updated_at', DateTime()), |
|
908 UniqueConstraint('name', **_constr_kwargs), |
|
909 - mysql_engine='InnoDB', |
|
910 + mysql_engine=CONF.database.mysql_storage_engine, |
|
911 extend_existing=True) |
|
912 |
|
913 if meta.bind.name != 'ibm_db_sa': |
|
914 @@ -164,23 +201,41 @@ def define_metadef_namespace_resource_ty |
|
915 if meta.bind.name == 'ibm_db_sa': |
|
916 _constr_kwargs['name'] = 'ix_metadef_ns_res_types_res_type_id_ns_id' |
|
917 |
|
918 - metadef_associations = Table( |
|
919 - 'metadef_namespace_resource_types', |
|
920 - meta, |
|
921 - Column('resource_type_id', Integer(), |
|
922 - ForeignKey('metadef_resource_types.id'), |
|
923 - primary_key=True, nullable=False), |
|
924 - Column('namespace_id', Integer(), |
|
925 - ForeignKey('metadef_namespaces.id'), |
|
926 - primary_key=True, nullable=False), |
|
927 - Column('properties_target', String(80)), |
|
928 - Column('prefix', String(80)), |
|
929 - Column('created_at', DateTime(), nullable=False), |
|
930 - Column('updated_at', DateTime()), |
|
931 - UniqueConstraint('resource_type_id', 'namespace_id', |
|
932 - **_constr_kwargs), |
|
933 - mysql_engine='InnoDB', |
|
934 - extend_existing=True) |
|
935 + # MySQL Cluster, a.k.a. NDB, does not support these foreign keys, which are later removed. |
|
936 + if CONF.database.mysql_storage_engine == "NDBCLUSTER": |
|
937 + metadef_associations = Table( |
|
938 + 'metadef_namespace_resource_types', |
|
939 + meta, |
|
940 + Column('resource_type_id', Integer(), |
|
941 + primary_key=True, nullable=False), |
|
942 + Column('namespace_id', Integer(), |
|
943 + primary_key=True, nullable=False), |
|
944 + Column('properties_target', String(80)), |
|
945 + Column('prefix', String(80)), |
|
946 + Column('created_at', DateTime(), nullable=False), |
|
947 + Column('updated_at', DateTime()), |
|
948 + UniqueConstraint('resource_type_id', 'namespace_id', |
|
949 + **_constr_kwargs), |
|
950 + mysql_engine=CONF.database.mysql_storage_engine, |
|
951 + extend_existing=True) |
|
952 + else: |
|
953 + metadef_associations = Table( |
|
954 + 'metadef_namespace_resource_types', |
|
955 + meta, |
|
956 + Column('resource_type_id', Integer(), |
|
957 + ForeignKey('metadef_resource_types.id'), |
|
958 + primary_key=True, nullable=False), |
|
959 + Column('namespace_id', Integer(), |
|
960 + ForeignKey('metadef_namespaces.id'), |
|
961 + primary_key=True, nullable=False), |
|
962 + Column('properties_target', String(80)), |
|
963 + Column('prefix', String(80)), |
|
964 + Column('created_at', DateTime(), nullable=False), |
|
965 + Column('updated_at', DateTime()), |
|
966 + UniqueConstraint('resource_type_id', 'namespace_id', |
|
967 + **_constr_kwargs), |
|
968 + mysql_engine=CONF.database.mysql_storage_engine, |
|
969 + extend_existing=True) |
|
970 |
|
971 if meta.bind.name != 'ibm_db_sa': |
|
972 Index('ix_metadef_ns_res_types_res_type_id_ns_id', |
|
973 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/037_add_changes_to_satisfy_models.py.orig 2016-07-29 11:32:40.844072755 -0600 |
|
974 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/037_add_changes_to_satisfy_models.py 2016-07-29 11:44:01.300274699 -0600 |
|
975 @@ -10,6 +10,7 @@ |
|
976 # License for the specific language governing permissions and limitations |
|
977 # under the License. |
|
978 |
|
979 +from oslo_config import cfg |
|
980 import sqlalchemy |
|
981 from sqlalchemy import Table, Index, UniqueConstraint, Sequence |
|
982 from sqlalchemy.schema import (AddConstraint, DropConstraint, CreateIndex, |
|
983 @@ -17,6 +18,7 @@ from sqlalchemy.schema import (AddConstr |
|
984 from sqlalchemy import sql |
|
985 from sqlalchemy import update |
|
986 |
|
987 +CONF = cfg.CONF |
|
988 |
|
989 def upgrade(migrate_engine): |
|
990 meta = sqlalchemy.MetaData() |
|
991 @@ -74,10 +76,14 @@ def upgrade(migrate_engine): |
|
992 |
|
993 images.c.id.alter(server_default=None) |
|
994 if migrate_engine.name == 'mysql': |
|
995 - constraint = UniqueConstraint(image_properties.c.image_id, |
|
996 - image_properties.c.name, |
|
997 - name='image_id') |
|
998 - migrate_engine.execute(DropConstraint(constraint)) |
|
999 + # MySQL Cluster, a.k.a. NDB, does not support the constraint here. |
|
1000 + # This will only add the constraint if MySQL Cluster is not being used. |
|
1001 + if CONF.database.mysql_storage_engine != "NDBCLUSTER": |
|
1002 + constraint = UniqueConstraint(image_properties.c.image_id, |
|
1003 + image_properties.c.name, |
|
1004 + name='image_id') |
|
1005 + migrate_engine.execute(DropConstraint(constraint)) |
|
1006 + |
|
1007 image_locations = Table('image_locations', meta, autoload=True) |
|
1008 if len(image_locations.foreign_keys) == 0: |
|
1009 migrate_engine.execute(AddConstraint(ForeignKeyConstraint( |
|
1010 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/009_add_mindisk_and_minram.py.orig 2016-07-29 11:32:47.075511757 -0600 |
|
1011 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/009_add_mindisk_and_minram.py 2016-07-29 11:44:23.917127924 -0600 |
|
1012 @@ -14,11 +14,13 @@ |
|
1013 # under the License. |
|
1014 |
|
1015 from migrate.changeset import * # noqa |
|
1016 +from oslo_config import cfg |
|
1017 from sqlalchemy import * # noqa |
|
1018 |
|
1019 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
1020 Boolean, DateTime, Integer, String, Text, from_migration_import) # noqa |
|
1021 |
|
1022 +CONF = cfg.CONF |
|
1023 |
|
1024 def get_images_table(meta): |
|
1025 """ |
|
1026 @@ -51,7 +53,7 @@ def get_images_table(meta): |
|
1027 Column('owner', String(255)), |
|
1028 Column('min_disk', Integer(), default=0), |
|
1029 Column('min_ram', Integer(), default=0), |
|
1030 - mysql_engine='InnoDB', |
|
1031 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1032 extend_existing=True) |
|
1033 |
|
1034 return images |
|
1035 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/032_add_task_info_table.py.orig 2016-07-29 11:32:53.180994551 -0600 |
|
1036 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/032_add_task_info_table.py 2016-07-29 11:44:45.316686633 -0600 |
|
1037 @@ -13,6 +13,7 @@ |
|
1038 # License for the specific language governing permissions and limitations |
|
1039 # under the License. |
|
1040 |
|
1041 +from oslo_config import cfg |
|
1042 from sqlalchemy.schema import (Column, ForeignKey, MetaData, Table) |
|
1043 |
|
1044 from glance.db.sqlalchemy.migrate_repo.schema import (String, |
|
1045 @@ -22,6 +23,7 @@ from glance.db.sqlalchemy.migrate_repo.s |
|
1046 |
|
1047 TASKS_MIGRATE_COLUMNS = ['input', 'message', 'result'] |
|
1048 |
|
1049 +CONF = cfg.CONF |
|
1050 |
|
1051 def define_task_info_table(meta): |
|
1052 Table('tasks', meta, autoload=True) |
|
1053 @@ -37,7 +39,7 @@ def define_task_info_table(meta): |
|
1054 Column('input', Text()), |
|
1055 Column('result', Text()), |
|
1056 Column('message', Text()), |
|
1057 - mysql_engine='InnoDB') |
|
1058 + mysql_engine=CONF.database.mysql_storage_engine) |
|
1059 |
|
1060 return task_info |
|
1061 |
|
1062 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/004_add_checksum.py.orig 2016-07-29 11:32:58.755972142 -0600 |
|
1063 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/004_add_checksum.py 2016-07-29 11:45:04.732540072 -0600 |
|
1064 @@ -14,11 +14,13 @@ |
|
1065 # under the License. |
|
1066 |
|
1067 from migrate.changeset import * # noqa |
|
1068 +from oslo_config import cfg |
|
1069 from sqlalchemy import * # noqa |
|
1070 |
|
1071 from glance.db.sqlalchemy.migrate_repo.schema import ( |
|
1072 Boolean, DateTime, Integer, String, Text, from_migration_import) # noqa |
|
1073 |
|
1074 +CONF = cfg.CONF |
|
1075 |
|
1076 def get_images_table(meta): |
|
1077 """ |
|
1078 @@ -48,7 +50,7 @@ def get_images_table(meta): |
|
1079 default=False, |
|
1080 index=True), |
|
1081 Column('checksum', String(32)), |
|
1082 - mysql_engine='InnoDB', |
|
1083 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1084 extend_existing=True) |
|
1085 |
|
1086 return images |
|
1087 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/021_set_engine_mysql_innodb.py.orig 2016-07-29 11:33:05.406762219 -0600 |
|
1088 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/021_set_engine_mysql_innodb.py 2016-07-29 11:45:30.188972755 -0600 |
|
1089 @@ -14,21 +14,24 @@ |
|
1090 # License for the specific language governing permissions and limitations |
|
1091 # under the License. |
|
1092 |
|
1093 +from oslo_config import cfg |
|
1094 from sqlalchemy import MetaData |
|
1095 |
|
1096 tables = ['image_locations'] |
|
1097 |
|
1098 +CONF = cfg.CONF |
|
1099 |
|
1100 def upgrade(migrate_engine): |
|
1101 meta = MetaData() |
|
1102 meta.bind = migrate_engine |
|
1103 if migrate_engine.name == "mysql": |
|
1104 - d = migrate_engine.execute("SHOW TABLE STATUS WHERE Engine!='InnoDB';") |
|
1105 + d = migrate_engine.execute("SHOW TABLE STATUS WHERE Engine!='%s';" % |
|
1106 + CONF.database.mysql_storage_engine) |
|
1107 for row in d.fetchall(): |
|
1108 table_name = row[0] |
|
1109 if table_name in tables: |
|
1110 - migrate_engine.execute("ALTER TABLE %s Engine=InnoDB" % |
|
1111 - table_name) |
|
1112 + migrate_engine.execute("ALTER TABLE %(db_table)s Engine=%(mysql_storage_engine)s" % |
|
1113 + dict(db_table=table_name, mysql_storage_engine=CONF.database.mysql_storage_engine)) |
|
1114 |
|
1115 |
|
1116 def downgrade(migrate_engine): |
|
1117 --- glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/041_add_artifact_tables.py.orig 2016-07-29 11:33:13.687025321 -0600 |
|
1118 +++ glance-2015.1.2/glance/db/sqlalchemy/migrate_repo/versions/041_add_artifact_tables.py 2016-07-29 11:45:55.382385404 -0600 |
|
1119 @@ -12,6 +12,7 @@ |
|
1120 # License for the specific language governing permissions and limitations |
|
1121 # under the License. |
|
1122 |
|
1123 +from oslo_config import cfg |
|
1124 from sqlalchemy.schema import (Column, ForeignKey, Index, MetaData, Table) |
|
1125 |
|
1126 |
|
1127 @@ -19,6 +20,7 @@ from glance.db.sqlalchemy.migrate_repo.s |
|
1128 BigInteger, Boolean, DateTime, Integer, Numeric, String, Text, |
|
1129 create_tables) # noqa |
|
1130 |
|
1131 +CONF = cfg.CONF |
|
1132 |
|
1133 def define_artifacts_table(meta): |
|
1134 artifacts = Table('artifacts', |
|
1135 @@ -43,7 +45,7 @@ def define_artifacts_table(meta): |
|
1136 nullable=False), |
|
1137 Column('deleted_at', DateTime()), |
|
1138 Column('published_at', DateTime()), |
|
1139 - mysql_engine='InnoDB', |
|
1140 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1141 extend_existing=True) |
|
1142 |
|
1143 Index('ix_artifact_name_and_version', artifacts.c.name, |
|
1144 @@ -68,7 +70,7 @@ def define_artifact_tags_table(meta): |
|
1145 Column('created_at', DateTime(), nullable=False), |
|
1146 Column('updated_at', DateTime(), |
|
1147 nullable=False), |
|
1148 - mysql_engine='InnoDB', |
|
1149 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1150 extend_existing=True) |
|
1151 |
|
1152 Index('ix_artifact_tags_artifact_id', artifact_tags.c.artifact_id) |
|
1153 @@ -100,7 +102,7 @@ def define_artifact_dependencies_table(m |
|
1154 nullable=False), |
|
1155 Column('updated_at', DateTime(), |
|
1156 nullable=False), |
|
1157 - mysql_engine='InnoDB', |
|
1158 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1159 extend_existing=True) |
|
1160 |
|
1161 Index('ix_artifact_dependencies_source_id', |
|
1162 @@ -131,7 +133,7 @@ def define_artifact_blobs_table(meta): |
|
1163 Column('created_at', DateTime(), nullable=False), |
|
1164 Column('updated_at', DateTime(), |
|
1165 nullable=False), |
|
1166 - mysql_engine='InnoDB', |
|
1167 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1168 extend_existing=True) |
|
1169 Index('ix_artifact_blobs_artifact_id', |
|
1170 artifact_blobs.c.artifact_id) |
|
1171 @@ -161,7 +163,7 @@ def define_artifact_properties_table(met |
|
1172 Column('updated_at', DateTime(), |
|
1173 nullable=False), |
|
1174 Column('position', Integer()), |
|
1175 - mysql_engine='InnoDB', |
|
1176 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1177 extend_existing=True) |
|
1178 Index('ix_artifact_properties_artifact_id', |
|
1179 artifact_properties.c.artifact_id) |
|
1180 @@ -186,7 +188,7 @@ def define_artifact_blob_locations_table |
|
1181 Column('position', Integer()), |
|
1182 Column('status', String(36), |
|
1183 nullable=True), |
|
1184 - mysql_engine='InnoDB', |
|
1185 + mysql_engine=CONF.database.mysql_storage_engine, |
|
1186 extend_existing=True) |
|
1187 Index('ix_artifact_blob_locations_blob_id', |
|
1188 artifact_blob_locations.c.blob_id) |
|
1189 --- glance-2015.1.2/glance/db/sqlalchemy/models.py.orig 2016-07-29 11:33:19.907591270 -0600 |
|
1190 +++ glance-2015.1.2/glance/db/sqlalchemy/models.py 2016-07-29 11:46:37.517783749 -0600 |
|
1191 @@ -21,6 +21,7 @@ SQLAlchemy models for glance data |
|
1192 import uuid |
|
1193 |
|
1194 from oslo.serialization import jsonutils |
|
1195 +from oslo_config import cfg |
|
1196 from oslo_db.sqlalchemy import models |
|
1197 from oslo_utils import timeutils |
|
1198 from sqlalchemy import BigInteger |
|
1199 @@ -39,6 +40,7 @@ from sqlalchemy import Text |
|
1200 from sqlalchemy.types import TypeDecorator |
|
1201 from sqlalchemy import UniqueConstraint |
|
1202 |
|
1203 +CONF = cfg.CONF |
|
1204 |
|
1205 BASE = declarative_base() |
|
1206 |
|
1207 @@ -67,7 +69,7 @@ class JSONEncodedDict(TypeDecorator): |
|
1208 class GlanceBase(models.ModelBase, models.TimestampMixin): |
|
1209 """Base class for Glance Models.""" |
|
1210 |
|
1211 - __table_args__ = {'mysql_engine': 'InnoDB'} |
|
1212 + __table_args__ = {'mysql_engine': CONF.database.mysql_storage_engine} |
|
1213 __table_initialized__ = False |
|
1214 __protected_attributes__ = set([ |
|
1215 "created_at", "updated_at", "deleted_at", "deleted"]) |
|