Skip to content

Spring Boot (Webflux): many unrelated http breadcrumbs are recorded with events #1790

Description

@s-volkov-1

Platform:

  • Spring Boot (Webflux server & WebClient) -> 2.5.5

IDE:

  • IntelliJ -> 2021.2

Build system:

  • Maven -> 3.6.3-jdk-11

Platform installed with:

  • Maven Central

The version of the SDK:
5.2.4


I have the following issue:

Many (tens or even ~hundred) unrelated http breadcrumbs recorded with events. These breadcrumbs are:

  • Incoming server http requests (to actuator endpoints, for example)
  • Outgoing http client requests to external services, but they are old and/or unrelated to original incoming server request

Steps to reproduce:

  • Use spring-boot webflux server application
  • Use sentry-spring-boot-starter
  • Use actual sentry server (probably won't work with NoOpHub)
  • Start app locally
  • Put some load on application
    • I used 50 threads in jmeter accessing actuator health, info and prometheus endpoints without delays
    • prometheus worked better
  • Make some meaningful requests which should cause some kind of error which should be sent to sentry
  • Observe events on sentry server or via debugging SentryClient (less effective)

Actual result:
Screenshot from actual server-running instance
sentry webflux bug

Expected result:
Only a couple of related http breadcrumbs are present

Personal thoughts
Both SentryWebFilter & SentrySpanClientWebRequestFilter use HubAdapter, which uses static Sentry.getCurrentHub() method, which returns ThreadLocal instance of Hub.

It seems like this mechanism may not work correctly with reactive application, which serves requests on a small number of threads, and they are switched frequently.

As far as I know, there is a way of storing arbitrary request-related data in webflux:

  • org.springframework.web.server.ServerWebExchange.getAttributes()
  • org.springframework.web.reactive.function.client.ClientRequest.attributes()

Activity

  1. marandaneto commented on Nov 2, 2021

    @marandaneto
    Contributor
  2. added 2 commits that reference this issue on Nov 25, 2021
    48e569d
    3fa316d
  3. hu-chia commented on Mar 5, 2022

    @hu-chia

    Based on ThreadLocal, this issue seems unsolvable.

  4. added
    ThreadLocalHubProblemIssues caused by Hub being ThreadLocal and no or no easy way to clone the hub
    on Feb 7, 2023
  5. adinauer commented on Mar 2, 2023

    @adinauer
    Member

    We have just released 6.15.0 of the Java SDK. If you're on Spring Boot 3.0.3+ you can give ThreadLocalAccessor a try.

    Here's a copy of the changelog so you know what's required:
    Implement ThreadLocalAccessor for propagating Sentry hub with reactor / WebFlux (#2570)

    We've also fixed a bug for the WebFlux integration (#2580) in this release for older versions of Spring Boot and when not using context-propagation. In case you give it a try it would be great if you could give us feedback 🙏 .

  6. adinauer commented on May 9, 2023

    @adinauer
    Member

    Closing this now as it should be resolved (see comment above), feel free to reopen if you run into the problem again.

  7. removed their assignment
    on Apr 11, 2024
  8. adinauer commented on Apr 11, 2024

    @adinauer
    Member

    This is still an issue for our Spring Boot 2 integration.

    We could take another stab at it by trying to use reactor.core.CoreSubscriber and Hooks.onEachOperator as described here. Needs testing whether this is has a lot of impact on performance.

    Putting this in the backlog but can't say when we'll get to it.

  9. adinauer commented on Mar 4, 2025

    @adinauer
    Member

    We're currently not planning on adding improved support for Spring Boot 2 as the number of users is declining.

    If you need this please give our updated OpenTelemetry integration a try. It might work better here. Here's docs on it: https://docs.sentry.io/platforms/java/guides/spring-boot/tracing/instrumentation/opentelemetry/

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugIssue typeThreadLocalHubProblemIssues caused by Hub being ThreadLocal and no or no easy way to clone the hubWebFlux

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions