From 486f6847a97f02de5de0d4c9be15c84998afcfb8 Mon Sep 17 00:00:00 2001 From: Jay Lau Date: Tue, 10 Dec 2013 08:45:30 +0800 Subject: [PATCH] Add disabled_reason field to services table Add a column (String 255) in the services table to store disabled_reason field. Change-Id: I3cc03029831bdf6a52e9b65c673794430807aeee Implements part of bp record-reason-for-disabling-service --- .../022_add_reason_column_to_service.py | 32 +++++++++++++++++++ cinder/db/sqlalchemy/models.py | 1 + cinder/tests/test_migrations.py | 26 +++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/022_add_reason_column_to_service.py diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/022_add_reason_column_to_service.py b/cinder/db/sqlalchemy/migrate_repo/versions/022_add_reason_column_to_service.py new file mode 100644 index 000000000..a4b7df5f1 --- /dev/null +++ b/cinder/db/sqlalchemy/migrate_repo/versions/022_add_reason_column_to_service.py @@ -0,0 +1,32 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2013 IBM Corp. +# +# 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 Column, MetaData, String, Table + + +def upgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + services = Table('services', meta, autoload=True) + reason = Column('disabled_reason', String(255)) + services.create_column(reason) + + +def downgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + services = Table('services', meta, autoload=True) + services.drop_column('disabled_reason') diff --git a/cinder/db/sqlalchemy/models.py b/cinder/db/sqlalchemy/models.py index fa9cdb223..b21613f94 100644 --- a/cinder/db/sqlalchemy/models.py +++ b/cinder/db/sqlalchemy/models.py @@ -67,6 +67,7 @@ class Service(BASE, CinderBase): report_count = Column(Integer, nullable=False, default=0) disabled = Column(Boolean, default=False) availability_zone = Column(String(255), default='cinder') + disabled_reason = Column(String(255)) class Volume(BASE, CinderBase): diff --git a/cinder/tests/test_migrations.py b/cinder/tests/test_migrations.py index 259306987..06c66330e 100644 --- a/cinder/tests/test_migrations.py +++ b/cinder/tests/test_migrations.py @@ -1037,3 +1037,29 @@ class TestMigrations(test.TestCase): execute().scalar() self.assertEqual(3, num_defaults) + + def test_migration_022(self): + """Test that adding disabled_reason column works correctly.""" + for (key, engine) in self.engines.items(): + migration_api.version_control(engine, + TestMigrations.REPOSITORY, + migration.db_initial_version()) + migration_api.upgrade(engine, TestMigrations.REPOSITORY, 21) + metadata = sqlalchemy.schema.MetaData() + metadata.bind = engine + + migration_api.upgrade(engine, TestMigrations.REPOSITORY, 22) + services = sqlalchemy.Table('services', + metadata, + autoload=True) + self.assertIsInstance(services.c.disabled_reason.type, + sqlalchemy.types.VARCHAR) + + migration_api.downgrade(engine, TestMigrations.REPOSITORY, 21) + metadata = sqlalchemy.schema.MetaData() + metadata.bind = engine + + services = sqlalchemy.Table('services', + metadata, + autoload=True) + self.assertNotIn('disabled_reason', services.c) -- 2.45.2