<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="#0563C1" vlink="#954F72">
<div class="WordSection1">
<p class="MsoNormal"><span style="color:#1F497D">Hi Devs,<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">I want your opinion about bug: <a href="https://bugs.launchpad.net/nova/+bug/1680130">
https://bugs.launchpad.net/nova/+bug/1680130</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">When user passes incorrect formatted UUID, volume UUID like: 11111111-2222-4444-5555--666666666666(please note double hyphen) for attaching a volume to an instance using "volume-attach" API then it results into
 DBDataError with following error message: "Data too long for column 'volume_id'". The reason is in database "block_device_mapping" table has "volume_id" field of 36 characters only so while inserting data to the table through 'BlockDeviceMapping' object it
 raises DBDaTaError. <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">In current code, volume_id is of ‘UUID’ format so it uses "is_uuid_like"[4] method of oslo_utils and in this method, it removes all the hyphens and checks 32 length UUID and returns true or false. As "11111111-2222-4444-5555--666666666666"
 this UUID treated as valid and further it goes into database table for insertion, as its size is more than 36 characters it gives DBDataError.
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">There are various solutions we can apply to validate volume UUID in this case:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Solution 1:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">We can restrict the length of volume UUID using maxlength property in schema validation.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Advantage:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">This solution is better than solution 2 and 3 as we can restrict the invalid UUID at schema [1] level itself by adding 'maxLength'[2].<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                                                                                              
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Solution 2:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Before creating a volume BDM object, we can check that the provided volume is actually present or not.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                                                                <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Advantage:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Volume BDM creation can be avoided if the volume does not exists.                                                       
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Disadvantage:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">IMO this solution is not better because we need to change the current code. Because in the current code after creating volume BDM it is checking volume is exists or not.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">We have to check volume existence before creating volume BDM object. For that we need to modify the "_check_attach_and_reserve_volume" method [3]. But this method get used at 3 places. According to it, we have
 to modify all the occurrences as per behavior.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                                                               
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Solution 3:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">We can check UUID in central place means in "is_uuid_like" method of oslo_utils [4].<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                                                               
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Advantage:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">If we change the "is_uuid_like" method then same issue might be solved for the rest of the APIs.                                                <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">                                                                                                                                                                                               
<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Disadvantage:<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">IMO this also not a better solution because if we change the "is_uuid_like" method then it will affect on several different projects.<o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">   <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">Please let me know your opinion for the same.                                                             <o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">[1] <a href="https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/volumes.py#L65">
https://github.com/openstack/nova/blob/master/nova/api/openstack/compute/schemas/volumes.py#L65</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">[2] <a href="https://github.com/openstack/nova/blob/master/nova/api/validation/parameter_types.py#L297">
https://github.com/openstack/nova/blob/master/nova/api/validation/parameter_types.py#L297</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">[3] <a href="https://github.com/openstack/nova/blob/master/nova/compute/api.py#L3721">
https://github.com/openstack/nova/blob/master/nova/compute/api.py#L3721</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D">[4] <a href="https://github.com/openstack/oslo.utils/blob/master/oslo_utils/uuidutils.py#L45">
https://github.com/openstack/oslo.utils/blob/master/oslo_utils/uuidutils.py#L45</a><o:p></o:p></span></p>
<p class="MsoNormal"><span style="color:#1F497D"><o:p> </o:p></span></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<br clear="both">
______________________________________________________________________<BR>
Disclaimer: This email and any attachments are sent in strictest confidence<BR>
for the sole use of the addressee and may contain legally privileged,<BR>
confidential, and proprietary data. If you are not the intended recipient,<BR>
please advise the sender by replying promptly to this email and then delete<BR>
and destroy this email and any attachments without any further use, copying<BR>
or forwarding.<BR>
</body>
</html>