<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 14 (filtered medium)">
<style><!--
/* Font Definitions */
@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:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
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";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:503277684;
        mso-list-type:hybrid;
        mso-list-template-ids:1777615902 -267462940 1074331673 1074331675 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675;}
@list l0:level1
        {mso-level-number-format:alpha-upper;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:27.0pt;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.0pt;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:99.0pt;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:135.0pt;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.0pt;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:207.0pt;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:243.0pt;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.0pt;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:315.0pt;
        text-indent:-9.0pt;}
@list l1
        {mso-list-id:1200554556;
        mso-list-type:hybrid;
        mso-list-template-ids:1509332692 1466721424 1074331673 1074331675 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675;}
@list l1:level1
        {mso-level-number-format:alpha-upper;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:24.75pt;
        text-indent:-18.0pt;}
@list l1:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:60.75pt;
        text-indent:-18.0pt;}
@list l1:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:96.75pt;
        text-indent:-9.0pt;}
@list l1:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:132.75pt;
        text-indent:-18.0pt;}
@list l1:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:168.75pt;
        text-indent:-18.0pt;}
@list l1:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:204.75pt;
        text-indent:-9.0pt;}
@list l1:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:240.75pt;
        text-indent:-18.0pt;}
@list l1:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:276.75pt;
        text-indent:-18.0pt;}
@list l1:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:312.75pt;
        text-indent:-9.0pt;}
@list l2
        {mso-list-id:2013338001;
        mso-list-type:hybrid;
        mso-list-template-ids:1297359414 386546708 1074331673 1074331675 1074331663 1074331673 1074331675 1074331663 1074331673 1074331675;}
@list l2:level1
        {mso-level-number-format:alpha-upper;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:27.0pt;
        text-indent:-18.0pt;}
@list l2:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.0pt;
        text-indent:-18.0pt;}
@list l2:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:99.0pt;
        text-indent:-9.0pt;}
@list l2:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:135.0pt;
        text-indent:-18.0pt;}
@list l2:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.0pt;
        text-indent:-18.0pt;}
@list l2:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:207.0pt;
        text-indent:-9.0pt;}
@list l2:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:243.0pt;
        text-indent:-18.0pt;}
@list l2:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.0pt;
        text-indent:-18.0pt;}
@list l2:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:315.0pt;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></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-IN" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">HI,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">I want your thoughts on blueprint 'Log Request ID Mappings’ for cross projects.<o:p></o:p></p>
<p class="MsoNormal">BP: https://blueprints.launchpad.net/nova/+spec/log-request-id-mappings<o:p></o:p></p>
<p class="MsoNormal">It will enable operators to get request id's mappings easily and will be useful in analysing logs effectively.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">For logging 'Request ID Mappings', client needs to return 'x-openstack-request-id' to the caller.<o:p></o:p></p>
<p class="MsoNormal">Currently python-cinderclient do not return 'x-openstack-request-id' back to the caller.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">As of now, I could think of below two solutions to return 'request-id' back from cinder-client to the caller.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">1. Return tuple containing response header and response body from all cinder-client methods.<o:p></o:p></p>
<p class="MsoNormal">  (response header contains 'x-openstack-request-id').<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Advantages:<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:27.0pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2">
<![if !supportLists]><span style="mso-list:Ignore">A.<span style="font:7.0pt "Times New Roman"">     
</span></span><![endif]>In future, if the response headers are modified then it will be available to the caller without making any changes to the python-cinderclient code.<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:27.0pt"><o:p> </o:p></p>
<p class="MsoNormal">Disadvantages:<o:p></o:p></p>
<p class="MsoNormal">    A. Affects all services using python-cinderclient library as the  return type of each method is changed to tuple.<o:p></o:p></p>
<p class="MsoNormal">     B. Need to refactor all methods exposed by the python-cinderclient library. Also requires changes in the cross projects wherever python-cinderclient calls are being made.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Ex. :- <o:p></o:p></p>
<p class="MsoNormal"> From Nova, you will need to call cinder-client 'get' method like below  :-<o:p></o:p></p>
<p class="MsoNormal">   resp_header, volume = cinderclient(context).volumes.get(volume_id)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    x-openstack-request-id = resp_header.get('x-openstack-request-id', None)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Here cinder-client will return both response header and volume. From response header, you can get 'x-openstack-request-id'.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">2. The optional parameter 'return_req_id' of type list will be passed to each of the cinder-client method. If this parameter is passed then cinder-client will append ‘'x-openstack-request-id' received from cinder api to this list.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">This is already implemented in glance-client (for V1 api only)<o:p></o:p></p>
<p class="MsoNormal">Blueprint : https://blueprints.launchpad.net/python-glanceclient/+spec/return-req-id<o:p></o:p></p>
<p class="MsoNormal">Review link : <a href="https://review.openstack.org/#/c/68524/7">
https://review.openstack.org/#/c/68524/7</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Advantages:<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:24.75pt;text-indent:-18.0pt;mso-list:l1 level1 lfo3">
<![if !supportLists]><span style="mso-list:Ignore">A.<span style="font:7.0pt "Times New Roman"">     
</span></span><![endif]>Requires changes in the cross projects only at places wherever python-cinderclient calls are being made requiring 'x-openstack-request-id’.<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:24.75pt"><o:p> </o:p></p>
<p class="MsoNormal">Dis-advantages:<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:27.0pt;text-indent:-18.0pt;mso-list:l2 level1 lfo1">
<![if !supportLists]><span style="mso-list:Ignore">A.<span style="font:7.0pt "Times New Roman"">     
</span></span><![endif]>Need to refactor all methods exposed by the python-cinderclient library.
<o:p></o:p></p>
<p class="MsoListParagraph" style="margin-left:27.0pt"><o:p> </o:p></p>
<p class="MsoNormal">Ex. :-<o:p></o:p></p>
<p class="MsoNormal">From Nova, you will need to pass  return_req_id parameter as a list.<o:p></o:p></p>
<p class="MsoNormal">    kwargs['return_req_id'] = []<o:p></o:p></p>
<p class="MsoNormal">    item = cinderclient(context).volumes.get(volume_id, **kwargs)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">    if kwargs.get('return_req_id'):<o:p></o:p></p>
<p class="MsoNormal">        x-openstack-request-id = kwargs['return_req_id'].pop()<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">python-cinderclient will add 'x-openstack-request-id' to the 'return_req_id' list if it is provided in kwargs.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">IMO, solution #2 is better than #1 for the reasons quoted above.<o:p></o:p></p>
<p class="MsoNormal">Takashi NATSUME has already proposed a patch for solution #2.  Please review patch https://review.openstack.org/#/c/104482/.<o:p></o:p></p>
<p class="MsoNormal">Would appreciate if you can think of any other better solution than #2.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Thank you.<o:p></o:p></p>
<p class="MsoNormal">Abhijeet<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>