Migration #82 fails on upgrade from Liberty to Mitaka

Bug #1583198 reported by Kiall Mac Innes
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Designate
Fix Released
Critical
Kiall Mac Innes
Mitaka
Fix Released
Critical
Kiall Mac Innes

Bug Description

The attempt to check if the backported constraint exist fails, resulting in attempting to add the same unique constraint twice:

    2016-05-18 14:28:30.941 INFO migrate.versioning.api [designate-manage - - - - -] 81 -> 82...
    2016-05-18 14:28:30.973 CRITICAL designate [designate-manage - - - - -] InternalError: (pymysql.err.InternalError) (1061, u"Duplicate key name 'unique_ns_name'") [SQL: u'ALTER TABLE pool_ns_records ADD CONSTRAINT unique_ns_name UNIQUE (pool_id, hostname)']

    2016-05-18 14:28:30.973 TRACE designate Traceback (most recent call last):
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/bin/designate-manage", line 10, in <module>
    2016-05-18 14:28:30.973 TRACE designate sys.exit(main())
    2016-05-18 14:28:30.973 TRACE designate File "/opt/stack/designate/designate/cmd/manage.py", line 132, in main
    2016-05-18 14:28:30.973 TRACE designate fn(*fn_args)
    2016-05-18 14:28:30.973 TRACE designate File "/opt/stack/designate/designate/manage/database.py", line 63, in sync
    2016-05-18 14:28:30.973 TRACE designate get_manager().upgrade(None)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/migration_cli/manager.py", line 65, in upgrade
    2016-05-18 14:28:30.973 TRACE designate results.append(plugin.upgrade(None))
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/migration_cli/ext_migrate.py", line 48, in upgrade
    2016-05-18 14:28:30.973 TRACE designate init_version=self.init_version)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/oslo_db/sqlalchemy/migration.py", line 79, in db_sync
    2016-05-18 14:28:30.973 TRACE designate migration = versioning_api.upgrade(engine, repository, version)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/api.py", line 186, in upgrade
    2016-05-18 14:28:30.973 TRACE designate return _migrate(url, repository, version, upgrade=True, err=err, **opts)
    2016-05-18 14:28:30.973 TRACE designate File "<decorator-gen-15>", line 2, in _migrate
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/util/__init__.py", line 160, in with_engine
    2016-05-18 14:28:30.973 TRACE designate return f(*a, **kw)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/api.py", line 366, in _migrate
    2016-05-18 14:28:30.973 TRACE designate schema.runchange(ver, change, changeset.step)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/schema.py", line 93, in runchange
    2016-05-18 14:28:30.973 TRACE designate change.run(self.engine, step)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/versioning/script/py.py", line 148, in run
    2016-05-18 14:28:30.973 TRACE designate script_func(engine)
    2016-05-18 14:28:30.973 TRACE designate File "/opt/stack/designate/designate/storage/impl_sqlalchemy/migrate_repo/versions/082_unique_ns_record.py", line 55, in upgrade
    2016-05-18 14:28:30.973 TRACE designate constraint.create()
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/changeset/constraint.py", line 44, in create
    2016-05-18 14:28:30.973 TRACE designate self.__do_imports('constraintgenerator', *a, **kw)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/changeset/constraint.py", line 32, in __do_imports
    2016-05-18 14:28:30.973 TRACE designate run_single_visitor(engine, visitorcallable, self, *a, **kw)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/changeset/databases/visitor.py", line 85, in run_single_visitor
    2016-05-18 14:28:30.973 TRACE designate fn(element, **kwargs)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/changeset/ansisql.py", line 294, in visit_migrate_unique_constraint
    2016-05-18 14:28:30.973 TRACE designate self._visit_constraint(*p, **k)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/changeset/ansisql.py", line 300, in _visit_constraint
    2016-05-18 14:28:30.973 TRACE designate self.execute()
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/migrate/changeset/ansisql.py", line 44, in execute
    2016-05-18 14:28:30.973 TRACE designate return self.connection.execute(self.buffer.getvalue())
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 906, in execute
    2016-05-18 14:28:30.973 TRACE designate return self._execute_text(object, multiparams, params)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1054, in _execute_text
    2016-05-18 14:28:30.973 TRACE designate statement, parameters
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
    2016-05-18 14:28:30.973 TRACE designate context)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
    2016-05-18 14:28:30.973 TRACE designate exc_info
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 200, in raise_from_cause
    2016-05-18 14:28:30.973 TRACE designate reraise(type(exception), exception, tb=exc_tb)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    2016-05-18 14:28:30.973 TRACE designate context)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
    2016-05-18 14:28:30.973 TRACE designate cursor.execute(statement, parameters)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 146, in execute
    2016-05-18 14:28:30.973 TRACE designate result = self._query(query)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 296, in _query
    2016-05-18 14:28:30.973 TRACE designate conn.query(q)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 781, in query
    2016-05-18 14:28:30.973 TRACE designate self._affected_rows = self._read_query_result(unbuffered=unbuffered)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 942, in _read_query_result
    2016-05-18 14:28:30.973 TRACE designate result.read()
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1138, in read
    2016-05-18 14:28:30.973 TRACE designate first_packet = self.connection._read_packet()
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 906, in _read_packet
    2016-05-18 14:28:30.973 TRACE designate packet.check_error()
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 367, in check_error
    2016-05-18 14:28:30.973 TRACE designate err.raise_mysql_exception(self._data)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 120, in raise_mysql_exception
    2016-05-18 14:28:30.973 TRACE designate _check_mysql_exception(errinfo)
    2016-05-18 14:28:30.973 TRACE designate File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 115, in _check_mysql_exception
    2016-05-18 14:28:30.973 TRACE designate raise InternalError(errno, errorvalue)
    2016-05-18 14:28:30.973 TRACE designate InternalError: (pymysql.err.InternalError) (1061, u"Duplicate key name 'unique_ns_name'") [SQL: u'ALTER TABLE pool_ns_records ADD CONSTRAINT unique_ns_name UNIQUE (pool_id, hostname)']
    2016-05-18 14:28:30.973 TRACE designate

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to designate (master)

