From ae40bf1fd9872f8abf23ce4b2fe0a47daed59b76 Mon Sep 17 00:00:00 2001 From: Manjeet Singh Bhatia Date: Thu, 5 Nov 2015 21:43:58 +0000 Subject: [PATCH] Reuse constants defined in attributes This change reuses constants defined in attributes module in db modules. Change-Id: Idbb5f21a485a41a814b6b8c5744348d25443239e --- neutron/api/v2/attributes.py | 3 --- neutron/db/address_scope_db.py | 3 ++- neutron/db/agents_db.py | 2 +- neutron/db/flavors_db.py | 7 ++++--- neutron/db/l3_db.py | 4 ++-- neutron/db/l3_hamode_db.py | 4 ++-- neutron/db/metering/metering_db.py | 5 +++-- neutron/db/models_v2.py | 2 +- neutron/db/quota/models.py | 5 +++-- neutron/db/rbac_db_models.py | 4 +++- neutron/db/securitygroups_db.py | 7 ++++--- neutron/db/servicetype_db.py | 3 ++- neutron/services/provider_configuration.py | 6 ++++-- neutron/tests/functional/db/test_migrations.py | 6 ++++-- 14 files changed, 35 insertions(+), 26 deletions(-) diff --git a/neutron/api/v2/attributes.py b/neutron/api/v2/attributes.py index 506ee2f3e26..c9f43b4e1a0 100644 --- a/neutron/api/v2/attributes.py +++ b/neutron/api/v2/attributes.py @@ -34,9 +34,6 @@ SHARED = 'shared' # Used by range check to indicate no limit for a bound. UNLIMITED = None -# TODO(watanabe.isao): A fix like in neutron/db/models_v2.py needs to be -# done in other db modules, to reuse the following constants. -# Common definitions for maximum string field length NAME_MAX_LEN = 255 TENANT_ID_MAX_LEN = 255 DESCRIPTION_MAX_LEN = 255 diff --git a/neutron/db/address_scope_db.py b/neutron/db/address_scope_db.py index 9a4e6832f94..f08f0b5839c 100644 --- a/neutron/db/address_scope_db.py +++ b/neutron/db/address_scope_db.py @@ -17,6 +17,7 @@ from oslo_utils import uuidutils import sqlalchemy as sa from sqlalchemy.orm import exc +from neutron.api.v2 import attributes as attr from neutron.db import model_base from neutron.db import models_v2 from neutron.extensions import address_scope as ext_address_scope @@ -29,7 +30,7 @@ class AddressScope(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): __tablename__ = "address_scopes" - name = sa.Column(sa.String(255), nullable=False) + name = sa.Column(sa.String(attr.NAME_MAX_LEN), nullable=False) shared = sa.Column(sa.Boolean, nullable=False) diff --git a/neutron/db/agents_db.py b/neutron/db/agents_db.py index 1eea41574cf..592340fec1c 100644 --- a/neutron/db/agents_db.py +++ b/neutron/db/agents_db.py @@ -96,7 +96,7 @@ class Agent(model_base.BASEV2, models_v2.HasId): # updated when agents report heartbeat_timestamp = sa.Column(sa.DateTime, nullable=False) # description is note for admin user - description = sa.Column(sa.String(255)) + description = sa.Column(sa.String(attributes.DESCRIPTION_MAX_LEN)) # configurations: a json dict string, I think 4095 is enough configurations = sa.Column(sa.String(4095), nullable=False) # load - number of resources hosted by the agent diff --git a/neutron/db/flavors_db.py b/neutron/db/flavors_db.py index d48e46fedcb..f0af94db874 100644 --- a/neutron/db/flavors_db.py +++ b/neutron/db/flavors_db.py @@ -18,6 +18,7 @@ import sqlalchemy as sa from sqlalchemy import orm from sqlalchemy.orm import exc as sa_exc +from neutron.api.v2 import attributes as attr from neutron.db import common_db_mixin from neutron.db import model_base from neutron.db import models_v2 @@ -28,8 +29,8 @@ LOG = logging.getLogger(__name__) class Flavor(model_base.BASEV2, models_v2.HasId): - name = sa.Column(sa.String(255)) - description = sa.Column(sa.String(1024)) + name = sa.Column(sa.String(attr.NAME_MAX_LEN)) + description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN)) enabled = sa.Column(sa.Boolean, nullable=False, default=True, server_default=sa.sql.true()) # Make it True for multi-type flavors @@ -39,7 +40,7 @@ class Flavor(model_base.BASEV2, models_v2.HasId): class ServiceProfile(model_base.BASEV2, models_v2.HasId): - description = sa.Column(sa.String(1024)) + description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN)) driver = sa.Column(sa.String(1024), nullable=False) enabled = sa.Column(sa.Boolean, nullable=False, default=True, server_default=sa.sql.true()) diff --git a/neutron/db/l3_db.py b/neutron/db/l3_db.py index a07cb166175..8a051c74db8 100644 --- a/neutron/db/l3_db.py +++ b/neutron/db/l3_db.py @@ -71,7 +71,7 @@ class RouterPort(model_base.BASEV2): # queries on router ports, and also prevents potential error-prone # conditions which might originate from users altering the DEVICE_OWNER # property of router ports. - port_type = sa.Column(sa.String(255)) + port_type = sa.Column(sa.String(attributes.DEVICE_OWNER_MAX_LEN)) port = orm.relationship( models_v2.Port, backref=orm.backref('routerport', uselist=False, cascade="all,delete"), @@ -82,7 +82,7 @@ class Router(model_base.HasStandardAttributes, model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): """Represents a v2 neutron router.""" - name = sa.Column(sa.String(255)) + name = sa.Column(sa.String(attributes.NAME_MAX_LEN)) status = sa.Column(sa.String(16)) admin_state_up = sa.Column(sa.Boolean) gw_port_id = sa.Column(sa.String(36), sa.ForeignKey('ports.id')) diff --git a/neutron/db/l3_hamode_db.py b/neutron/db/l3_hamode_db.py index 87545df2901..85456d8503d 100644 --- a/neutron/db/l3_hamode_db.py +++ b/neutron/db/l3_hamode_db.py @@ -114,8 +114,8 @@ class L3HARouterNetwork(model_base.BASEV2): __tablename__ = 'ha_router_networks' - tenant_id = sa.Column(sa.String(255), primary_key=True, - nullable=False) + tenant_id = sa.Column(sa.String(attributes.TENANT_ID_MAX_LEN), + primary_key=True, nullable=False) network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', ondelete="CASCADE"), nullable=False, primary_key=True) diff --git a/neutron/db/metering/metering_db.py b/neutron/db/metering/metering_db.py index 227b9ad23e2..7d28af0f7ed 100644 --- a/neutron/db/metering/metering_db.py +++ b/neutron/db/metering/metering_db.py @@ -20,6 +20,7 @@ from sqlalchemy import orm from sqlalchemy import sql from neutron.api.rpc.agentnotifiers import metering_rpc_agent_api +from neutron.api.v2 import attributes as attr from neutron.common import constants from neutron.db import common_db_mixin as base_db from neutron.db import l3_db @@ -43,8 +44,8 @@ class MeteringLabelRule(model_base.BASEV2, models_v2.HasId): class MeteringLabel(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): - name = sa.Column(sa.String(255)) - description = sa.Column(sa.String(1024)) + name = sa.Column(sa.String(attr.NAME_MAX_LEN)) + description = sa.Column(sa.String(attr.LONG_DESCRIPTION_MAX_LEN)) rules = orm.relationship(MeteringLabelRule, backref="label", cascade="delete", lazy="joined") routers = orm.relationship( diff --git a/neutron/db/models_v2.py b/neutron/db/models_v2.py index fbcf6128790..5b78341b37d 100644 --- a/neutron/db/models_v2.py +++ b/neutron/db/models_v2.py @@ -234,7 +234,7 @@ class SubnetPool(model_base.HasStandardAttributes, model_base.BASEV2, """Represents a neutron subnet pool. """ - name = sa.Column(sa.String(255)) + name = sa.Column(sa.String(attr.NAME_MAX_LEN)) ip_version = sa.Column(sa.Integer, nullable=False) default_prefixlen = sa.Column(sa.Integer, nullable=False) min_prefixlen = sa.Column(sa.Integer, nullable=False) diff --git a/neutron/db/quota/models.py b/neutron/db/quota/models.py index a4dbd7117e4..976657425e5 100644 --- a/neutron/db/quota/models.py +++ b/neutron/db/quota/models.py @@ -16,6 +16,7 @@ import sqlalchemy as sa from sqlalchemy import orm from sqlalchemy import sql +from neutron.api.v2 import attributes as attr from neutron.db import model_base from neutron.db import models_v2 @@ -32,7 +33,7 @@ class ResourceDelta(model_base.BASEV2): class Reservation(model_base.BASEV2, models_v2.HasId): - tenant_id = sa.Column(sa.String(255)) + tenant_id = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN)) expiration = sa.Column(sa.DateTime()) resource_deltas = orm.relationship(ResourceDelta, backref='reservation', @@ -55,7 +56,7 @@ class QuotaUsage(model_base.BASEV2): resource = sa.Column(sa.String(255), nullable=False, primary_key=True, index=True) - tenant_id = sa.Column(sa.String(255), nullable=False, + tenant_id = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN), nullable=False, primary_key=True, index=True) dirty = sa.Column(sa.Boolean, nullable=False, server_default=sql.false()) diff --git a/neutron/db/rbac_db_models.py b/neutron/db/rbac_db_models.py index 37314664337..1490e72a292 100644 --- a/neutron/db/rbac_db_models.py +++ b/neutron/db/rbac_db_models.py @@ -18,6 +18,7 @@ import abc import sqlalchemy as sa from sqlalchemy.orm import validates +from neutron.api.v2 import attributes as attr from neutron.common import exceptions as n_exc from neutron.db import model_base @@ -38,7 +39,8 @@ class RBACColumns(model_base.HasId, model_base.HasTenant): # the target_tenant is the subject that the policy will affect. this may # also be a wildcard '*' to indicate all tenants or it may be a role if # neutron gets better integration with keystone - target_tenant = sa.Column(sa.String(255), nullable=False) + target_tenant = sa.Column(sa.String(attr.TENANT_ID_MAX_LEN), + nullable=False) action = sa.Column(sa.String(255), nullable=False) diff --git a/neutron/db/securitygroups_db.py b/neutron/db/securitygroups_db.py index c6b254e7467..f395f1cc67a 100644 --- a/neutron/db/securitygroups_db.py +++ b/neutron/db/securitygroups_db.py @@ -47,14 +47,15 @@ class SecurityGroup(model_base.HasStandardAttributes, model_base.BASEV2, models_v2.HasId, models_v2.HasTenant): """Represents a v2 neutron security group.""" - name = sa.Column(sa.String(255)) - description = sa.Column(sa.String(255)) + name = sa.Column(sa.String(attributes.NAME_MAX_LEN)) + description = sa.Column(sa.String(attributes.DESCRIPTION_MAX_LEN)) class DefaultSecurityGroup(model_base.BASEV2): __tablename__ = 'default_security_group' - tenant_id = sa.Column(sa.String(255), primary_key=True, nullable=False) + tenant_id = sa.Column(sa.String(attributes.TENANT_ID_MAX_LEN), + primary_key=True, nullable=False) security_group_id = sa.Column(sa.String(36), sa.ForeignKey("securitygroups.id", ondelete="CASCADE"), diff --git a/neutron/db/servicetype_db.py b/neutron/db/servicetype_db.py index a717a27d082..825f3cff2df 100644 --- a/neutron/db/servicetype_db.py +++ b/neutron/db/servicetype_db.py @@ -18,6 +18,7 @@ from itertools import chain from oslo_log import log as logging import sqlalchemy as sa +from neutron.api.v2 import attributes as attr from neutron.db import model_base from neutron.services import provider_configuration as pconf @@ -25,7 +26,7 @@ LOG = logging.getLogger(__name__) class ProviderResourceAssociation(model_base.BASEV2): - provider_name = sa.Column(sa.String(255), + provider_name = sa.Column(sa.String(attr.NAME_MAX_LEN), nullable=False, primary_key=True) # should be manually deleted on resource deletion resource_id = sa.Column(sa.String(36), nullable=False, primary_key=True, diff --git a/neutron/services/provider_configuration.py b/neutron/services/provider_configuration.py index 6bc9e4dace8..5823ae937aa 100644 --- a/neutron/services/provider_configuration.py +++ b/neutron/services/provider_configuration.py @@ -21,6 +21,7 @@ from oslo_log import log as logging import stevedore from neutron._i18n import _LW +from neutron.api.v2 import attributes as attr from neutron.common import exceptions as n_exc LOG = logging.getLogger(__name__) @@ -133,9 +134,10 @@ def parse_service_provider_opt(service_module='neutron'): """Parse service definition opts and returns result.""" def validate_name(name): - if len(name) > 255: + if len(name) > attr.NAME_MAX_LEN: raise n_exc.Invalid( - _("Provider name is limited by 255 characters: %s") % name) + _("Provider name %(name)s is limited by %(len)s characters") + % {'name': name, 'len': attr.NAME_MAX_LEN}) neutron_mod = NeutronModule(service_module) svc_providers_opt = neutron_mod.service_providers() diff --git a/neutron/tests/functional/db/test_migrations.py b/neutron/tests/functional/db/test_migrations.py index b46f2493183..6419f962d45 100644 --- a/neutron/tests/functional/db/test_migrations.py +++ b/neutron/tests/functional/db/test_migrations.py @@ -24,6 +24,7 @@ from oslo_db.sqlalchemy import test_migrations import sqlalchemy from sqlalchemy import event +from neutron.api.v2 import attributes as attr import neutron.db.migration as migration_help from neutron.db.migration.alembic_migrations import external from neutron.db.migration import cli as migration @@ -283,8 +284,9 @@ class TestSanityCheck(test_base.DbTestCase): 'securitygroups', sqlalchemy.MetaData(), sqlalchemy.Column('id', sqlalchemy.String(length=36), nullable=False), - sqlalchemy.Column('name', sqlalchemy.String(255)), - sqlalchemy.Column('tenant_id', sqlalchemy.String(255))) + sqlalchemy.Column('name', sqlalchemy.String(attr.NAME_MAX_LEN)), + sqlalchemy.Column('tenant_id', + sqlalchemy.String(attr.TENANT_ID_MAX_LEN))) with self.engine.connect() as conn: SecurityGroup.create(conn)