open-telemetry / open-telemetry/opentelemetry-java

BatchSpanProcessor does not trigger export timeout

Open
#7,511 3 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Bug
Dominant language
Java
Stars
2.5k
Forks
1k
Avg merge
3d 17h
Merged PRs (30d)
58

Description

Describe the bug
Despite the introduction of a delay that is longer than the timeout on both the exporter (using a wrapper class) and my custom-built collector, the export timeout does not affect the export call.

Steps to reproduce
This was the setup I used to test the timeout on the exporter.

@Bean
public OpenTelemetrySdk autoconfiguredSdk() {
    return AutoConfiguredOpenTelemetrySdk.builder()
            .addPropertiesSupplier(() -> properties)
            .addSpanExporterCustomizer((spanExporter, configProperties) -> new CustomSpanExporter(spanExporter))
            .setResultAsGlobal()
            .build()
            .getOpenTelemetrySdk();
}
@AllArgsConstructor
public class CustomSpanExporter implements SpanExporter {

  private final SpanExporter delegate;

  @Override
  public CompletableResultCode export(Collection<SpanData> spans) {
      try {
              Thread.sleep(35000);
       } catch (InterruptedException e) {
              Thread.currentThread().interrupt();
              throw new RuntimeException("Sleep interrupted", e);
      }
      return delegate.export(spans);
  }

  @Override
  public CompletableResultCode flush() {
      return delegate.flush();
  }

  @Override
  public CompletableResultCode shutdown() {
      return delegate.shutdown();
  }

  @Override
  public void close() {
      delegate.close();
  }
}

The setup for the collector involves creating a collector server (in my case, a gRPC one) with a timeout immediately after receiving the request.
Although otel.exporter.otlp.timeout, by default, is 10 seconds (lower than otel.bsp.export.timeout's default), meaning the HTTP request times out before the exporter does, I have tested with a lower export timeout, in which case the request finalises normally.

What did you expect to see?
I expected to have my export interrupted after the value set for otel.bsp.export.timeout (by default, 30 seconds).

What did you see instead?
Instead, the export progressed as normal.

What version and what artifacts are you using?

io.opentelemetry.instrumentation:opentelemetry-spring-boot-starter:jar:2.13.1
io.opentelemetry:opentelemetry-sdk:jar:1.47.0

My pom.xml:

<dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>io.opentelemetry</groupId>
    <artifactId>opentelemetry-sdk-extension-autoconfigure</artifactId>
</dependency>

Environment
Oracle Linux Server 8.9
openjdk version "17.0.14" 2025-01-21 LTS
OpenJDK Runtime Environment (Red_Hat-17.0.14.0.7-3.0.1) (build 17.0.14+7-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-17.0.14.0.7-3.0.1) (build 17.0.14+7-LTS, mixed mode, sharing)

Additional context
If this is the expected behaviour, any help on how to test this property would be appreciated.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with BatchSpanProcessor and the otel.bsp.export.timeout setting, then trace how the SpanExporter.export CompletableResultCode is handled. Reproduce the delayed CustomSpanExporter case and compare the observed behavior with the expected 30-second export timeout. Done means the timeout behavior is understood and the reported discrepancy is covered by an appropriate regression test.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
observability-sre
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.