Force InnoDB engine on interfaces table

If the system is set to use MyISAM engine as default, during upgrade
a new conductor_hardware_interfaces table will be created with MyISAM
engine. This will cause a mix of InnoDB and MyISAM tables in single
database, and obsolete a foreign key to conductors table.

This bug in particular fails test_models_sync unit test, when it is
executed on a system, where MyISAM is set as default option for local
MySQL server.

Change-Id: Ic47426b1a12eda5728e9971a27ad3767c0245d50
Closes-Bug: 1702158
This commit is contained in:
Michael Tupitsyn 2017-07-03 11:51:21 -07:00
parent 8e48156488
commit 1a0c7091a6
2 changed files with 25 additions and 1 deletions

View File

@ -44,4 +44,6 @@ def upgrade():
sa.UniqueConstraint(
'conductor_id', 'hardware_type',
'interface_type', 'interface_name',
name='uniq_conductorhardwareinterfaces0'))
name='uniq_conductorhardwareinterfaces0'),
mysql_charset='utf8',
mysql_engine='InnoDB')

View File

@ -0,0 +1,22 @@
---
fixes:
- |
Fixes a bug 1702158, where the wrong database engine is used for the
conductor_hardware_interfaces table, if the system is using MySQL prior to
version 5.5 (or the default_storage_engine option is set explicitly to
'MyISAM' in my.cnf). In this case, a table could be created with MyISAM
engine and foreign key constraint conductor_id(conductors.id) ignored.
upgrade:
- |
Due to a bug 1702158, conductor_hardware_interfaces table could be created
with MyISAM database engine, while all other tables in ironic database are
using InnoDB engine. This could happen during initial installation, or
upgrade to ocata release, if the system is using MySQL prior to version 5.5
(or the default_storage_engine option is set explicitly to 'MyISAM' in
my.cnf). If this is the case, conductor_hardware_interfaces needs to be
manually migrated to InnoDB, and foreign key constraint re-created::
alter table conductor_hardware_interfaces engine='InnoDB';
alter table conductor_hardware_interfaces
add constraint conductor_hardware_interfaces_ibfk_1
foreign key (conductor_id) references conductors(id);