← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1173269] Re: db migration 022 question

 

*** This bug is a duplicate of bug 1160114 ***
    https://bugs.launchpad.net/bugs/1160114

** This bug has been marked a duplicate of bug 1160114
   test_postgresql_opportunistically fails on RHEL

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to Glance.
https://bugs.launchpad.net/bugs/1173269

Title:
  db migration 022 question

Status in OpenStack Image Registry and Delivery Service (Glance):
  Confirmed

Bug description:
  I suspect the latest glance db migration has a bug; I'm not certain but here's the evidence
  when running against a mysql backend. It could be that my initial state is iffy, but I thought
  I'd report it anyway.

  Its migration 022. It changes the image_members table. If I run the migration with rows
  in the table it seems to fail with a foreign key constraint, but it exits with an error 
  about 'cant DROP key'. The bum steer on the error is due to not printing out the
  initial exception.

  $ sudo glance-manage db_sync
  10156 INFO glance.db.sqlalchemy.migration [- - -] Upgrading database to version latest
  10156 CRITICAL glance [- - -] (OperationalError) (1091, "Can't DROP 'image_members_image_id_key'; check that column/key exists") 'ALTER TABLE image_members DROP INDEX image_members_image_id_key' ()
  2013-04-25 11:55:34.807 10156 TRACE glance Traceback (most recent call last):
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/bin/glance-manage", line 134, in <module>
  2013-04-25 11:55:34.807 10156 TRACE glance     main()
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/bin/glance-manage", line 128, in main
  2013-04-25 11:55:34.807 10156 TRACE glance     CONF.command.func()
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/bin/glance-manage", line 80, in do_db_sync
  2013-04-25 11:55:34.807 10156 TRACE glance     CONF.command.current_version)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migration.py", line 127, in db_sync
  2013-04-25 11:55:34.807 10156 TRACE glance     upgrade(version=version)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migration.py", line 66, in upgrade
  2013-04-25 11:55:34.807 10156 TRACE glance     return versioning_api.upgrade(sql_connection, repo_path, version)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/versioning/api.py", line 186, in upgrade
  2013-04-25 11:55:34.807 10156 TRACE glance     return _migrate(url, repository, version, upgrade=True, err=err, **opts)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "<string>", line 2, in _migrate
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/versioning/util/__init__.py", line 159, in with_engine
  2013-04-25 11:55:34.807 10156 TRACE glance     return f(*a, **kw)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/versioning/api.py", line 366, in _migrate
  2013-04-25 11:55:34.807 10156 TRACE glance     schema.runchange(ver, change, changeset.step)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/versioning/schema.py", line 91, in runchange
  2013-04-25 11:55:34.807 10156 TRACE glance     change.run(self.engine, step)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/versioning/script/py.py", line 145, in run
  2013-04-25 11:55:34.807 10156 TRACE glance     script_func(engine)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/glance/db/sqlalchemy/migrate_repo/versions/022_image_member_index.py", line 43, in upgrade
  2013-04-25 11:55:34.807 10156 TRACE glance     table=image_members).drop()
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/changeset/constraint.py", line 59, in drop
  2013-04-25 11:55:34.807 10156 TRACE glance     self.__do_imports('constraintdropper', *a, **kw)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/changeset/constraint.py", line 32, in __do_imports
  2013-04-25 11:55:34.807 10156 TRACE glance     run_single_visitor(engine, visitorcallable, self, *a, **kw)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/changeset/databases/visitor.py", line 75, in run_single_visitor
  2013-04-25 11:55:34.807 10156 TRACE glance     fn(element, **kwargs)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/changeset/ansisql.py", line 272, in visit_migrate_unique_constraint
  2013-04-25 11:55:34.807 10156 TRACE glance     self._visit_constraint(*p, **k)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/changeset/ansisql.py", line 284, in _visit_constraint
  2013-04-25 11:55:34.807 10156 TRACE glance     self.execute()
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/migrate/changeset/ansisql.py", line 42, in execute
  2013-04-25 11:55:34.807 10156 TRACE glance     return self.connection.execute(self.buffer.getvalue())
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1405, in execute
  2013-04-25 11:55:34.807 10156 TRACE glance     params)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1582, in _execute_text
  2013-04-25 11:55:34.807 10156 TRACE glance     statement, parameters
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1646, in _execute_context
  2013-04-25 11:55:34.807 10156 TRACE glance     context)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1639, in _execute_context
  2013-04-25 11:55:34.807 10156 TRACE glance     context)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 330, in do_execute
  2013-04-25 11:55:34.807 10156 TRACE glance     cursor.execute(statement, parameters)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
  2013-04-25 11:55:34.807 10156 TRACE glance     self.errorhandler(self, exc, value)
  2013-04-25 11:55:34.807 10156 TRACE glance   File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
  2013-04-25 11:55:34.807 10156 TRACE glance     raise errorclass, errorvalue
  2013-04-25 11:55:34.807 10156 TRACE glance OperationalError: (OperationalError) (1091, "Can't DROP 'image_members_image_id_key'; check that column/key exists") 'ALTER TABLE image_members DROP INDEX image_members_image_id_key' ()
  2013-04-25 11:55:34.807 10156 TRACE glance 

  mysql> show columns from image_members;
  +------------+--------------+------+-----+---------+----------------+
  | Field      | Type         | Null | Key | Default | Extra          |
  +------------+--------------+------+-----+---------+----------------+
  | created_at | datetime     | NO   |     | NULL    |                |
  | updated_at | datetime     | NO   |     | NULL    |                |
  | deleted_at | datetime     | YES  |     | NULL    |                |
  | deleted    | tinyint(1)   | NO   |     | NULL    |                |
  | id         | int(11)      | NO   | PRI | NULL    | auto_increment |
  | image_id   | varchar(36)  | NO   | MUL | NULL    |                |
  | member     | varchar(255) | NO   |     | NULL    |                |
  | can_share  | tinyint(1)   | NO   |     | NULL    |                |
  | status     | varchar(20)  | YES  |     | NULL    |                |
  +------------+--------------+------+-----+---------+----------------+
  9 rows in set (0.00 sec)

  mysql> select * from image_members;
  +---------------------+---------------------+------------+---------+----+--------------------------------------+--------+-----------+---------+
  | created_at          | updated_at          | deleted_at | deleted | id | image_id                             | member | can_share | status  |
  +---------------------+---------------------+------------+---------+----+--------------------------------------+--------+-----------+---------+
  | 2013-04-18 20:25:30 | 2013-04-18 20:25:30 | NULL       |       0 |  1 | 7a12474f-1fdc-40ac-9cf1-41649b16dd68 | 112233 |         0 | pending |
  +---------------------+---------------------+------------+---------+----+--------------------------------------+--------+-----------+---------+
  1 row in set (0.00 sec)

  mysql>

  
  The actual error is
  (OperationalError) (1553, "Cannot drop index 'image_id': needed in a foreign key constraint") 'ALTER TABLE image_members DROP INDEX image_id' ()

  You get the REAL error by catching the exception in the migration code and printing it out - the traceback
  is from the except clause's attempt to carry on.

To manage notifications about this bug go to:
https://bugs.launchpad.net/glance/+bug/1173269/+subscriptions