Fix proposed to branch: master
Review: https://review.openstack.org/318141

Changed in designate:
status: Triaged → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to designate (stable/mitaka)

Fix proposed to branch: stable/mitaka
Review: https://review.openstack.org/318143

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to designate (master)

Reviewed: https://review.openstack.org/318141
Committed: https://git.openstack.org/cgit/openstack/designate/commit/?id=63d1c30803c2a763f7a5bea31b9d3aeb5852071e
Submitter: Jenkins
Branch: master

commit 63d1c30803c2a763f7a5bea31b9d3aeb5852071e
Author: Kiall Mac Innes <email address hidden>
Date: Wed May 18 15:37:20 2016 +0100

    Ensure L to M DB migrations correctly inspect current DB state

    During 082_unique_ns_record, we check if a uniqueconstraint exists
    before adding it. However, the method used to check does not include
    uniqueconstraints, resulting in a failure to execute the migration.

    Change-Id: I26dc83bca913a7c63945b1e0d4d963f20854e989
    Closes-Bug: 1583198

Changed in designate:
status: In Progress → Fix Released
tags: added: in-stable-mitaka
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to designate (stable/mitaka)

Reviewed: https://review.openstack.org/318143
Committed: https://git.openstack.org/cgit/openstack/designate/commit/?id=3451d57e615b6ccecd8a72448d96ecbeb2f96c7f
Submitter: Jenkins
Branch: stable/mitaka

commit 3451d57e615b6ccecd8a72448d96ecbeb2f96c7f
Author: Kiall Mac Innes <email address hidden>
Date: Wed May 18 15:37:20 2016 +0100

    Ensure L to M DB migrations correctly inspect current DB state

    During 082_unique_ns_record, we check if a uniqueconstraint exists
    before adding it. However, the method used to check does not include
    uniqueconstraints, resulting in a failure to execute the migration.

    Change-Id: I26dc83bca913a7c63945b1e0d4d963f20854e989
    Closes-Bug: 1583198

Revision history for this message
Davanum Srinivas (DIMS) (dims-v) wrote : Fix included in openstack/designate 3.0.0.0b1

This issue was fixed in the openstack/designate 3.0.0.0b1 development milestone.

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix included in openstack/designate 2.1.0

This issue was fixed in the openstack/designate 2.1.0 release.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.