From 8c6fec417424874094027f486f5d9f1a21492109 Mon Sep 17 00:00:00 2001 From: Vilobh Meshram Date: Fri, 19 Jun 2015 10:17:07 -0700 Subject: [PATCH] Nested Quota : Create allocated column in cinder.quotas Create allocated column in cinder.quotas. This allocated column will be the sum of "hard_limits" values for the immediate child projects. This will be needed to track allocated quota to child projects. Change-Id: Ia80d9a6cdbbc7e86cf9f11979f5e80c53f0fac1f Implements: bp cinder-nested-quota-driver --- .../versions/048_add_allocated_in_quotas.py | 34 +++++++++++++++++++ cinder/db/sqlalchemy/models.py | 1 + cinder/tests/unit/test_migrations.py | 9 +++++ 3 files changed, 44 insertions(+) create mode 100644 cinder/db/sqlalchemy/migrate_repo/versions/048_add_allocated_in_quotas.py diff --git a/cinder/db/sqlalchemy/migrate_repo/versions/048_add_allocated_in_quotas.py b/cinder/db/sqlalchemy/migrate_repo/versions/048_add_allocated_in_quotas.py new file mode 100644 index 000000000..372236426 --- /dev/null +++ b/cinder/db/sqlalchemy/migrate_repo/versions/048_add_allocated_in_quotas.py @@ -0,0 +1,34 @@ +# Copyright 2015 Yahoo Inc. +# +# 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, Integer, MetaData, Table + + +def upgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + quotas = Table('quotas', meta, autoload=True) + + # Add a new column allocated to save allocated quota + allocated = Column('allocated', Integer, default=0) + quotas.create_column(allocated) + + +def downgrade(migrate_engine): + """Remove allocated column from quotas.""" + meta = MetaData() + meta.bind = migrate_engine + + quotas = Table('quotas', meta, autoload=True) + quotas.drop_column('allocated') diff --git a/cinder/db/sqlalchemy/models.py b/cinder/db/sqlalchemy/models.py index 989fd8401..ac42008c5 100644 --- a/cinder/db/sqlalchemy/models.py +++ b/cinder/db/sqlalchemy/models.py @@ -366,6 +366,7 @@ class Quota(BASE, CinderBase): resource = Column(String(255)) hard_limit = Column(Integer, nullable=True) + allocated = Column(Integer, default=0) class QuotaClass(BASE, CinderBase): diff --git a/cinder/tests/unit/test_migrations.py b/cinder/tests/unit/test_migrations.py index 7028777a2..57aae6482 100644 --- a/cinder/tests/unit/test_migrations.py +++ b/cinder/tests/unit/test_migrations.py @@ -817,6 +817,15 @@ class MigrationsMixin(test_migrations.WalkVersionsMixin): services = db_utils.get_table(engine, 'services') self.assertNotIn('modified_at', services.c) + def _check_048(self, engine, data): + quotas = db_utils.get_table(engine, 'quotas') + self.assertIsInstance(quotas.c.allocated.type, + sqlalchemy.types.INTEGER) + + def _post_downgrade_048(self, engine): + quotas = db_utils.get_table(engine, 'quotas') + self.assertNotIn('allocated', quotas.c) + def test_walk_versions(self): self.walk_versions(True, False) -- 2.45.2