Dear all,
I find the same problem during the
upgrade of neutron db, from Bobcat to Caracal, with the creation
of the new "porthardwareoffloadtype" table.
The error is " Referencing column
'port_id' and referenced column 'id' in foreign key constraint
'porthardwareoffloadtype_ibfk_1' are incompatible".
I tried adding in the neutron.conf file
the values
[database]
connection =
mysql+pymysql://neutron:PWD@xxx/neutron?charset=utf8
engine = "InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8"
connection_parameters = charset=utf8
but they don't resolve the upgrade
problem.
Is it compulsory to have the
ports.id
columns in latin1?
Thanks,
cheers
Federica
On 1/20/25 6:55 PM, federica fanzago
wrote:
Dear
all,
we are running an OpenStack deployment Yoga on AlmaLinux 9.5 and
we are attempting the upgrade Openstack up to Caracal release, one
release at time (Zed--Antelope--Bobcat--Caracal)
The procedure we are following is to shut down all openstack
services, to remove the "old" openstack release and to install
the new one, upgrading all service databases.
This procedure works well for Zed and Antelope, but during the
installation of the Bobcat release, the Neutron database upgrade
fails when creating the new "porthints" table.
The command we are using is
su -s /bin/sh -c "neutron-db-manage --config-file
/etc/neutron/neutron.conf --config-file
/etc/neutron/plugins/ml2/ml2_conf.ini upgrade head" neutron
and the error message we receive is
...
File "/usr/lib/python3.9/site-packages/pymysql/err.py", line
107, in raise_mysql_exception
raise errorclass(errno, errval)
sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError)
(3780, "Referencing column 'port_id' and referenced column 'id' in
foreign key constraint 'porthints_ibfk_1' are incompatible.")
[SQL:
CREATE TABLE porthints (
port_id VARCHAR(36) NOT NULL,
hints VARCHAR(4095) NOT NULL,
PRIMARY KEY (port_id),
FOREIGN KEY(port_id) REFERENCES ports (id) ON DELETE CASCADE
)ENGINE=InnoDB
...
Our "ports" table uses the collation utf8mb3_general_ci
mysql> SHOW FULL COLUMNS FROM ports;
+------------------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| Field | Type | Collation | Null |
Key | Default | Extra | Privileges | Comment
|
+------------------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
| project_id | varchar(255) | utf8mb3_general_ci | YES |
MUL | NULL | | select,insert,update,references | |
| id | varchar(36) | utf8mb3_general_ci | NO |
PRI | NULL | | select,insert,update,references | |
| name | varchar(255) | utf8mb3_general_ci | YES |
| NULL | | select,insert,update,references | |
| network_id | varchar(36) | utf8mb3_general_ci | NO |
MUL | NULL | | select,insert,update,references | |
| mac_address | varchar(32) | utf8mb3_general_ci | NO |
| NULL | | select,insert,update,references | |
| admin_state_up | tinyint(1) | NULL | NO |
| NULL | | select,insert,update,references | |
| status | varchar(16) | utf8mb3_general_ci | NO |
| NULL | | select,insert,update,references | |
| device_id | varchar(255) | utf8mb3_general_ci | NO |
MUL | NULL | | select,insert,update,references | |
| device_owner | varchar(255) | utf8mb3_general_ci | NO |
| NULL | | select,insert,update,references | |
| standard_attr_id | bigint | NULL | NO |
UNI | NULL | | select,insert,update,references | |
| ip_allocation | varchar(16) | utf8mb3_general_ci | YES |
| NULL | | select,insert,update,references | |
+------------------+--------------+--------------------+------+-----+---------+-------+---------------------------------+---------+
in Bobcat the collation required for the new "porthints" table is
latin1_swedish_ci
MariaDB [neutron]> show create table porthints;
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| porthints | CREATE TABLE `porthints` (
`port_id` varchar(36) NOT NULL,
`hints` varchar(4095) NOT NULL,
PRIMARY KEY (`port_id`),
CONSTRAINT `porthints_ibfk_1` FOREIGN KEY (`port_id`) REFERENCES
`ports` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci |
So, we have tried to create the porthints table in mysql, forcing
the collation to utf8mb3_general_ci
mysql> CREATE TABLE porthints ( port_id VARCHAR(36) NOT NULL,
hints VARCHAR(4095) NOT NULL, PRIMARY KEY (port_id), FOREIGN
KEY(port_id) REFERENCES ports (id) ON DELETE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8 DEFAULT COLLATE
utf8mb3_general_ci;
and commenting out the creation of the new table in the neutron
code
/usr/lib/python3.9/site-packages/neutron/db/migration/alembic_migrations/versions/2023.2/expand/6f1145bff34c_port_hints.py.
In this way, the upgrade works, but we encounter the same kind of
problem during the upgrade to Caracal, specifically with the
creation of the new table porthardwareoffloadtype.
Have you already encountered this issue during the Neutron
upgrade?
Do you have any suggestions on how to upgrade the neutron DB,
without manually creating new tables?
Thanks a lot,
cheers,
Federica
--
Federica Fanzago
INFN Sezione di Padova
Via Marzolo, 8
35131 Padova - Italy
Tel: +39 049.967.7367
--