[openstack-dev] [nova] solving API case sensitivity issues

Sean Dague sean at dague.net
Wed Feb 24 16:40:56 UTC 2016


On 02/24/2016 11:28 AM, James Bottomley wrote:
> On Wed, 2016-02-24 at 07:48 -0500, Sean Dague wrote:
>> We have a specific bug around aggregrate metadata setting in Nova
>> which
>> exposes a larger issue with our mysql schema.
>> https://bugs.launchpad.net/nova/+bug/1538011
>>
>> On mysql the following will explode with a 500:
>>
>>> nova aggregate-create agg1
>>> nova aggregate-set-metadata agg1 abc=1
>>> nova aggregate-set-metadata agg1 ABC=2
>>
>> mysql (by default) treats abc == ABC. However the python code does
>> not.
>>
>> We have a couple of options:
>>
>> 1) make the API explicitly case fold
>>
>> 2) update the mysql DB to use latin_bin collation for these columns
>>
>> 3) make this a 400 error because duplicates were found
>>
>>
>> Options 1 & 2 make all OpenStack environments consistent regardless
>> of
>> backend.
>>
>> Option 2 is potentially expensive TABLE alter.
>>
>> Option 3 gets rid of the 500 error, however at the risk that the
>> behavior for this API is different depending on DB backend. Which is
>> less than ideal.
>>
>>
>> My preference is slightly towards #1. It's taken a long time for 
>> someone to report this issue, so I think it's an edge case, and 
>> people weren't think about this being case sensitive. It has the risk 
>> of impacting someone on an odd db platform that has been using that
>> feature.
>>
>> There are going to be a few other APIs to clean up in a similar way. 
>> I don't think this comes in under a microversion because of how deep 
>> in the db api layer this is, and it's just not viable to keep both
>> paths.
> 
> This is actually one of the curses wished on us by REST.  Since the
> intent is to use web requests for the API, the API name must follow the
> case sensitivity rules for URL matching (case insensitive). 

Um... since when are URLs generically case insensitive? The host portion
is - https://tools.ietf.org/html/rfc3986#section-3.2.2 and the scheme
portion is - https://tools.ietf.org/html/rfc3986#section-3.1 however
nothing about the PATH specifies that it should or must be (in section 3.3)

While it's a little off topic, this is the 2nd time in a month it came
up, so I'd like to know if there is a reference for the case insensitive
pov.

	-Sean

-- 
Sean Dague
http://dague.net



More information about the OpenStack-dev mailing list