Skip to content

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

@treuherz treuherz force-pushed the interceptor-context branch from c06f577 to 011d1f2 Compare January 17, 2024 12:36
@treuherz treuherz mentioned this pull request Jan 29, 2024
1 task
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
@treuherz treuherz force-pushed the interceptor-context branch from 011d1f2 to f246a71 Compare February 2, 2024 11:16
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