Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tracking issue for ClientCallTracer APIs being experimental #6080

Closed
voidzcy opened this issue Aug 19, 2019 · 2 comments
Closed

Tracking issue for ClientCallTracer APIs being experimental #6080

voidzcy opened this issue Aug 19, 2019 · 2 comments
Labels
experimental API Issue tracks stabilizing an experimental API

Comments

@voidzcy
Copy link
Contributor

voidzcy commented Aug 19, 2019

Introducing ClientCallTracer class, which extends ClientStreamTracer.Factory for tracing client side RPC events, with an addition of exposing tracer component properties via Attributes.

  • Client side tracer implementers would provide same tracing logic as using ClientStreamTracer.Factory, with a plus of ClientCallTracer#getTracerAttributes(Attributes.Builder) to put properties being exposed externally.

  • New API ClientCall#getTracerAttributes() bridges the access to tracer properties on ClientCall and on ClientCallTracer.

Why existing ClientStreamTracer.Factory is not enough?

  • The problem came up with external users/frameworks wishing to access tracer specific properties (e.g., SpanId or TracerId created by Census when CensusTracingModule is applied). Putting tracer properties in CallOptions and propagating through ClientInterceptor#interceptCall(...) only makes tracer properties accessible in interceptor applying time, it does not tie tracer properties to the ClientCall instance. External frameworks/users are not able to access tracer properties unless installing a ClientInterceptor that runs strictly after the tracer installing interceptor. This raises two problems:

    • Relying on a certain order of interceptors is problematic, which makes special cases for particular interceptors. It is hard to maintain the ordering of different interceptors as there are many places registering interceptors (in-channel, wrapping channel, global interceptors).
    • Currently, interceptors for Census modules run last to avoid ClientStreamTracer.Factory being overwritten in CallOptions. So no other interceptors are able to access tracer specific properties.
@voidzcy
Copy link
Contributor Author

voidzcy commented Dec 5, 2019

Deprecated.

@voidzcy voidzcy closed this as completed Dec 5, 2019
@ejona86
Copy link
Member

ejona86 commented Jan 29, 2020

This API was abandoned before being added. #6090 was closed before being merged.

@ejona86 ejona86 removed this from the Next milestone Jan 29, 2020
@lock lock bot locked as resolved and limited conversation to collaborators May 5, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
experimental API Issue tracks stabilizing an experimental API
Projects
None yet
Development

No branches or pull requests

2 participants