]> xenbits.xensource.com Git - osstest/openstack-nova.git/commitdiff
Make build_requests.instance MediumText
authorMatt Riedemann <mriedem@us.ibm.com>
Wed, 26 Oct 2016 10:23:42 +0000 (06:23 -0400)
committerMatt Riedemann <mriedem@us.ibm.com>
Wed, 26 Oct 2016 10:27:07 +0000 (06:27 -0400)
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

nova/db/sqlalchemy/api_migrations/migrate_repo/versions/028_build_requests_instance_mediumtext.py [new file with mode: 0644]
nova/db/sqlalchemy/api_models.py
nova/tests/functional/db/api/test_migrations.py

diff --git a/nova/db/sqlalchemy/api_migrations/migrate_repo/versions/028_build_requests_instance_mediumtext.py b/nova/db/sqlalchemy/api_migrations/migrate_repo/versions/028_build_requests_instance_mediumtext.py
new file mode 100644 (file)
index 0000000..bee4aed
--- /dev/null
@@ -0,0 +1,24 @@
+#    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())
index 970e7b6a46ac0a02b76d8d386cd529bb72c00fd6..e82c71dea488a684a2bbe75d2e3f37ec2a86b49c 100644 (file)
@@ -241,7 +241,7 @@ class BuildRequest(API_BASE):
     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',
index 172e10461320c05d695f48e66d94609f75696caf..4a5d4562fceff25168d4b76a23187e22d8f3c559 100644 (file)
@@ -553,6 +553,24 @@ class NovaAPIMigrationsWalk(test_migrations.WalkVersionsMixin):
         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,