HI,
I want your thoughts on blueprint 'Log Request ID Mappings' for cross projects.
BP: https://blueprints.launchpad.net/nova/+spec/log-request-id-mappings
It will enable operators to get request id's mappings easily and will be useful
in analysing logs effectively.
For logging 'Request ID Mappings', client needs to return
'x-openstack-request-id' to the caller.
Currently python-cinderclient do not return 'x-openstack-request-id' back to
the caller.
As of now, I could think of below two solutions to return 'request-id' back
from cinder-client to the caller.
1. Return tuple containing response header and response body from all
cinder-client methods.
(response header contains 'x-openstack-request-id').
Advantages:
A. 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.
Disadvantages:
A. Affects all services using python-cinderclient library as the return
type of each method is changed to tuple.
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.
Ex. :-
From Nova, you will need to call cinder-client 'get' method like below :-
resp_header, volume = cinderclient(context).volumes.get(volume_id)
x-openstack-request-id = resp_header.get('x-openstack-request-id', None)
Here cinder-client will return both response header and volume. From response
header, you can get 'x-openstack-request-id'.
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.
This is already implemented in glance-client (for V1 api only)
Blueprint :
https://blueprints.launchpad.net/python-glanceclient/+spec/return-req-id
Review link : https://review.openstack.org/#/c/68524/7
Advantages:
A. Requires changes in the cross projects only at places wherever
python-cinderclient calls are being made requiring 'x-openstack-request-id'.
Dis-advantages:
A. Need to refactor all methods exposed by the python-cinderclient library.
Ex. :-
>From Nova, you will need to pass return_req_id parameter as a list.
kwargs['return_req_id'] = []
item = cinderclient(context).volumes.get(volume_id, **kwargs)
if kwargs.get('return_req_id'):
x-openstack-request-id = kwargs['return_req_id'].pop()
python-cinderclient will add 'x-openstack-request-id' to the 'return_req_id'
list if it is provided in kwargs.
IMO, solution #2 is better than #1 for the reasons quoted above.
Takashi NATSUME has already proposed a patch for solution #2. Please review
patch https://review.openstack.org/#/c/104482/.
Would appreciate if you can think of any other better solution than #2.
Thank you.
Abhijeet
______________________________________________________________________
Disclaimer: This email and any attachments are sent in strictest confidence
for the sole use of the addressee and may contain legally privileged,
confidential, and proprietary data. If you are not the intended recipient,
please advise the sender by replying promptly to this email and then delete
and destroy this email and any attachments without any further use, copying
or forwarding._______________________________________________
OpenStack-dev mailing list
[email protected]
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev