KEMBAR78
Non-daemon thread in OTLP JDK HTTP sender · Issue #7321 · open-telemetry/opentelemetry-java · GitHub
Skip to content

Non-daemon thread in OTLP JDK HTTP sender #7321

@SoftlySplinter

Description

@SoftlySplinter

Describe the bug
OTLP JDK HTTP sender uses a non-daemon thread, which can prevent shutdown of the JVM.

Steps to reproduce
Run a Java application that uses OTel to produce telemetry data, configured with:

-Dotel.traces.exporter=otlp 
-Dotel.exporter.otlp.protocol=http/protobuf 

What did you expect to see?
No non-daemon threads are created by the OpenTelemetry SDK, allowing the JVM the shutdown cleanly.

What did you see instead?
A non-daemon thread is created in the JdkHttpSender class:

Thread=pool-1-thread-1 (000000513938A760) Status=Parked
    at jdk/internal/misc/Unsafe.park(ZJ)V (Native Method)
    at java/util/concurrent/locks/LockSupport.park(Ljava/lang/Object;)V (LockSupport.java:211)
    at java/util/concurrent/CompletableFuture$Signaller.block()Z (CompletableFuture.java:1864)                                                                     at java/util/concurrent/ForkJoinPool.unmanagedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V (ForkJoinPool.java:3465)
    at java/util/concurrent/ForkJoinPool.managedBlock(Ljava/util/concurrent/ForkJoinPool$ManagedBlocker;)V (ForkJoinPool.java:3436)
    at java/util/concurrent/CompletableFuture.waitingGet(Z)Ljava/lang/Object; (CompletableFuture.java:1898)
    at java/util/concurrent/CompletableFuture.get()Ljava/lang/Object; (CompletableFuture.java:2072)
    at jdk/internal/net/http/HttpClientImpl.send(Ljava/net/http/HttpRequest;Ljava/net/http/HttpResponse$BodyHandler;)Ljava/net/http/HttpResponse; (HttpClientImpl.java:554)
    at jdk/internal/net/http/HttpClientFacade.send(Ljava/net/http/HttpRequest;Ljava/net/http/HttpResponse$BodyHandler;)Ljava/net/http/HttpResponse; (HttpClientFacade.java:123)
    at io/opentelemetry/exporter/sender/jdk/internal/JdkHttpSender.sendRequest(Ljava/net/http/HttpRequest$Builder;Lio/opentelemetry/exporter/sender/jdk/internal/JdkHttpSender$ByteBufferPool;)Ljava/net/http/HttpResponse; (JdkHttpSender.java:298)
    at io/opentelemetry/exporter/sender/jdk/internal/JdkHttpSender.sendInternal(Lio/opentelemetry/exporter/internal/marshal/Marshaler;)Ljava/net/http/HttpResponse; (JdkHttpSender.java:236)
    at io/opentelemetry/exporter/sender/jdk/internal/JdkHttpSender.lambda$send$1(Lio/opentelemetry/exporter/internal/marshal/Marshaler;)Ljava/net/http/HttpResponse; (JdkHttpSender.java:161)
    at io/opentelemetry/exporter/sender/jdk/internal/JdkHttpSender$$Lambda$291/0x0000000000000000.get()Ljava/lang/Object; (Bytecode PC: 8)
    at java/util/concurrent/CompletableFuture$AsyncSupply.run()V (CompletableFuture.java:1768)
    at java/util/concurrent/ThreadPoolExecutor.runWorker(Ljava/util/concurrent/ThreadPoolExecutor$Worker;)V (ThreadPoolExecutor.java:1136) (Compiled Code)
    at java/util/concurrent/ThreadPoolExecutor$Worker.run()V (ThreadPoolExecutor.java:635)
    at java/lang/Thread.run()V (Thread.java:853)

What version and what artifacts are you using?
Artifacts: opentelemetry-api, opentelemetry-sdk, opentelemetry-exporter-otlp, opentelemetry-exporter-sender-jdk, opentelemetry-sdk-extension-autoconfigure
Version: v1.49.0
How did you reference these artifacts? JARs downloaded from Maven Central

Environment
Compiler: IBM Semeru Runtime Certified Edition 17.0.9.0 (build 17.0.9+9)
OS: Windows 11
Runtime (if different from JDK above): IBM Semeru Runtime Certified Edition for z/OS 17.0.14.0 (build 17.0.14+7)
OS (if different from OS compiled on): z/OS

Additional context
Add any other context about the problem here.

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions