]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add 'server_default' parameter
authorAnn Kamyshnikova <akamyshnikova@mirantis.com>
Tue, 8 Jul 2014 08:52:44 +0000 (12:52 +0400)
committerAnn Kamyshnikova <akamyshnikova@mirantis.com>
Fri, 11 Jul 2014 06:46:09 +0000 (10:46 +0400)
If a model mentions 'default' it is better to set 'server_default'
as well because this 'defaut' can be reached only via code. This
change adds 'server_default' parameter to models and in database,
so if someone will use SQL query it will also use default value.

For model Router added parameter server_default. In migration it was
added by this change https://review.openstack.org/105212.

For model MeteringLabelRule added parameter server_default.
In migration it will be added by heal script due to problems
with Metering plugin and grenade.

Partial-Bug: #1295539

Change-Id: Iab6fb4eca73e4918c16dac2945fd8552ae2a0c73

13 files changed:
neutron/db/agents_db.py
neutron/db/l3_gwmode_db.py
neutron/db/metering/metering_db.py
neutron/db/migration/alembic_migrations/versions/5446f2a45467_set_server_default.py [new file with mode: 0644]
neutron/db/migration/alembic_migrations/versions/HEAD
neutron/plugins/brocade/db/models.py
neutron/plugins/cisco/db/n1kv_models_v2.py
neutron/plugins/ml2/drivers/cisco/apic/apic_model.py
neutron/plugins/ml2/drivers/type_gre.py
neutron/plugins/ml2/drivers/type_vxlan.py
neutron/plugins/mlnx/db/mlnx_models_v2.py
neutron/plugins/vmware/dbexts/models.py
neutron/plugins/vmware/dbexts/qos_db.py

index bb805da31a1c4da063b09b9cb76b427cfb96bd8b..2325c5edea58ce7e45b6bac3eb676d7b3bf094bb 100644 (file)
@@ -19,6 +19,7 @@ from oslo.config import cfg
 from oslo.db import exception as db_exc
 import sqlalchemy as sa
 from sqlalchemy.orm import exc
+from sqlalchemy import sql
 
 from neutron.common import rpc as n_rpc
 from neutron.db import model_base
@@ -54,7 +55,7 @@ class Agent(model_base.BASEV2, models_v2.HasId):
     # TOPIC.host is a target topic
     host = sa.Column(sa.String(255), nullable=False)
     admin_state_up = sa.Column(sa.Boolean, default=True,
-                               nullable=False)
+                               server_default=sql.true(), nullable=False)
     # the time when first report came from agents
     created_at = sa.Column(sa.DateTime, nullable=False)
     # the time when first report came after agents start
index 4c184019f8e5a509c94dcdce06401c43237d25fa..108ecc824b5c78c50c97d6d480de1d9c9b04d902 100644 (file)
@@ -14,6 +14,7 @@
 #
 
 import sqlalchemy as sa
+from sqlalchemy import sql
 
 from neutron.db import db_base_plugin_v2
 from neutron.db import l3_db
@@ -26,7 +27,8 @@ EXTERNAL_GW_INFO = l3.EXTERNAL_GW_INFO
 
 # Modify the Router Data Model adding the enable_snat attribute
 setattr(l3_db.Router, 'enable_snat',
-        sa.Column(sa.Boolean, default=True, nullable=False))
+        sa.Column(sa.Boolean, default=True, server_default=sql.true(),
+                  nullable=False))
 
 
 class L3_NAT_db_mixin(l3_db.L3_NAT_db_mixin):
index fe48ae4fd01f1d3f5993c234f23847f9d70f9327..cc81d9aea6cdc838ec252ee3bfdf33149823aeb3 100644 (file)
@@ -17,6 +17,7 @@
 import netaddr
 import sqlalchemy as sa
 from sqlalchemy import orm
+from sqlalchemy import sql
 
 from neutron.api.rpc.agentnotifiers import metering_rpc_agent_api
 from neutron.common import constants
@@ -41,7 +42,7 @@ class MeteringLabelRule(model_base.BASEV2, models_v2.HasId):
                                   sa.ForeignKey("meteringlabels.id",
                                                 ondelete="CASCADE"),
                                   nullable=False)
-    excluded = sa.Column(sa.Boolean, default=False)
+    excluded = sa.Column(sa.Boolean, default=False, server_default=sql.false())
 
 
 class MeteringLabel(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):
diff --git a/neutron/db/migration/alembic_migrations/versions/5446f2a45467_set_server_default.py b/neutron/db/migration/alembic_migrations/versions/5446f2a45467_set_server_default.py
new file mode 100644 (file)
index 0000000..1e9f5b5
--- /dev/null
@@ -0,0 +1,148 @@
+# Copyright 2014 OpenStack Foundation
+#
+#    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.
+#
+
+"""set_server_default
+Revision ID: 5446f2a45467
+Revises: 2db5203cb7a9
+Create Date: 2014-07-07 18:31:30.384522
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '5446f2a45467'
+down_revision = '2db5203cb7a9'
+
+
+from alembic import op
+import sqlalchemy as sa
+import sqlalchemy.sql
+
+
+from neutron.plugins.cisco.common import cisco_constants
+
+PLUGINS = {
+    'brocade': 'neutron.plugins.brocade.NeutronPlugin.BrocadePluginV2',
+    'cisco': 'neutron.plugins.cisco.network_plugin.PluginV2',
+    'ml2': 'neutron.plugins.ml2.plugin.Ml2Plugin',
+    'mlnx': 'neutron.plugins.mlnx.mlnx_plugin.MellanoxEswitchPlugin',
+    'vmware': [
+        'neutron.plugins.nicira.NeutronPlugin.NvpPluginV2',
+        'neutron.plugins.nicira.NeutronServicePlugin.NvpAdvancedPlugin',
+        'neutron.plugins.vmware.plugin.NsxPlugin',
+        'neutron.plugins.vmware.plugin.NsxServicePlugin',
+    ],
+    'agents': [
+        'neutron.plugins.linuxbridge.lb_neutron_plugin.LinuxBridgePluginV2',
+        'neutron.plugins.nec.nec_plugin.NECPluginV2',
+        'neutron.plugins.oneconvergence.plugin.OneConvergencePluginV2',
+        'neutron.plugins.openvswitch.ovs_neutron_plugin.OVSNeutronPluginV2',
+        'neutron.plugins.ibm.sdnve_neutron_plugin.SdnvePluginV2',
+        'neutron.services.loadbalancer.plugin.LoadBalancerPlugin',
+    ],
+}
+
+
+def upgrade(active_plugins=None, options=None):
+    run(active_plugins, True)
+
+
+def downgrade(active_plugins=None, options=None):
+    run(active_plugins, None)
+
+
+def run(active_plugins, default):
+    if PLUGINS['ml2'] in active_plugins:
+        set_default_ml2(default)
+    if PLUGINS['mlnx'] in active_plugins:
+        set_default_agents(default)
+        set_default_mlnx(default)
+    if PLUGINS['brocade'] in active_plugins:
+        set_default_agents(default)
+        set_default_brocade(default)
+    if PLUGINS['cisco'] in active_plugins:
+        set_default_cisco(default)
+    if set(PLUGINS['vmware']) & set(active_plugins):
+            set_default_vmware(default)
+            set_default_agents(default)
+    if set(PLUGINS['agents']) & set(active_plugins):
+        set_default_agents(default)
+
+
+def set_default_brocade(default):
+    if default:
+        default = ''
+    op.alter_column('brocadeports', 'port_id',
+                    server_default=default, existing_type=sa.String(36))
+
+
+def set_default_mlnx(default):
+    if default:
+        default = sqlalchemy.sql.false()
+    op.alter_column('segmentation_id_allocation', 'allocated',
+                    server_default=default, existing_nullable=False,
+                    existing_type=sa.Boolean)
+
+
+def set_default_cisco(default):
+    if default:
+        default = sqlalchemy.sql.false()
+        op.alter_column('cisco_n1kv_profile_bindings', 'tenant_id',
+                        existing_type=sa.String(length=36),
+                        server_default=cisco_constants.TENANT_ID_NOT_SET,
+                        existing_nullable=False)
+    else:
+        op.alter_column('cisco_n1kv_profile_bindings', 'tenant_id',
+                        existing_type=sa.String(length=36),
+                        server_default=None, existing_nullable=False)
+    op.alter_column('cisco_network_profiles', 'multicast_ip_index',
+                    server_default=default, existing_type=sa.Integer)
+    op.alter_column('cisco_n1kv_vlan_allocations', 'allocated',
+                    existing_type=sa.Boolean,
+                    server_default=default, existing_nullable=False)
+    op.alter_column('cisco_n1kv_vxlan_allocations', 'allocated',
+                    existing_type=sa.Boolean,
+                    server_default=default, existing_nullable=False)
+
+
+def set_default_vmware(default=None):
+    if default:
+        default = sqlalchemy.sql.false()
+    op.alter_column('nsxrouterextattributess', 'service_router',
+                    server_default=default, existing_nullable=False,
+                    existing_type=sa.Boolean)
+    op.alter_column('nsxrouterextattributess', 'distributed',
+                    server_default=default, existing_nullable=False,
+                    existing_type=sa.Boolean)
+    op.alter_column('qosqueues', 'default',
+                    server_default=default, existing_type=sa.Boolean)
+
+
+def set_default_agents(default=None):
+    if default:
+        default = sqlalchemy.sql.true()
+    op.alter_column('agents', 'admin_state_up',
+                    server_default=default, existing_nullable=False,
+                    existing_type=sa.Boolean)
+
+
+def set_default_ml2(default=None):
+    if default:
+        default = sqlalchemy.sql.false()
+    op.alter_column('ml2_gre_allocations', 'allocated',
+                    server_default=default, existing_nullable=False,
+                    existing_type=sa.Boolean)
+    op.alter_column('ml2_vxlan_allocations', 'allocated',
+                    server_default=default, existing_nullable=False,
+                    existing_type=sa.Boolean)
index 2431c7d6b6982079fce4727aaa53af86f3925af5..85818488464d5fb79bb14047fb9e77a32f80f3f0 100644 (file)
@@ -1 +1 @@
-2db5203cb7a9
\ No newline at end of file
+5446f2a45467
\ No newline at end of file
index 313427c5b1f0f32e505d7b6611de17b083a954c1..4a0df671ba56b4dbe7c7b78865292dcbcfc7b455 100644 (file)
@@ -35,7 +35,8 @@ class BrocadeNetwork(model_base.BASEV2, models_v2.HasId):
 class BrocadePort(model_base.BASEV2):
     """Schema for brocade port."""
 
-    port_id = sa.Column(sa.String(36), primary_key=True, default="")
+    port_id = sa.Column(sa.String(36), primary_key=True, default="",
+                        server_default='')
     network_id = sa.Column(sa.String(36),
                            sa.ForeignKey("brocadenetworks.id"),
                            nullable=False)
index b104666a9c4653c4a43ee50e0d0d2cc788d73db8..63573d674db21f2b530fa64899a88c0f983bfc3f 100644 (file)
@@ -16,6 +16,7 @@
 # @author: Rudrajit Tapadar, Cisco Systems Inc.
 
 import sqlalchemy as sa
+from sqlalchemy import sql
 
 from neutron.db import model_base
 from neutron.db import models_v2
@@ -36,7 +37,8 @@ class N1kvVlanAllocation(model_base.BASEV2):
                                  primary_key=True)
     vlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
                         autoincrement=False)
-    allocated = sa.Column(sa.Boolean, nullable=False, default=False)
+    allocated = sa.Column(sa.Boolean, nullable=False, default=False,
+                          server_default=sql.false())
     network_profile_id = sa.Column(sa.String(36),
                                    sa.ForeignKey('cisco_network_profiles.id',
                                                  ondelete="CASCADE"),
@@ -50,7 +52,8 @@ class N1kvVxlanAllocation(model_base.BASEV2):
 
     vxlan_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
                          autoincrement=False)
-    allocated = sa.Column(sa.Boolean, nullable=False, default=False)
+    allocated = sa.Column(sa.Boolean, nullable=False, default=False,
+                          server_default=sql.false())
     network_profile_id = sa.Column(sa.String(36),
                                    sa.ForeignKey('cisco_network_profiles.id',
                                                  ondelete="CASCADE"),
@@ -121,7 +124,8 @@ class NetworkProfile(model_base.BASEV2, models_v2.HasId):
                              nullable=False)
     sub_type = sa.Column(sa.String(255))
     segment_range = sa.Column(sa.String(255))
-    multicast_ip_index = sa.Column(sa.Integer, default=0)
+    multicast_ip_index = sa.Column(sa.Integer, default=0,
+                                   server_default=sql.false())
     multicast_ip_range = sa.Column(sa.String(255))
     physical_network = sa.Column(sa.String(255))
 
@@ -152,7 +156,8 @@ class ProfileBinding(model_base.BASEV2):
                                      name='profile_type'))
     tenant_id = sa.Column(sa.String(36),
                           primary_key=True,
-                          default=cisco_constants.TENANT_ID_NOT_SET)
+                          default=cisco_constants.TENANT_ID_NOT_SET,
+                          server_default=cisco_constants.TENANT_ID_NOT_SET)
     profile_id = sa.Column(sa.String(36), primary_key=True)
 
 
index a3c05d630604378c342767e44004e43810aa2824..54d36f94c22aaadf2b186bdd8da04ecf5bac7a52 100644 (file)
@@ -16,6 +16,7 @@
 # @author: Arvind Somya (asomya@cisco.com), Cisco Systems Inc.
 
 import sqlalchemy as sa
+from sqlalchemy import sql
 
 from neutron.db import api as db_api
 from neutron.db import model_base
@@ -31,7 +32,8 @@ class NetworkEPG(model_base.BASEV2):
     network_id = sa.Column(sa.String(255), nullable=False, primary_key=True)
     epg_id = sa.Column(sa.String(64), nullable=False)
     segmentation_id = sa.Column(sa.String(64), nullable=False)
-    provider = sa.Column(sa.Boolean, default=False, nullable=False)
+    provider = sa.Column(sa.Boolean, default=False, server_default=sql.false(),
+                         nullable=False)
 
 
 class PortProfile(model_base.BASEV2):
index b9a00c0cb86b3a1741b1f8bafff2eab27b661323..69fb2ab6c09d7851f444f022bfcf9a68c022b8e6 100644 (file)
@@ -17,6 +17,7 @@ from oslo.config import cfg
 from six import moves
 import sqlalchemy as sa
 from sqlalchemy.orm import exc as sa_exc
+from sqlalchemy import sql
 
 from neutron.common import exceptions as exc
 from neutron.db import api as db_api
@@ -45,7 +46,8 @@ class GreAllocation(model_base.BASEV2):
 
     gre_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
                        autoincrement=False)
-    allocated = sa.Column(sa.Boolean, nullable=False, default=False)
+    allocated = sa.Column(sa.Boolean, nullable=False, default=False,
+                          server_default=sql.false())
 
 
 class GreEndpoints(model_base.BASEV2):
index b5aeadbb622ebc158a40d9a6dff6d4b87a5d0269..7c24782b9a97cf8fb9526685869c1ba2137d90c0 100644 (file)
@@ -17,6 +17,7 @@
 from oslo.config import cfg
 import sqlalchemy as sa
 from sqlalchemy.orm import exc as sa_exc
+from sqlalchemy import sql
 
 from neutron.common import exceptions as exc
 from neutron.db import api as db_api
@@ -51,7 +52,8 @@ class VxlanAllocation(model_base.BASEV2):
 
     vxlan_vni = sa.Column(sa.Integer, nullable=False, primary_key=True,
                           autoincrement=False)
-    allocated = sa.Column(sa.Boolean, nullable=False, default=False)
+    allocated = sa.Column(sa.Boolean, nullable=False, default=False,
+                          server_default=sql.false())
 
 
 class VxlanEndpoints(model_base.BASEV2):
index 8e55acea5bcf6b311111abd630eda47bb245b7d7..4b1bc94dcaf97ca8efd2c557f7ee31c3ff86c881 100644 (file)
@@ -14,6 +14,7 @@
 # limitations under the License.
 
 import sqlalchemy as sa
+from sqlalchemy import sql
 
 from neutron.db import model_base
 
@@ -26,7 +27,8 @@ class SegmentationIdAllocation(model_base.BASEV2):
                                  primary_key=True)
     segmentation_id = sa.Column(sa.Integer, nullable=False, primary_key=True,
                                 autoincrement=False)
-    allocated = sa.Column(sa.Boolean, nullable=False, default=False)
+    allocated = sa.Column(sa.Boolean, nullable=False, default=False,
+                          server_default=sql.false())
 
     def __init__(self, physical_network, segmentation_id):
         self.physical_network = physical_network
index 35633281188ceac76a46b865791024a52dcfc4a8..53bf24f204903eaa7f23996d8f138b323296a10f 100644 (file)
@@ -17,6 +17,7 @@
 
 from sqlalchemy import Boolean, Column, Enum, ForeignKey, Integer, String
 from sqlalchemy import orm
+from sqlalchemy import sql
 
 from neutron.db import l3_db
 from neutron.db import model_base
@@ -125,8 +126,10 @@ class NSXRouterExtAttributes(model_base.BASEV2):
     router_id = Column(String(36),
                        ForeignKey('routers.id', ondelete="CASCADE"),
                        primary_key=True)
-    distributed = Column(Boolean, default=False, nullable=False)
-    service_router = Column(Boolean, default=False, nullable=False)
+    distributed = Column(Boolean, default=False, server_default=sql.false(),
+                         nullable=False)
+    service_router = Column(Boolean, default=False, server_default=sql.false(),
+                            nullable=False)
     # Add a relationship to the Router model in order to instruct
     # SQLAlchemy to eagerly load this association
     router = orm.relationship(
index b01050201bb223eb7a3094521d363f10a3dfccdb..13d0ddb9ddc7819abe10ea63c1623de43e3051a3 100644 (file)
@@ -16,6 +16,7 @@
 import sqlalchemy as sa
 from sqlalchemy import orm
 from sqlalchemy.orm import exc
+from sqlalchemy import sql
 
 from neutron.api.v2 import attributes as attr
 from neutron.db import db_base_plugin_v2
@@ -31,7 +32,7 @@ LOG = log.getLogger(__name__)
 
 class QoSQueue(model_base.BASEV2, models_v2.HasId, models_v2.HasTenant):
     name = sa.Column(sa.String(255))
-    default = sa.Column(sa.Boolean, default=False)
+    default = sa.Column(sa.Boolean, default=False, server_default=sql.false())
     min = sa.Column(sa.Integer, nullable=False)
     max = sa.Column(sa.Integer, nullable=True)
     qos_marking = sa.Column(sa.Enum('untrusted', 'trusted',