[Producer] Add context to ProducerInterceptor #1157
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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
This change added tests and can be verified as follows:
Does this pull request potentially affect one of the following parts:
Documentation