working with sdague on IRC, the first thing I’m seeing is that my MariaDB server is disallowing a change in column that is UNIQUE and has an FK pointing to it, and this is distinctly different from a straight up MySQL server (see below).
http://paste.openstack.org/raw/155896/ old school MySQL: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4840 Server version: 5.6.15 Homebrew Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> create table foo (id int, blah int, primary key (id), unique key (blah)) engine=InnoDB; Query OK, 0 rows affected (0.01 sec) mysql> create table bar(id int, blah_fk int, primary key (id), foreign key (blah_fk) references foo(blah)) engine=InnoDB; Query OK, 0 rows affected (0.01 sec) mysql> alter table foo change column blah blah int not null; Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> MariaDB 10: MariaDB [test]> create table foo (id int, blah int, primary key (id), unique key (blah)); Query OK, 0 rows affected (0.09 sec) MariaDB [test]> create table bar(id int, blah_fk int, primary key (id), foreign key (blah_fk) references foo(blah)); Query OK, 0 rows affected (0.12 sec) MariaDB [test]> alter table foo change column blah blah int not null; ERROR 1833 (HY000): Cannot change column 'blah': used in a foreign key constraint 'bar_ibfk_1' of table 'test.bar' MariaDB [test]> Matt Riedemann <mrie...@linux.vnet.ibm.com> wrote: > > > On 1/6/2015 5:40 PM, Mike Bayer wrote: >> Hello - >> >> Victor Sergeyev and I are both observing the following test failure which >> occurs with all the tests underneath >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL. This is >> against master with a brand new tox environment and everything at the >> default. >> >> It does not seem to be occurring on gates that run these tests and >> interestingly the tests seem to complete very quickly (under seven seconds) >> on the gate as well; the failures here take between 50-100 seconds to occur, >> not fully deterministically, and only on the MySQL backend; the Postgresql >> and SQLite versions of these tests pass. I’m running against MariaDB server >> 10.0.14 with Python 2.7.8 on Fedora 21. >> >> Below is the test just for test_walk_versions, but the warnings (not >> necessarily the failures themselves) here also occur for test_migration_267 >> as well as test_innodb_tables. >> >> I’m still looking into what the cause of this is, I’d imagine it’s something >> related to newer MySQL versions or perhaps MariaDB vs. MySQL, I’m just >> putting it up here in case someone already knows what this is or has some >> clue to save me some time figuring it out. I apologize if I’m just doing >> something dumb, I’ve only recently begun to run Nova’s test suite in full >> against all backends, so I haven’t yet put intelligent thought into this nor >> have I tried to yet look at the migration in question causing the problem. >> Will do that next. >> >> >> [mbayer@thinkpad nova]$ tox -e py27 -- >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL.test_walk_versions >> py27 develop-inst-noop: /home/mbayer/dev/openstack/nova >> py27 runtests: PYTHONHASHSEED='0' >> py27 runtests: commands[0] | find . -type f -name *.pyc -delete >> py27 runtests: commands[1] | bash tools/pretty_tox.sh >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL.test_walk_versions >> running testr >> running=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ >> OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \ >> OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-160} \ >> ${PYTHON:-python} -m subunit.run discover -t ./ >> ${OS_TEST_PATH:-./nova/tests} --list >> running=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \ >> OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \ >> OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-160} \ >> ${PYTHON:-python} -m subunit.run discover -t ./ >> ${OS_TEST_PATH:-./nova/tests} --load-list /tmp/tmpw7zqhE >> >> 2015-01-06 18:28:12.913 32435 WARNING oslo.db.sqlalchemy.session >> [req-5cc6731f-00ef-43df-8aec-4914a44d12c5 ] MySQL SQL mode is '', consider >> enabling TRADITIONAL or STRICT_ALL_TABLES >> {0} >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL.test_walk_versions >> [51.553131s] ... FAILED >> >> Captured traceback: >> ~~~~~~~~~~~~~~~~~~~ >> Traceback (most recent call last): >> File "nova/tests/unit/db/test_migrations.py", line 151, in >> test_walk_versions >> self.walk_versions(self.snake_walk, self.downgrade) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 193, in walk_versions >> self.migrate_up(version, with_data=True) >> File "nova/tests/unit/db/test_migrations.py", line 148, in migrate_up >> super(NovaMigrationsCheckers, self).migrate_up(version, with_data) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 263, in migrate_up >> self.REPOSITORY, version) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 186, in upgrade >> return _migrate(url, repository, version, upgrade=True, err=err, >> **opts) >> File "<string>", line 2, in _migrate >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", >> line 160, in with_engine >> return f(*a, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 366, in _migrate >> schema.runchange(ver, change, changeset.step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/schema.py", >> line 93, in runchange >> change.run(self.engine, step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/script/py.py", >> line 148, in run >> script_func(engine) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 103, in upgrade >> process_null_records(meta, scan=False) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 89, in process_null_records >> table.columns.uuid.alter(nullable=False) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 534, in alter >> return alter_column(self, *p, **k) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 141, in alter_column >> engine._run_visitor(visitorcallable, delta) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1616, in _run_visitor >> conn._run_visitor(visitorcallable, element, **kwargs) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1245, in _run_visitor >> **kwargs).traverse_single(element) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 56, in traverse_single >> ret = super(AlterTableVisitor, self).traverse_single(elem) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", >> line 120, in traverse_single >> return meth(obj, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/databases/mysql.py", >> line 47, in visit_column >> self.execute() >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 44, in execute >> return self.connection.execute(self.buffer.getvalue()) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 721, in execute >> return self._execute_text(object, multiparams, params) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 870, in _execute_text >> statement, parameters >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 958, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1155, in _handle_dbapi_exception >> util.raise_from_cause(newraise, exc_info) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/util/compat.py", >> line 199, in raise_from_cause >> reraise(type(exception), exception, tb=exc_tb) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 951, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", >> line 436, in do_execute >> cursor.execute(statement, parameters) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/cursors.py", >> line 205, in execute >> self.errorhandler(self, exc, value) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/connections.py", >> line 36, in defaulterrorhandler >> raise errorclass, errorvalue >> OperationalError: (OperationalError) (1833, "Cannot change column >> 'uuid': used in a foreign key constraint >> 'block_device_mapping_instance_uuid_fkey' of table >> 'qzclautyzr.block_device_mapping'") '\nALTER TABLE instances CHANGE COLUMN >> uuid uuid VARCHAR(36) NOT NULL' () >> Traceback (most recent call last): >> _StringException: Empty attachments: >> stdout >> >> stderr: {{{ >> >> /home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: >> Warning: Duplicate index >> 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on >> the table 'qzclautyzr.block_device_mapping'. This is deprecated and will be >> disallowed in a future release. >> cursor.execute(statement, parameters) >> }}} >> >> Traceback (most recent call last): >> File "nova/tests/unit/db/test_migrations.py", line 151, in >> test_walk_versions >> self.walk_versions(self.snake_walk, self.downgrade) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 193, in walk_versions >> self.migrate_up(version, with_data=True) >> File "nova/tests/unit/db/test_migrations.py", line 148, in migrate_up >> super(NovaMigrationsCheckers, self).migrate_up(version, with_data) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 263, in migrate_up >> self.REPOSITORY, version) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 186, in upgrade >> return _migrate(url, repository, version, upgrade=True, err=err, >> **opts) >> File "<string>", line 2, in _migrate >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", >> line 160, in with_engine >> return f(*a, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 366, in _migrate >> schema.runchange(ver, change, changeset.step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/schema.py", >> line 93, in runchange >> change.run(self.engine, step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/script/py.py", >> line 148, in run >> script_func(engine) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 103, in upgrade >> process_null_records(meta, scan=False) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 89, in process_null_records >> table.columns.uuid.alter(nullable=False) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 534, in alter >> return alter_column(self, *p, **k) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 141, in alter_column >> engine._run_visitor(visitorcallable, delta) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1616, in _run_visitor >> conn._run_visitor(visitorcallable, element, **kwargs) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1245, in _run_visitor >> **kwargs).traverse_single(element) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 56, in traverse_single >> ret = super(AlterTableVisitor, self).traverse_single(elem) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", >> line 120, in traverse_single >> return meth(obj, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/databases/mysql.py", >> line 47, in visit_column >> self.execute() >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 44, in execute >> return self.connection.execute(self.buffer.getvalue()) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 721, in execute >> return self._execute_text(object, multiparams, params) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 870, in _execute_text >> statement, parameters >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 958, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1155, in _handle_dbapi_exception >> util.raise_from_cause(newraise, exc_info) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/util/compat.py", >> line 199, in raise_from_cause >> reraise(type(exception), exception, tb=exc_tb) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 951, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", >> line 436, in do_execute >> cursor.execute(statement, parameters) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/cursors.py", >> line 205, in execute >> self.errorhandler(self, exc, value) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/connections.py", >> line 36, in defaulterrorhandler >> raise errorclass, errorvalue >> OperationalError: (OperationalError) (1833, "Cannot change column >> 'uuid': used in a foreign key constraint >> 'block_device_mapping_instance_uuid_fkey' of table >> 'qzclautyzr.block_device_mapping'") '\nALTER TABLE instances CHANGE COLUMN >> uuid uuid VARCHAR(36) NOT NULL' () >> >> Traceback (most recent call last): >> _StringException: Empty attachments: >> stdout >> >> stderr: {{{ >> >> /home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: >> Warning: Duplicate index >> 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on >> the table 'qzclautyzr.block_device_mapping'. This is deprecated and will be >> disallowed in a future release. >> cursor.execute(statement, parameters) >> }}} >> >> Traceback (most recent call last): >> File "nova/tests/unit/db/test_migrations.py", line 151, in >> test_walk_versions >> self.walk_versions(self.snake_walk, self.downgrade) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 193, in walk_versions >> self.migrate_up(version, with_data=True) >> File "nova/tests/unit/db/test_migrations.py", line 148, in migrate_up >> super(NovaMigrationsCheckers, self).migrate_up(version, with_data) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 263, in migrate_up >> self.REPOSITORY, version) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 186, in upgrade >> return _migrate(url, repository, version, upgrade=True, err=err, >> **opts) >> File "<string>", line 2, in _migrate >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", >> line 160, in with_engine >> return f(*a, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 366, in _migrate >> schema.runchange(ver, change, changeset.step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/schema.py", >> line 93, in runchange >> change.run(self.engine, step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/script/py.py", >> line 148, in run >> script_func(engine) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 103, in upgrade >> process_null_records(meta, scan=False) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 89, in process_null_records >> table.columns.uuid.alter(nullable=False) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 534, in alter >> return alter_column(self, *p, **k) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 141, in alter_column >> engine._run_visitor(visitorcallable, delta) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1616, in _run_visitor >> conn._run_visitor(visitorcallable, element, **kwargs) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1245, in _run_visitor >> **kwargs).traverse_single(element) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 56, in traverse_single >> ret = super(AlterTableVisitor, self).traverse_single(elem) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", >> line 120, in traverse_single >> return meth(obj, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/databases/mysql.py", >> line 47, in visit_column >> self.execute() >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 44, in execute >> return self.connection.execute(self.buffer.getvalue()) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 721, in execute >> return self._execute_text(object, multiparams, params) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 870, in _execute_text >> statement, parameters >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 958, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1155, in _handle_dbapi_exception >> util.raise_from_cause(newraise, exc_info) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/util/compat.py", >> line 199, in raise_from_cause >> reraise(type(exception), exception, tb=exc_tb) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 951, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", >> line 436, in do_execute >> cursor.execute(statement, parameters) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/cursors.py", >> line 205, in execute >> self.errorhandler(self, exc, value) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/connections.py", >> line 36, in defaulterrorhandler >> raise errorclass, errorvalue >> OperationalError: (OperationalError) (1833, "Cannot change column >> 'uuid': used in a foreign key constraint >> 'block_device_mapping_instance_uuid_fkey' of table >> 'qzclautyzr.block_device_mapping'") '\nALTER TABLE instances CHANGE COLUMN >> uuid uuid VARCHAR(36) NOT NULL' () >> >> >> >> Captured stderr: >> ~~~~~~~~~~~~~~~~ >> >> /home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: >> Warning: Duplicate index >> 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on >> the table 'qzclautyzr.block_device_mapping'. This is deprecated and will be >> disallowed in a future release. >> cursor.execute(statement, parameters) >> >> Slowest Tests >> Test id >> Runtime (s) >> ----------------------------------------------------------------------------- >> ----------- >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL.test_walk_versions >> 51.553 >> >> ============================== >> Failed 1 tests - output below: >> ============================== >> >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL.test_walk_versions >> ----------------------------------------------------------------------------- >> >> Captured traceback: >> ~~~~~~~~~~~~~~~~~~~ >> Traceback (most recent call last): >> File "nova/tests/unit/db/test_migrations.py", line 151, in >> test_walk_versions >> self.walk_versions(self.snake_walk, self.downgrade) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 193, in walk_versions >> self.migrate_up(version, with_data=True) >> File "nova/tests/unit/db/test_migrations.py", line 148, in migrate_up >> super(NovaMigrationsCheckers, self).migrate_up(version, with_data) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 263, in migrate_up >> self.REPOSITORY, version) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 186, in upgrade >> return _migrate(url, repository, version, upgrade=True, err=err, >> **opts) >> File "<string>", line 2, in _migrate >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", >> line 160, in with_engine >> return f(*a, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 366, in _migrate >> schema.runchange(ver, change, changeset.step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/schema.py", >> line 93, in runchange >> change.run(self.engine, step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/script/py.py", >> line 148, in run >> script_func(engine) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 103, in upgrade >> process_null_records(meta, scan=False) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 89, in process_null_records >> table.columns.uuid.alter(nullable=False) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 534, in alter >> return alter_column(self, *p, **k) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 141, in alter_column >> engine._run_visitor(visitorcallable, delta) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1616, in _run_visitor >> conn._run_visitor(visitorcallable, element, **kwargs) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1245, in _run_visitor >> **kwargs).traverse_single(element) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 56, in traverse_single >> ret = super(AlterTableVisitor, self).traverse_single(elem) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", >> line 120, in traverse_single >> return meth(obj, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/databases/mysql.py", >> line 47, in visit_column >> self.execute() >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 44, in execute >> return self.connection.execute(self.buffer.getvalue()) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 721, in execute >> return self._execute_text(object, multiparams, params) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 870, in _execute_text >> statement, parameters >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 958, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1155, in _handle_dbapi_exception >> util.raise_from_cause(newraise, exc_info) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/util/compat.py", >> line 199, in raise_from_cause >> reraise(type(exception), exception, tb=exc_tb) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 951, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", >> line 436, in do_execute >> cursor.execute(statement, parameters) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/cursors.py", >> line 205, in execute >> self.errorhandler(self, exc, value) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/connections.py", >> line 36, in defaulterrorhandler >> raise errorclass, errorvalue >> OperationalError: (OperationalError) (1833, "Cannot change column >> 'uuid': used in a foreign key constraint >> 'block_device_mapping_instance_uuid_fkey' of table >> 'qzclautyzr.block_device_mapping'") '\nALTER TABLE instances CHANGE COLUMN >> uuid uuid VARCHAR(36) NOT NULL' () >> Traceback (most recent call last): >> _StringException: Empty attachments: >> stdout >> >> stderr: {{{ >> >> /home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: >> Warning: Duplicate index >> 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on >> the table 'qzclautyzr.block_device_mapping'. This is deprecated and will be >> disallowed in a future release. >> cursor.execute(statement, parameters) >> }}} >> >> Traceback (most recent call last): >> File "nova/tests/unit/db/test_migrations.py", line 151, in >> test_walk_versions >> self.walk_versions(self.snake_walk, self.downgrade) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 193, in walk_versions >> self.migrate_up(version, with_data=True) >> File "nova/tests/unit/db/test_migrations.py", line 148, in migrate_up >> super(NovaMigrationsCheckers, self).migrate_up(version, with_data) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 263, in migrate_up >> self.REPOSITORY, version) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 186, in upgrade >> return _migrate(url, repository, version, upgrade=True, err=err, >> **opts) >> File "<string>", line 2, in _migrate >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", >> line 160, in with_engine >> return f(*a, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 366, in _migrate >> schema.runchange(ver, change, changeset.step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/schema.py", >> line 93, in runchange >> change.run(self.engine, step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/script/py.py", >> line 148, in run >> script_func(engine) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 103, in upgrade >> process_null_records(meta, scan=False) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 89, in process_null_records >> table.columns.uuid.alter(nullable=False) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 534, in alter >> return alter_column(self, *p, **k) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 141, in alter_column >> engine._run_visitor(visitorcallable, delta) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1616, in _run_visitor >> conn._run_visitor(visitorcallable, element, **kwargs) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1245, in _run_visitor >> **kwargs).traverse_single(element) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 56, in traverse_single >> ret = super(AlterTableVisitor, self).traverse_single(elem) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", >> line 120, in traverse_single >> return meth(obj, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/databases/mysql.py", >> line 47, in visit_column >> self.execute() >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 44, in execute >> return self.connection.execute(self.buffer.getvalue()) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 721, in execute >> return self._execute_text(object, multiparams, params) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 870, in _execute_text >> statement, parameters >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 958, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1155, in _handle_dbapi_exception >> util.raise_from_cause(newraise, exc_info) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/util/compat.py", >> line 199, in raise_from_cause >> reraise(type(exception), exception, tb=exc_tb) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 951, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", >> line 436, in do_execute >> cursor.execute(statement, parameters) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/cursors.py", >> line 205, in execute >> self.errorhandler(self, exc, value) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/connections.py", >> line 36, in defaulterrorhandler >> raise errorclass, errorvalue >> OperationalError: (OperationalError) (1833, "Cannot change column >> 'uuid': used in a foreign key constraint >> 'block_device_mapping_instance_uuid_fkey' of table >> 'qzclautyzr.block_device_mapping'") '\nALTER TABLE instances CHANGE COLUMN >> uuid uuid VARCHAR(36) NOT NULL' () >> >> Traceback (most recent call last): >> _StringException: Empty attachments: >> stdout >> >> stderr: {{{ >> >> /home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: >> Warning: Duplicate index >> 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on >> the table 'qzclautyzr.block_device_mapping'. This is deprecated and will be >> disallowed in a future release. >> cursor.execute(statement, parameters) >> }}} >> >> Traceback (most recent call last): >> File "nova/tests/unit/db/test_migrations.py", line 151, in >> test_walk_versions >> self.walk_versions(self.snake_walk, self.downgrade) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 193, in walk_versions >> self.migrate_up(version, with_data=True) >> File "nova/tests/unit/db/test_migrations.py", line 148, in migrate_up >> super(NovaMigrationsCheckers, self).migrate_up(version, with_data) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/oslo/db/sqlalchemy/test_migrations.py", >> line 263, in migrate_up >> self.REPOSITORY, version) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 186, in upgrade >> return _migrate(url, repository, version, upgrade=True, err=err, >> **opts) >> File "<string>", line 2, in _migrate >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/util/__init__.py", >> line 160, in with_engine >> return f(*a, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/api.py", >> line 366, in _migrate >> schema.runchange(ver, change, changeset.step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/schema.py", >> line 93, in runchange >> change.run(self.engine, step) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/versioning/script/py.py", >> line 148, in run >> script_func(engine) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 103, in upgrade >> process_null_records(meta, scan=False) >> File >> "/home/mbayer/dev/openstack/nova/nova/db/sqlalchemy/migrate_repo/versions/267_instance_uuid_non_nullable.py", >> line 89, in process_null_records >> table.columns.uuid.alter(nullable=False) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 534, in alter >> return alter_column(self, *p, **k) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/schema.py", >> line 141, in alter_column >> engine._run_visitor(visitorcallable, delta) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1616, in _run_visitor >> conn._run_visitor(visitorcallable, element, **kwargs) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1245, in _run_visitor >> **kwargs).traverse_single(element) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 56, in traverse_single >> ret = super(AlterTableVisitor, self).traverse_single(elem) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/sql/visitors.py", >> line 120, in traverse_single >> return meth(obj, **kw) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/databases/mysql.py", >> line 47, in visit_column >> self.execute() >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/migrate/changeset/ansisql.py", >> line 44, in execute >> return self.connection.execute(self.buffer.getvalue()) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 721, in execute >> return self._execute_text(object, multiparams, params) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 870, in _execute_text >> statement, parameters >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 958, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 1155, in _handle_dbapi_exception >> util.raise_from_cause(newraise, exc_info) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/util/compat.py", >> line 199, in raise_from_cause >> reraise(type(exception), exception, tb=exc_tb) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/base.py", >> line 951, in _execute_context >> context) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py", >> line 436, in do_execute >> cursor.execute(statement, parameters) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/cursors.py", >> line 205, in execute >> self.errorhandler(self, exc, value) >> File >> "/home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/MySQLdb/connections.py", >> line 36, in defaulterrorhandler >> raise errorclass, errorvalue >> OperationalError: (OperationalError) (1833, "Cannot change column >> 'uuid': used in a foreign key constraint >> 'block_device_mapping_instance_uuid_fkey' of table >> 'qzclautyzr.block_device_mapping'") '\nALTER TABLE instances CHANGE COLUMN >> uuid uuid VARCHAR(36) NOT NULL' () >> >> >> >> Captured stderr: >> ~~~~~~~~~~~~~~~~ >> >> /home/mbayer/dev/openstack/nova/.tox/py27/lib/python2.7/site-packages/sqlalchemy/engine/default.py:436: >> Warning: Duplicate index >> 'block_device_mapping_instance_uuid_virtual_name_device_name_idx' defined on >> the table 'qzclautyzr.block_device_mapping'. This is deprecated and will be >> disallowed in a future release. >> cursor.execute(statement, parameters) >> >> >> >> ====== >> Totals >> ====== >> Run: 1 in 51.553131 sec. >> - Passed: 0 >> - Skipped: 0 >> - Failed: 1 >> >> ============== >> Worker Balance >> ============== >> - Worker 0 (1 tests) => 0:00:51.553131s >> ERROR: InvocationError: '/usr/bin/bash tools/pretty_tox.sh >> nova.tests.unit.db.test_migrations.TestNovaMigrationsMySQL.test_walk_versions' >> ____________________________________________________________________________________ >> summary >> ____________________________________________________________________________________ >> ERROR: py27: commands failed >> [mbayer@thinkpad nova]$ >> >> >> >> >> _______________________________________________ >> OpenStack-dev mailing list >> OpenStack-dev@lists.openstack.org >> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev > > We're running the migrations with Tempest in an internal CI with MariaDB and > RHEL 7 and haven't had migration issues like this. > > The deprecation warning is odd, unless that's coming from the 216 migration > where the duplicate index is defined, but it's removed in the 249 migration > so that shouldn't be a problem. > > As for the 267 migration, it's failing to set the instances.uuid column to > nullable=False. Before it does this, it scans the tables looking for tables > with an instance_uuid column that has a foreign key back to the instances > table and where the instance_uuid value is NULL, it will fail it if finds one > of those (on purpose, you have to manually purge those rows). > > Once it's checked that there aren't any null instance_uuid entries with fkeys > back to instances, it alters the instances.uuid column to be non-nullable so > the UniqueConstraint on instances.uuid can be created. > > There is a known issue with a unique index being created on instances.uuid in > the 216 migration and the 267 migration adds the unique constraint, so there > is some duplication there, but I don't think that's what's causing your > failure. > > -- > > Thanks, > > Matt Riedemann > > > _______________________________________________ > OpenStack-dev mailing list > OpenStack-dev@lists.openstack.org > http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev _______________________________________________ OpenStack-dev mailing list OpenStack-dev@lists.openstack.org http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev