]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
Fix downgrade in 002_quota_class.py for MySQL
authorJay S. Bryant <jsbryant@us.ibm.com>
Mon, 6 Jan 2014 18:44:26 +0000 (12:44 -0600)
committerJay S. Bryant <jsbryant@us.ibm.com>
Mon, 6 Jan 2014 19:46:15 +0000 (13:46 -0600)
Downgrade in the script 002_quota_class.py is failing for MySQL
because there is an attempt to delete the quota_classes table
while the reservations table still has a foreign key defined.
The foreign key causes the delete of the quota_classes table to fail.

This change is based upon commit 8328fc46d783f4ec9286eededafa91afae89cba0
which makes a similar change to 018_add_qos_specs.py .

Change-Id: I81844a2da4fb3b831f1f9dead3634e82f54e559e
Closes-bug: 1265944

cinder/db/sqlalchemy/migrate_repo/versions/002_quota_class.py

index 4124675e8ac59cb3e54e6865dce8a05780b113ef..4217d1a6942959dab847a098117260cc0f59f0cb 100644 (file)
@@ -12,6 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
+from migrate import ForeignKeyConstraint
 from sqlalchemy import Boolean, Column, DateTime
 from sqlalchemy import MetaData, Integer, String, Table, ForeignKey
 
@@ -109,6 +110,22 @@ def downgrade(migrate_engine):
     meta = MetaData()
     meta.bind = migrate_engine
 
+    if migrate_engine.name == 'mysql':
+        # NOTE(jsbryant): MySQL Cannot drop the quota_usages table
+        # until the foreign key reservations_ibfk_1 is removed.  We
+        # remove the foreign key first, and then we drop the table.
+        table = Table('reservations', meta, autoload=True)
+        ref_table = Table('reservations', meta, autoload=True)
+        params = {'columns': [table.c['usage_id']],
+                  'refcolumns': [ref_table.c['id']],
+                  'name': 'reservations_ibfk_1'}
+
+        try:
+            fkey = ForeignKeyConstraint(**params)
+            fkey.drop()
+        except Exception:
+            LOG.error(_("Dropping foreign key reservations_ibfk_1 failed."))
+
     quota_classes = Table('quota_classes', meta, autoload=True)
     try:
         quota_classes.drop()