The build_requests.instance column is a serialized
instance object, and the instances.user_data column
is MediumText, so the build_requests.instance column
itself needs to be at least MediumText in size for MySQL.
Change-Id: I7d65df37c02750593037744543ad15e5bc64e913
Closes-Bug: #
1635446
--- /dev/null
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from sqlalchemy import MetaData
+from sqlalchemy import Table
+
+from nova.db.sqlalchemy import api_models
+
+
+def upgrade(migrate_engine):
+ meta = MetaData()
+ meta.bind = migrate_engine
+
+ build_requests = Table('build_requests', meta, autoload=True)
+ build_requests.c.instance.alter(type=api_models.MediumText())
id = Column(Integer, primary_key=True)
instance_uuid = Column(String(36))
project_id = Column(String(255), nullable=False)
- instance = Column(Text)
+ instance = Column(MediumText())
block_device_mappings = Column(MediumText())
# TODO(alaski): Drop these from the db in Ocata
# columns_to_drop = ['request_spec_id', 'user_id', 'display_name',
self.assertEqual('quota_usages', fk['referred_table'])
self.assertEqual(['id'], fk['referred_columns'])
+ def _pre_upgrade_028(self, engine):
+ build_requests = db_utils.get_table(engine, 'build_requests')
+ fake_build_req = {'id': 2021,
+ 'project_id': 'fake_proj_id',
+ 'instance': '{"uuid": "foo", "name": "bar"}'}
+ build_requests.insert().execute(fake_build_req)
+
+ def _check_028(self, engine, data):
+ build_requests = db_utils.get_table(engine, 'build_requests')
+ if engine.name == 'mysql':
+ self.assertIsInstance(build_requests.c.block_device_mappings.type,
+ sqlalchemy.dialects.mysql.MEDIUMTEXT)
+
+ fake_build_req = build_requests.select(
+ build_requests.c.id == 2021).execute().first()
+ self.assertEqual('{"uuid": "foo", "name": "bar"}',
+ fake_build_req.instance)
+
class TestNovaAPIMigrationsWalkSQLite(NovaAPIMigrationsWalk,
test_base.DbTestCase,