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

Incorrect exec time for child spans when using completable future in spring controller #7825

Open
VasaviMadhurima opened this issue Oct 22, 2024 · 1 comment

Comments

@VasaviMadhurima
Copy link

Hi,

When diagnosing some performance issues, I noticed that the execution times for child spans in traces are incorrect for APIs that are implemented using Spring Async controller feature with Completable futures.

Here is a sample trace:
Image
Image

Take S3.HeadBucket child span for example - the waterfall view clearly shows that the exec time is 223ms. However, in the span summary we see that exec time is reported as 111ms (exactly half).

Below is a sample code to show how we use the Completable futures:

@GetMapping("/my-service-path")
public CompletableFuture<ResponseEntity<MyResponseObject>> getSomeInfo() {
    return CompletableFuture.supplyAsync(
        TracedSupplier.from(() -> {
            //internalServicelogic
         }),
    executorService
  );
}

Annoyances:

We extensively use Completable futures in spring controller for all our java services. Given this issue, the time spent charts incorrectly represent the time spent in the service v/s the downstream components. This defeats the purpose of using APM tracing to a large extent for us.

@VasaviMadhurima
Copy link
Author

I can confirm that if we remove the Completable future and make the API implementation synchronous, the exec times of child spans look alright.

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

No branches or pull requests

1 participant