Public bug reported: The Neutron API accepts tags with upper and lower case and stores them. The problem is that, by default, the character set and collation of a table is not defined in Neutron and uses the default one provided in the database configuration. That means if we try to update a resource with a similar tag that only changes the upper/lower cases, it will fail like this [1].
How to reproduce: $ openstack port create --network private port_tags $ openstack port set --tag tag1 port_tags $ openstack port set --tag Tag1 port_tags # this command will fail with the following message: ConflictException: 409: Client Error for url: http://192.168.10.100/networking/v2.0/ports/21788aea-98b7-4606-bcf4-5f963ce62fed/tags, Failed to create a duplicate Tag: for attribute(s) ['tags.PRIMARY'] with value(s) 47-Tag1 How to fix that. There are two alternatives: * To change the charset and collation of the table. We don't do this in Neutron and I don't see any other place in OpenStack where the charset and collation are enforced. * To make the "tag" plugin case insensitive. All tags passed to a resource, will be lowered and stored this way. Any new API call will have an input sanitize phase where all tags will be lowered too. That will avoid the database exception. [1]https://paste.opendev.org/show/bUImqR7KE9d0NRgn9rfa/ ** Affects: neutron Importance: Medium Assignee: Rodolfo Alonso (rodolfo-alonso-hernandez) Status: New ** Changed in: neutron Assignee: (unassigned) => Rodolfo Alonso (rodolfo-alonso-hernandez) ** Changed in: neutron Importance: Undecided => Medium -- You received this bug notification because you are a member of Yahoo! Engineering Team, which is subscribed to neutron. https://bugs.launchpad.net/bugs/2114819 Title: "tag" plugin is not case sensitive Status in neutron: New Bug description: The Neutron API accepts tags with upper and lower case and stores them. The problem is that, by default, the character set and collation of a table is not defined in Neutron and uses the default one provided in the database configuration. That means if we try to update a resource with a similar tag that only changes the upper/lower cases, it will fail like this [1]. How to reproduce: $ openstack port create --network private port_tags $ openstack port set --tag tag1 port_tags $ openstack port set --tag Tag1 port_tags # this command will fail with the following message: ConflictException: 409: Client Error for url: http://192.168.10.100/networking/v2.0/ports/21788aea-98b7-4606-bcf4-5f963ce62fed/tags, Failed to create a duplicate Tag: for attribute(s) ['tags.PRIMARY'] with value(s) 47-Tag1 How to fix that. There are two alternatives: * To change the charset and collation of the table. We don't do this in Neutron and I don't see any other place in OpenStack where the charset and collation are enforced. * To make the "tag" plugin case insensitive. All tags passed to a resource, will be lowered and stored this way. Any new API call will have an input sanitize phase where all tags will be lowered too. That will avoid the database exception. [1]https://paste.opendev.org/show/bUImqR7KE9d0NRgn9rfa/ To manage notifications about this bug go to: https://bugs.launchpad.net/neutron/+bug/2114819/+subscriptions -- Mailing list: https://launchpad.net/~yahoo-eng-team Post to : [email protected] Unsubscribe : https://launchpad.net/~yahoo-eng-team More help : https://help.launchpad.net/ListHelp

