summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Still <mikal@stillhq.com>2012-06-15 17:53:51 +1000
committerMichael Still <mikal@stillhq.com>2012-06-28 16:37:34 +1000
commit25c50ca4b3ed8523b7d1c522ad5d05481fce7300 (patch)
treea0a62957306ca0d3fe9126beeb8ec9e6b0510670
parentd537f641c71fba1acd10a617eb804c15ac1cbd3b (diff)
downloadnova-25c50ca4b3ed8523b7d1c522ad5d05481fce7300.tar.gz
nova-25c50ca4b3ed8523b7d1c522ad5d05481fce7300.tar.xz
nova-25c50ca4b3ed8523b7d1c522ad5d05481fce7300.zip
Rename the instance_id column in instance_info_caches.
The name was confusing, because it was a uuid in a column named instance_id. Change-Id: I0df0fe84b4891da9529639cf8c07c3e4d86a9958
-rw-r--r--nova/db/sqlalchemy/api.py4
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/105_instance_info_caches_uses_uuid.py71
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_downgrade.sql50
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_upgrade.sql50
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/106_add_foreign_keys.py68
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_downgrade.sql1
-rw-r--r--nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_upgrade.sql1
-rw-r--r--nova/db/sqlalchemy/models.py8
8 files changed, 247 insertions, 6 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py
index 55effd645..7acc3f73c 100644
--- a/nova/db/sqlalchemy/api.py
+++ b/nova/db/sqlalchemy/api.py
@@ -1832,7 +1832,7 @@ def instance_info_cache_get(context, instance_uuid, session=None):
session = session or get_session()
info_cache = session.query(models.InstanceInfoCache).\
- filter_by(instance_id=instance_uuid).\
+ filter_by(instance_uuid=instance_uuid).\
first()
return info_cache
@@ -1856,7 +1856,7 @@ def instance_info_cache_update(context, instance_uuid, values,
else:
# NOTE(tr3buchet): just in case someone blows away an instance's
# cache entry
- values['instance_id'] = instance_uuid
+ values['instance_uuid'] = instance_uuid
info_cache = instance_info_cache_create(context, values)
return info_cache
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/105_instance_info_caches_uses_uuid.py b/nova/db/sqlalchemy/migrate_repo/versions/105_instance_info_caches_uses_uuid.py
new file mode 100644
index 000000000..f98f399c8
--- /dev/null
+++ b/nova/db/sqlalchemy/migrate_repo/versions/105_instance_info_caches_uses_uuid.py
@@ -0,0 +1,71 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2012 Michael Still and Canonical Inc
+# All Rights Reserved.
+#
+# 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.
+
+from sqlalchemy import select, Column, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from migrate import ForeignKeyConstraint
+
+from nova import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+ meta = MetaData()
+ meta.bind = migrate_engine
+ instances = Table('instances', meta, autoload=True)
+ instance_info_caches = Table('instance_info_caches', meta, autoload=True)
+
+ # We need to remove the foreign key constraint or the column rename will
+ # fail
+ fkeys = list(instance_info_caches.c.instance_id.foreign_keys)
+ try:
+ fkey_name = fkeys[0].constraint.name
+ ForeignKeyConstraint(
+ columns=[instance_info_caches.c.instance_id],
+ refcolumns=[instances.c.uuid],
+ name=fkey_name).drop()
+ except Exception:
+ LOG.error(_("foreign key constraint couldn't be removed"))
+ raise
+
+ instance_info_caches.c.instance_id.alter(name='instance_uuid')
+
+
+def downgrade(migrate_engine):
+ meta = MetaData()
+ meta.bind = migrate_engine
+ instances = Table('instances', meta, autoload=True)
+ instance_info_caches = Table('instance_info_caches', meta, autoload=True)
+
+ # We need to remove the foreign key constraint or the column rename will
+ # fail
+ fkeys = list(instance_info_caches.c.instance_uuid.foreign_keys)
+ if fkeys:
+ try:
+ fkey_name = fkeys[0].constraint.name
+ ForeignKeyConstraint(
+ columns=[instance_info_caches.c.instance_uuid],
+ refcolumns=[instances.c.uuid],
+ name=fkey_name).drop()
+ except Exception:
+ LOG.error(_("foreign key constraint couldn't be removed"))
+ raise
+
+ instance_info_caches.c.instance_uuid.alter(name='instance_id')
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_downgrade.sql b/nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_downgrade.sql
new file mode 100644
index 000000000..563b1245a
--- /dev/null
+++ b/nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_downgrade.sql
@@ -0,0 +1,50 @@
+BEGIN TRANSACTION;
+ CREATE TEMPORARY TABLE instance_info_caches_backup (
+ created_at DATETIME,
+ updated_at DATETIME,
+ deleted_at DATETIME,
+ deleted BOOLEAN,
+ id INTEGER NOT NULL,
+ network_info TEXT,
+ instance_id VARCHAR(36),
+ PRIMARY KEY (id)
+ );
+
+ INSERT INTO instance_info_caches_backup
+ SELECT created_at,
+ updated_at,
+ deleted_at,
+ deleted,
+ id,
+ network_info,
+ instance_uuid as instance_id
+ FROM instance_info_caches;
+
+ DROP TABLE instance_info_caches;
+
+ CREATE TABLE instance_info_caches (
+ created_at DATETIME,
+ updated_at DATETIME,
+ deleted_at DATETIME,
+ deleted BOOLEAN,
+ id INTEGER NOT NULL,
+ network_info TEXT,
+ instance_id VARCHAR(36),
+ PRIMARY KEY (id)
+ );
+
+ CREATE INDEX instance_info_caches_instance_id_idx ON instance_info_caches(instance_id);
+
+ INSERT INTO instance_info_caches
+ SELECT created_at,
+ updated_at,
+ deleted_at,
+ deleted,
+ id,
+ network_info,
+ instance_id
+ FROM instance_info_caches_backup;
+
+ DROP TABLE instance_info_caches_backup;
+
+COMMIT;
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_upgrade.sql b/nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_upgrade.sql
new file mode 100644
index 000000000..4e675749e
--- /dev/null
+++ b/nova/db/sqlalchemy/migrate_repo/versions/105_sqlite_upgrade.sql
@@ -0,0 +1,50 @@
+BEGIN TRANSACTION;
+ CREATE TEMPORARY TABLE instance_info_caches_backup (
+ created_at DATETIME,
+ updated_at DATETIME,
+ deleted_at DATETIME,
+ deleted BOOLEAN,
+ id INTEGER NOT NULL,
+ network_info TEXT,
+ instance_uuid VARCHAR(36),
+ PRIMARY KEY (id)
+ );
+
+ INSERT INTO instance_info_caches_backup
+ SELECT created_at,
+ updated_at,
+ deleted_at,
+ deleted,
+ id,
+ network_info,
+ instance_id as instance_uuid
+ FROM instance_info_caches;
+
+ DROP TABLE instance_info_caches;
+
+ CREATE TABLE instance_info_caches (
+ created_at DATETIME,
+ updated_at DATETIME,
+ deleted_at DATETIME,
+ deleted BOOLEAN,
+ id INTEGER NOT NULL,
+ network_info TEXT,
+ instance_uuid VARCHAR(36),
+ PRIMARY KEY (id)
+ );
+
+ CREATE INDEX instance_info_caches_instance_uuid_idx ON instance_info_caches(instance_uuid);
+
+ INSERT INTO instance_info_caches
+ SELECT created_at,
+ updated_at,
+ deleted_at,
+ deleted,
+ id,
+ network_info,
+ instance_uuid
+ FROM instance_info_caches_backup;
+
+ DROP TABLE instance_info_caches_backup;
+
+COMMIT;
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/106_add_foreign_keys.py b/nova/db/sqlalchemy/migrate_repo/versions/106_add_foreign_keys.py
new file mode 100644
index 000000000..1aed8588e
--- /dev/null
+++ b/nova/db/sqlalchemy/migrate_repo/versions/106_add_foreign_keys.py
@@ -0,0 +1,68 @@
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
+
+# Copyright 2011 OpenStack LLC.
+# Copyright 2012 Michael Still and Canonical Inc
+# All Rights Reserved.
+#
+# 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.
+
+from sqlalchemy import select, Column, ForeignKey, Integer
+from sqlalchemy import MetaData, String, Table
+from migrate import ForeignKeyConstraint
+
+from nova import log as logging
+
+
+LOG = logging.getLogger(__name__)
+
+
+def upgrade(migrate_engine):
+ meta = MetaData()
+ meta.bind = migrate_engine
+ instances = Table('instances', meta, autoload=True)
+
+ for table in ['block_device_mapping',
+ 'consoles',
+ 'instance_info_caches',
+ 'instance_metadata',
+ 'security_group_instance_association']:
+ t = Table(table, meta, autoload=True)
+
+ try:
+ ForeignKeyConstraint(
+ columns=[t.c.instance_uuid],
+ refcolumns=[instances.c.uuid]).create()
+ except Exception:
+ LOG.error(_("foreign key constraint couldn't be created"))
+ raise
+
+
+def downgrade(migrate_engine):
+ meta = MetaData()
+ meta.bind = migrate_engine
+ instances = Table('instances', meta, autoload=True)
+
+ for table in ['block_device_mapping',
+ 'consoles',
+ 'instance_info_caches',
+ 'instance_metadata',
+ 'security_group_instance_association']:
+ t = Table(table, meta, autoload=True)
+
+ try:
+ ForeignKeyConstraint(
+ columns=[t.c.instance_uuid],
+ refcolumns=[instances.c.uuid]).drop()
+ except Exception:
+ LOG.error(_("foreign key constraint couldn't be created"))
+ raise
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_downgrade.sql b/nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_downgrade.sql
new file mode 100644
index 000000000..8d115abb8
--- /dev/null
+++ b/nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_downgrade.sql
@@ -0,0 +1 @@
+SELECT 'noop'; \ No newline at end of file
diff --git a/nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_upgrade.sql b/nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_upgrade.sql
new file mode 100644
index 000000000..8d115abb8
--- /dev/null
+++ b/nova/db/sqlalchemy/migrate_repo/versions/106_sqlite_upgrade.sql
@@ -0,0 +1 @@
+SELECT 'noop'; \ No newline at end of file
diff --git a/nova/db/sqlalchemy/models.py b/nova/db/sqlalchemy/models.py
index b285abd95..f63004386 100644
--- a/nova/db/sqlalchemy/models.py
+++ b/nova/db/sqlalchemy/models.py
@@ -290,12 +290,12 @@ class InstanceInfoCache(BASE, NovaBase):
# text column used for storing a json object of network data for api
network_info = Column(Text)
- instance_id = Column(String(36), ForeignKey('instances.uuid'),
- nullable=False, unique=True)
+ instance_uuid = Column(String(36), ForeignKey('instances.uuid'),
+ nullable=False, unique=True)
instance = relationship(Instance,
backref=backref('info_cache', uselist=False),
- foreign_keys=instance_id,
- primaryjoin=instance_id == Instance.uuid)
+ foreign_keys=instance_uuid,
+ primaryjoin=instance_uuid == Instance.uuid)
class InstanceTypes(BASE, NovaBase):