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 index 000000000000..bee4aedd2ce5 --- /dev/null +++ b/nova/db/sqlalchemy/api_migrations/migrate_repo/versions/028_build_requests_instance_mediumtext.py @@ -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()) diff --git a/nova/db/sqlalchemy/api_models.py b/nova/db/sqlalchemy/api_models.py index 970e7b6a46ac..e82c71dea488 100644 --- a/nova/db/sqlalchemy/api_models.py +++ b/nova/db/sqlalchemy/api_models.py @@ -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', diff --git a/nova/tests/functional/db/api/test_migrations.py b/nova/tests/functional/db/api/test_migrations.py index 172e10461320..4a5d4562fcef 100644 --- a/nova/tests/functional/db/api/test_migrations.py +++ b/nova/tests/functional/db/api/test_migrations.py @@ -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,