Database schema requires InnoDB engine with MySQL

Bug #1506160 reported by Julia Kreger
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Ironic Inspector
Fix Released
High
Dmitry Tantsur
Liberty
Fix Released
High
Dmitry Tantsur
Mitaka
Fix Released
High
Dmitry Tantsur

Bug Description

The default MySQL engine for the OpenStack project CI system is MyIASM, which apparently has issues with multibyte characters and field lengths. It appears that the remedy is to remove the foreign key relationship OR define the mysql_engine in the table schema that sqlalchemy utilizes. This is covered here: http://docs.sqlalchemy.org/en/rel_1_0/dialects/mysql.html?highlight=charset#create-table-arguments-including-storage-engines

If one attempts to load the database schema with MyIASM, the following error occurs:

INFO [alembic.runtime.migration] Context impl MySQLImpl.
INFO [alembic.runtime.migration] Will assume non-transactional DDL.
INFO [alembic.runtime.migration] Running upgrade -> 578f84f38d, inital_db_schema
Traceback (most recent call last):
  File "/usr/local/bin/ironic-inspector-dbsync", line 11, in <module>
    sys.exit(main())
  File "/usr/local/lib/python2.7/dist-packages/ironic_inspector/dbsync.py", line 90, in main
    CONF.command.func(config, CONF.command.name)
  File "/usr/local/lib/python2.7/dist-packages/ironic_inspector/dbsync.py", line 72, in with_revision
    do_alembic_command(config, cmd, revision)
  File "/usr/local/lib/python2.7/dist-packages/ironic_inspector/dbsync.py", line 77, in do_alembic_command
    getattr(alembic_command, cmd)(config, *args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/alembic/command.py", line 174, in upgrade
    script.run_env()
  File "/usr/local/lib/python2.7/dist-packages/alembic/script/base.py", line 397, in run_env
    util.load_python_file(self.dir, 'env.py')
  File "/usr/local/lib/python2.7/dist-packages/alembic/util/pyfiles.py", line 81, in load_python_file
    module = load_module_py(module_id, path)
  File "/usr/local/lib/python2.7/dist-packages/alembic/util/compat.py", line 79, in load_module_py
    mod = imp.load_source(module_id, path, fp)
  File "/usr/local/lib/python2.7/dist-packages/ironic_inspector/migrations/env.py", line 82, in <module>
    run_migrations_online()
  File "/usr/local/lib/python2.7/dist-packages/ironic_inspector/migrations/env.py", line 77, in run_migrations_online
    context.run_migrations()
  File "<string>", line 8, in run_migrations
  File "/usr/local/lib/python2.7/dist-packages/alembic/runtime/environment.py", line 797, in run_migrations
    self.get_context().run_migrations(**kw)
  File "/usr/local/lib/python2.7/dist-packages/alembic/runtime/migration.py", line 312, in run_migrations
    step.migration_fn(**kw)
  File "/usr/local/lib/python2.7/dist-packages/ironic_inspector/migrations/versions/578f84f38d_inital_db_schema.py", line 48, in upgrade
    sa.Column('uuid', sa.String(36), sa.ForeignKey('nodes.uuid'))
  File "<string>", line 8, in create_table
  File "<string>", line 3, in create_table
  File "/usr/local/lib/python2.7/dist-packages/alembic/operations/ops.py", line 1098, in create_table
    return operations.invoke(op)
  File "/usr/local/lib/python2.7/dist-packages/alembic/operations/base.py", line 318, in invoke
    return fn(self, operation)
  File "/usr/local/lib/python2.7/dist-packages/alembic/operations/toimpl.py", line 101, in create_table
    operations.impl.create_table(table)
  File "/usr/local/lib/python2.7/dist-packages/alembic/ddl/impl.py", line 194, in create_table
    self._exec(schema.CreateTable(table))
  File "/usr/local/lib/python2.7/dist-packages/alembic/ddl/impl.py", line 118, in _exec
    return conn.execute(construct, *multiparams, **params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 914, in execute
    return meth(self, multiparams, params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/sql/ddl.py", line 68, in _execute_on_connection
    return connection._execute_ddl(self, multiparams, params)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 968, in _execute_ddl
    compiled
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1146, in _execute_context
    context)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1341, in _handle_dbapi_exception
    exc_info
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/util/compat.py", line 199, in raise_from_cause
    reraise(type(exception), exception, tb=exc_tb)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/base.py", line 1139, in _execute_context
    context)
  File "/usr/local/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 450, in do_execute
    cursor.execute(statement, parameters)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
    self.errorhandler(self, exc, value)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
    raise errorclass, errorvalue
sqlalchemy.exc.OperationalError: (_mysql_exceptions.OperationalError) (1071, 'Specified key was too long; max key length is 1000 bytes') [SQL: u'\nCREATE TABLE attributes (\n\tname VARCHAR(255) NOT NULL, \n\tvalue VARCHAR(255) NOT NULL, \n\tuuid VARCHAR(36), \n\tPRIMARY KEY (name, value), \n\tFOREIGN KEY(uuid) REFERENCES nodes (uuid)\n)\n\n']

Revision history for this message
Dmitry Tantsur (divius) wrote :

I don't know why the OpenStack CI enjoys shutting its leg, but ok, I'll try to fix it. Thanks for reporting.

Changed in ironic-inspector:
status: New → Triaged
importance: Undecided → High
assignee: nobody → Dmitry Tantsur (divius)
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to ironic-inspector (master)

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

Changed in ironic-inspector:
status: Triaged → In Progress
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to ironic-inspector (master)

Reviewed: https://review.openstack.org/235274
Committed: https://git.openstack.org/cgit/openstack/ironic-inspector/commit/?id=fbfdf5ee694bad4ab22dfa52d601c74e899c8c1b
Submitter: Jenkins
Branch: master

commit fbfdf5ee694bad4ab22dfa52d601c74e899c8c1b
Author: Dmitry Tantsur <email address hidden>
Date: Thu Oct 15 13:13:50 2015 +0200

    Always default to InnoDB for MySQL

    OpenStack CI uses MyISAM by default, which does not even support
    foreign keys. This change essentially mirrors what ironic is doing.

    Also sets the default charset to UTF-8.

    Closes-Bug: #1506160
    Change-Id: I7caf0a2122f98c59f121f003ac092ecb0ce123c4

Changed in ironic-inspector:
status: In Progress → Fix Committed
Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix proposed to ironic-inspector (stable/liberty)

Fix proposed to branch: stable/liberty
Review: https://review.openstack.org/237529

Revision history for this message
OpenStack Infra (hudson-openstack) wrote : Fix merged to ironic-inspector (stable/liberty)

Reviewed: https://review.openstack.org/237529
Committed: https://git.openstack.org/cgit/openstack/ironic-inspector/commit/?id=95db43cf5ffcc99595f4e7a709c207a8b50e660f
Submitter: Jenkins
Branch: stable/liberty

commit 95db43cf5ffcc99595f4e7a709c207a8b50e660f
Author: Dmitry Tantsur <email address hidden>
Date: Thu Oct 15 13:13:50 2015 +0200

    Always default to InnoDB for MySQL

    OpenStack CI uses MyISAM by default, which does not even support
    foreign keys. This change essentially mirrors what ironic is doing.

    Also sets the default charset to UTF-8.

    Closes-Bug: #1506160
    Change-Id: I7caf0a2122f98c59f121f003ac092ecb0ce123c4
    (cherry picked from commit fbfdf5ee694bad4ab22dfa52d601c74e899c8c1b)

Revision history for this message
Doug Hellmann (doug-hellmann) wrote : Fix included in openstack/ironic-inspector 2.3.0

This issue was fixed in the openstack/ironic-inspector 2.3.0 release.

Changed in ironic-inspector:
status: Fix Committed → Fix Released
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.