diff --git a/neutron/db/migration/alembic_migrations/versions/50d5ba354c23_ml2_binding_vif_details.py b/neutron/db/migration/alembic_migrations/versions/50d5ba354c23_ml2_binding_vif_details.py index b7de5fc9f0..f89be7c11d 100644 --- a/neutron/db/migration/alembic_migrations/versions/50d5ba354c23_ml2_binding_vif_details.py +++ b/neutron/db/migration/alembic_migrations/versions/50d5ba354c23_ml2_binding_vif_details.py @@ -33,7 +33,6 @@ migration_for_plugins = [ 'neutron.plugins.ml2.plugin.Ml2Plugin' ] -from alembic import context from alembic import op import sqlalchemy as sa @@ -47,13 +46,24 @@ def upgrade(active_plugins=None, options=None): op.add_column('ml2_port_bindings', sa.Column('vif_details', sa.String(length=4095), nullable=False, server_default='')) - migr_context = context.get_context() - with context.begin_transaction(): - for value in ('true', 'false'): - migr_context.execute( - "UPDATE ml2_port_bindings SET" - " vif_details = '{\"port_filter\": %(value)s}'" - " WHERE cap_port_filter = %(value)s" % {'value': value}) + if op.get_bind().engine.name == 'ibm_db_sa': + op.execute( + "UPDATE ml2_port_bindings SET" + " vif_details = '{\"port_filter\": true}'" + " WHERE cap_port_filter = 1") + op.execute( + "UPDATE ml2_port_bindings SET" + " vif_details = '{\"port_filter\": false}'" + " WHERE cap_port_filter = 0") + else: + op.execute( + "UPDATE ml2_port_bindings SET" + " vif_details = '{\"port_filter\": true}'" + " WHERE cap_port_filter = true") + op.execute( + "UPDATE ml2_port_bindings SET" + " vif_details = '{\"port_filter\": false}'" + " WHERE cap_port_filter = false") op.drop_column('ml2_port_bindings', 'cap_port_filter') @@ -61,12 +71,24 @@ def downgrade(active_plugins=None, options=None): if not migration.should_run(active_plugins, migration_for_plugins): return - op.add_column('ml2_port_bindings', - sa.Column('cap_port_filter', sa.Boolean(), - nullable=False, default=False)) - migr_context = context.get_context() - with context.begin_transaction(): - migr_context.execute( + if op.get_bind().engine.name == 'ibm_db_sa': + # Note(xuhanp): DB2 doesn't allow nullable=False Column with + # "DEFAULT" clause not specified. So server_default is used. + # Using sa.text will result "DEFAULT 0" for cap_port_filter. + op.add_column('ml2_port_bindings', + sa.Column('cap_port_filter', sa.Boolean(), + nullable=False, + server_default=sa.text("0"))) + op.execute( + "UPDATE ml2_port_bindings SET" + " cap_port_filter = 1" + " WHERE vif_details LIKE '%\"port_filter\": true%'") + else: + op.add_column('ml2_port_bindings', + sa.Column('cap_port_filter', sa.Boolean(), + nullable=False, + server_default=sa.text("false"))) + op.execute( "UPDATE ml2_port_bindings SET" " cap_port_filter = true" " WHERE vif_details LIKE '%\"port_filter\": true%'")