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

[Producer] Add context to ProducerInterceptor #1157

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

treuherz
Copy link

@treuherz treuherz commented Jan 17, 2024

Fixes #443

Motivation

The ProducerInterceptor does not take a context.Context. This makes it difficult to write useful interceptors that can integrate with common tracing SDKs like OpenTelemetry. These SDKs typically follow the convention of using a Context to propagate metadata vertically through a call stack.

If an interceptor knows that the pre-Send method can put metadata (such as trace IDs or logging values) in a context.Context, which the post-Send method will be able to pull out, then it does not have to do its own potentially-costly state management.

For an example of a another library using a similar convention, see pgx, the Postgres go driver

Modifications

This change adds a context.Context argument to the ProducerInterceptor interface, and passes it between the pre- and post-Send interceptor methods.

Verifying this change

  • Make sure that the change passes the CI checks.

This change added tests and can be verified as follows:

  • Unit tests that rely on values in the interceptor context.

Does this pull request potentially affect one of the following parts:

  • Dependencies (does it add or upgrade a dependency): no
  • The public API: yes, adding parameters to Interceptor interface
  • The schema: no
  • The default values of configurations: no
  • The wire protocol: no

Documentation

  • Does this pull request introduce a new feature? sort of
  • If yes, how is the feature documented? go docs

This change adds a context.Context argument to the ProducerInterceptor
interface, and passes it between the pre- and post-Send interceptor
methods. Having this makes it much easier to write useful
interceptors that can integrate with common tracing SDKs like
OpenTelemetry, as the context is the conventional method for propagating
metadata vertically through a call stack.

For an example of another library using a similar convention, see:
https://github.com/jackc/pgx/blob/9ab9e3c40bbb33c6f37359c87508cbc6a9830ed6/tracer.go#L10

Fixes apache#443
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add context param in interceptor
1 participant