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

Fix observation scope handlings in grpc server instrumentation #3836

Merged
merged 1 commit into from
May 17, 2023

Conversation

ttddyy
Copy link
Contributor

@ttddyy ttddyy commented May 14, 2023

Prior to this change, when grpc server receives requests in parallel, wrong scopes might have been used.
This change ensures the proper scope is used for dispatched callback methods.

Fixes gh-3805

Prior to this change, when grpc server receives requests in parallel,
wrong scopes might have been used.
This change ensures the proper scope is used for dispatched callback
methods.

Fixes micrometer-metricsgh-3805
Observation observation = GrpcObservationDocumentation.SERVER.observation(this.customConvention,
DEFAULT_CONVENTION, contextSupplier, this.registry);
Observation observation = GrpcObservationDocumentation.SERVER
.observation(this.customConvention, DEFAULT_CONVENTION, contextSupplier, this.registry)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

7% of developers fix this issue

THREAD_SAFETY_VIOLATION: Read/Write race. Non-private method ObservationGrpcServerInterceptor.interceptCall(...) reads without synchronization from this.customConvention. Potentially races with write in method ObservationGrpcServerInterceptor.setCustomConvention(...).
Reporting because a superclass class io.grpc.ServerInterceptor is annotated @ThreadSafe, so we assume that this method can run in parallel with other non-private methods in the class (including itself).


ℹ️ Expand to see all @sonatype-lift commands

You can reply with the following commands. For example, reply with @sonatype-lift ignoreall to leave out all findings.

Command Usage
@sonatype-lift ignore Leave out the above finding from this PR
@sonatype-lift ignoreall Leave out all the existing findings from this PR
@sonatype-lift exclude <file|issue|path|tool> Exclude specified file|issue|path|tool from Lift findings by updating your config.toml file

Note: When talking to LiftBot, you need to refresh the page to see its response.
Click here to add LiftBot to another repo.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@sonatype-lift ignore

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've recorded this as ignored for this pull request.
If you change your mind, just comment @sonatype-lift unignore.

@ttddyy ttddyy mentioned this pull request May 16, 2023
@jonatan-ivanov jonatan-ivanov added this to the 1.10.8 milestone May 17, 2023
@jonatan-ivanov jonatan-ivanov added the bug A general bug label May 17, 2023
@jonatan-ivanov jonatan-ivanov removed this from the 1.10.8 milestone May 17, 2023
@jonatan-ivanov jonatan-ivanov removed the bug A general bug label May 17, 2023
@jonatan-ivanov jonatan-ivanov merged commit 081fd49 into micrometer-metrics:1.10.x May 17, 2023
1 check passed
@jonatan-ivanov
Copy link
Member

Thank you!

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.

GRPC current span Tracer.currentSpan() becomes null when processing parallel calls
2 participants