Skip to content

Commit 97bb4ec

Browse files
Run JDK HTTP sender on non-daemon threads.
* Updated the default ExecutorService on JdkHttpSender to use the DaemonThreadFactory, instead of the JDK default.
1 parent 5bda810 commit 97bb4ec

File tree

2 files changed

+42
-2
lines changed

2 files changed

+42
-2
lines changed

exporters/sender/jdk/src/main/java/io/opentelemetry/exporter/sender/jdk/internal/JdkHttpSender.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import java.util.concurrent.CompletableFuture;
3333
import java.util.concurrent.ConcurrentLinkedQueue;
3434
import java.util.concurrent.ExecutorService;
35-
import java.util.concurrent.Executors;
3635
import java.util.concurrent.ThreadLocalRandom;
3736
import java.util.concurrent.TimeUnit;
3837
import java.util.function.Consumer;
@@ -101,7 +100,7 @@ public final class JdkHttpSender implements HttpSender {
101100
.map(RetryPolicy::getRetryExceptionPredicate)
102101
.orElse(JdkHttpSender::isRetryableException);
103102
if (executorService == null) {
104-
this.executorService = Executors.newFixedThreadPool(5);
103+
this.executorService = JdkHtttpUtil.newExecutor();
105104
this.managedExecutor = true;
106105
} else {
107106
this.executorService = executorService;
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.exporter.sender.jdk.internal;
7+
8+
import io.opentelemetry.sdk.internal.DaemonThreadFactory;
9+
import java.util.concurrent.ExecutorService;
10+
import java.util.concurrent.SynchronousQueue;
11+
import java.util.concurrent.ThreadPoolExecutor;
12+
import java.util.concurrent.TimeUnit;
13+
14+
/**
15+
* Utilities for JDK HTTP.
16+
*
17+
* <p>This class is internal and is hence not for public use. Its APIs are unstable and can change
18+
* at any time.
19+
*/
20+
public class JdkHtttpUtil {
21+
@SuppressWarnings("NonFinalStaticField")
22+
private static boolean propagateContextForTestingInDispatcher = false;
23+
24+
public static void setPropagateContextForTestingInDispatcher(
25+
boolean propagateContextForTestingInDispatcher) {
26+
JdkHtttpUtil.propagateContextForTestingInDispatcher = propagateContextForTestingInDispatcher;
27+
}
28+
29+
/** Returns an {@link ExecutorService} using daemon threads. */
30+
public static ExecutorService newExecutor() {
31+
return new ThreadPoolExecutor(
32+
0,
33+
Integer.MAX_VALUE,
34+
60,
35+
TimeUnit.SECONDS,
36+
new SynchronousQueue<>(),
37+
new DaemonThreadFactory("jdkhttp-executor", propagateContextForTestingInDispatcher));
38+
}
39+
40+
private JdkHtttpUtil() {}
41+
}

0 commit comments

Comments
 (0)