On Dec 5, 2013, at 1:36 AM, Maru Newby <ma...@redhat.com> wrote:

> 
> On Dec 3, 2013, at 12:18 AM, Joe Gordon <joe.gord...@gmail.com> wrote:
> 
>> 
>> 
>> 
>> On Sun, Dec 1, 2013 at 7:04 PM, John Dickinson <m...@not.mn> wrote:
>> Just to add to the story, Swift uses "X-Trans-Id" and generates it in the 
>> outer-most "catch_errors" middleware.
>> 
>> Swift's catch errors middleware is responsible for ensuring that the 
>> transaction id exists on each request, and that all errors previously 
>> uncaught, anywhere in the pipeline, are caught and logged. If there is not a 
>> common way to do this, yet, I submit it as a great template for solving this 
>> problem. It's simple, scalable, and well-tested (ie tests and running in 
>> prod for years).
>> 
>> https://github.com/openstack/swift/blob/master/swift/common/middleware/catch_errors.py
>> 
>> Leaving aside error handling and only focusing on the transaction id (or 
>> request id) generation, since OpenStack services are exposed to untrusted 
>> clients, how would you propose communicating the appropriate transaction id 
>> to a different service? I can see great benefit to having a glance 
>> transaction ID carry through to Swift requests (and so on), but how should 
>> the transaction id be communicated? It's not sensitive info, but I can 
>> imagine a pretty big problem when trying to track down errors if a client 
>> application decides to set eg the X-Set-Transaction-Id header on every 
>> request to the same thing.
>> 
>> -1 to cross service request IDs, for the reasons John mentions above.
>> 
>> 
>> Thanks for bringing this up, and I'd welcome a patch in Swift that would use 
>> a common library to generate the transaction id, if it were installed. I can 
>> see that there would be huge advantage to operators to trace requests 
>> through multiple systems.
>> 
>> Another option would be for each system that calls an another OpenStack 
>> system to expect and log the transaction ID for the request that was given. 
>> This would be looser coupling and be more forgiving for a heterogeneous 
>> cluster. Eg when Glance makes a call to Swift, Glance cloud log the 
>> transaction id that Swift used (from the Swift response). Likewise, when 
>> Swift makes a call to Keystone, Swift could log the Keystone transaction id. 
>> This wouldn't result in a single transaction id across all systems, but it 
>> would provide markers so an admin could trace the request.
>> 
>> There was a session on this at the summit, and although the notes are a 
>> little scarce this was the conclusion we came up with.  Every time a cross 
>> service call is made, we will log and send a notification for ceilometer to 
>> consume, with the request-ids of both request ids.  One of the benefits of 
>> this approach is that we can easily generate a tree of all the API calls 
>> that are made (and clearly show when multiple calls are made to the same 
>> service), something that just a cross service request id would have trouble 
>> with.
> 
> Is wise to trust anything a client provides to ensure traceability?  If a 
> user receives a request id back from Nova, then submits that request id in an 
> unrelated request to Neutron, the traceability would be effectively 
> corrupted.  If the consensus is that we don't want to securely deliver 
> request ids for inter-service calls, how about requiring a service to log its 
> request id along with the request id returned from a call to another service 
> to achieve the a similar result?

Yes, this is what I was proposing. I think this is the best path forward.


> The catch is that every call point (or client instantiation?) would have to 
> be modified to pass the request id instead of just logging at one place in 
> each service.  Is that a cost worth paying?

Perhaps this is my ignorance of how other projects work today, but does this 
not already happen? Is it possible to get a response from an API call to an 
OpenStack project that doesn't include a request id?

> 
> 
> m.
> 
> 
>> 
>> https://etherpad.openstack.org/p/icehouse-summit-qa-gate-debugability 
>> 
>> 
>> With that in mind I think having a standard x-openstack-request-id makes 
>> things a little more uniform, and means that adding new services doesn't 
>> require new logic to handle new request ids.
> 
> 
> 
> 
> 
> _______________________________________________
> OpenStack-dev mailing list
> OpenStack-dev@lists.openstack.org
> http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Attachment: signature.asc
Description: Message signed with OpenPGP using GPGMail

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to