1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2011 OpenStack LLC.
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may
7
# not use this file except in compliance with the License. You may obtain
8
# a copy of the License at
10
# http://www.apache.org/licenses/LICENSE-2.0
12
# Unless required by applicable law or agreed to in writing, software
13
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
14
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
15
# License for the specific language governing permissions and limitations
18
from sqlalchemy import and_, select
19
from sqlalchemy import BigInteger, Boolean, Column, DateTime
20
from sqlalchemy import Integer, MetaData, String
21
from sqlalchemy import Table
23
from nova import utils
26
def upgrade(migrate_engine):
28
meta.bind = migrate_engine
30
vifs = Table('virtual_interfaces', meta, autoload=True)
31
networks = Table('networks', meta, autoload=True)
33
bw_usage_cache = Table('bw_usage_cache', meta,
34
Column('created_at', DateTime(timezone=False)),
35
Column('updated_at', DateTime(timezone=False)),
36
Column('deleted_at', DateTime(timezone=False)),
37
Column('deleted', Boolean(create_constraint=True, name=None)),
38
Column('id', Integer(), primary_key=True, nullable=False),
39
Column('instance_id', Integer(), nullable=False),
40
Column('network_label',
41
String(length=255, convert_unicode=False,
43
unicode_error=None, _warn_on_bytestring=False)),
44
Column('start_period', DateTime(timezone=False),
46
Column('last_refreshed', DateTime(timezone=False)),
47
Column('bw_in', BigInteger()),
48
Column('bw_out', BigInteger()),
50
mac_column = Column('mac', String(255))
51
bw_usage_cache.create_column(mac_column)
53
bw_usage_cache.update()\
54
.values(mac=select([vifs.c.address])\
56
networks.c.label == bw_usage_cache.c.network_label,
57
networks.c.id == vifs.c.network_id,
58
bw_usage_cache.c.instance_id == vifs.c.instance_id))\
59
.as_scalar()).execute()
61
bw_usage_cache.c.network_label.drop()
64
def downgrade(migrate_engine):
66
meta.bind = migrate_engine
68
vifs = Table('virtual_interfaces', meta, autoload=True)
69
network = Table('networks', meta, autoload=True)
71
bw_usage_cache = Table('bw_usage_cache', meta,
72
Column('created_at', DateTime(timezone=False)),
73
Column('updated_at', DateTime(timezone=False)),
74
Column('deleted_at', DateTime(timezone=False)),
75
Column('deleted', Boolean(create_constraint=True, name=None)),
76
Column('id', Integer(), primary_key=True, nullable=False),
77
Column('instance_id', Integer(), nullable=False),
78
Column('mac', String(255)),
79
Column('start_period', DateTime(timezone=False),
81
Column('last_refreshed', DateTime(timezone=False)),
82
Column('bw_in', BigInteger()),
83
Column('bw_out', BigInteger()),
86
network_label_column = Column('network_label', String(255))
87
bw_usage_cache.create_column(network_label_column)
89
bw_usage_cache.update()\
90
.values(network_label=select([network.c.label])\
92
network.c.id == vifs.c.network_id,
93
vifs.c.address == bw_usage_cache.c.mac,
94
bw_usage_cache.c.instance_id == vifs.c.instance_id))\
95
.as_scalar()).execute()
97
bw_usage_cache.c.mac.drop()