Merge "Upgrade failure for DB2 at ml2_binding_vif_details"

This commit is contained in:
Jenkins 2014-05-14 16:07:02 +00:00 committed by Gerrit Code Review
commit 2be60f9812
1 changed files with 36 additions and 14 deletions

View File

@ -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%'")