From 6dbbd26cb193d659b517e440f19737bb899af917 Mon Sep 17 00:00:00 2001 From: Jason Kölker Date: Tue, 7 Feb 2012 09:54:30 -0600 Subject: Update migration to work when data already exists Fixes LP928322 Change-Id: I64213b863f019700f0555ab0db9fa0914145548a --- .../075_convert_bw_usage_to_store_network_id.py | 36 +++++++++++++++------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/nova/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py b/nova/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py index e75d6a6d9..c7a40b0ff 100644 --- a/nova/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py +++ b/nova/db/sqlalchemy/migrate_repo/versions/075_convert_bw_usage_to_store_network_id.py @@ -46,12 +46,19 @@ def upgrade(migrate_engine): networks = Table('networks', meta, autoload=True) mac_column = Column('mac', String(255)) - bw_usage_cache.create_column(mac_column) + try: + bw_usage_cache.create_column(mac_column) + except Exception: + # NOTE(jkoelker) passing here since this migration was broken + # at one point + pass bw_usage_cache.update()\ .values(mac=select([vifs.c.address])\ - .where(and_(networks.c.label == bw_usage_cache.c.network_label, - networks.c.id == vifs.c.network_id))\ + .where(and_( + networks.c.label == bw_usage_cache.c.network_label, + networks.c.id == vifs.c.network_id, + bw_usage_cache.c.instance_id == vifs.c.instance_id))\ .as_scalar()).execute() bw_usage_cache.c.network_label.drop() @@ -61,7 +68,7 @@ def downgrade(migrate_engine): meta.bind = migrate_engine bw_usage_cache = Table('bw_usage_cache', meta, Column('id', Integer, primary_key=True), - Column('network_uuid', String(36)), + Column('mac', String(255)), Column('instance_id', Integer, nullable=False), Column('start_period', DateTime, nullable=False), Column('last_refreshed', DateTime), @@ -81,10 +88,17 @@ def downgrade(migrate_engine): bw_usage_cache.create_column(network_label_column) - bw_usage_cache.update()\ - .values(network_label=select([network.c.label])\ - .where(and_(network.c.id == vifs.c.network_id, - vifs.c.address == bw_usage_cache.c.mac))\ - .as_scalar()).execute() - - bw_usage_cache.c.network_uuid.drop() + try: + bw_usage_cache.update()\ + .values(network_label=select([network.c.label])\ + .where(and_( + network.c.id == vifs.c.network_id, + vifs.c.address == bw_usage_cache.c.mac, + bw_usage_cache.c.instance_id == vifs.c.instance_id))\ + .as_scalar()).execute() + except Exception: + # NOTE(jkoelker) passing here since this migration was broken + # at one point + pass + + bw_usage_cache.c.mac.drop() -- cgit