From 74fb36b6cb79dd80dd0d57c330f85a110599254c Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Fri, 3 Dec 2021 12:17:24 +0900 Subject: [PATCH] Update to OkHttp 4 and use daemon threads in dispatcher. (#3946) --- dependencyManagement/build.gradle.kts | 6 +--- .../grpc/OkHttpGrpcExporterBuilder.java | 4 ++- .../okhttp/OkHttpExporterBuilder.java | 4 ++- .../otlp/internal/okhttp/OkHttpUtil.java | 30 +++++++++++++++++++ 4 files changed, 37 insertions(+), 7 deletions(-) create mode 100644 exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpUtil.java diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index eb100a7c3a..a802a90281 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -16,6 +16,7 @@ val DEPENDENCY_BOMS = listOf( "com.google.guava:guava-bom:31.0.1-jre", "com.google.protobuf:protobuf-bom:3.18.1", "com.linecorp.armeria:armeria-bom:1.13.3", + "com.squareup.okhttp3:okhttp-bom:4.9.3", "io.grpc:grpc-bom:1.41.0", "io.zipkin.brave:brave-bom:5.13.3", "io.zipkin.reporter2:zipkin-reporter-bom:2.16.3", @@ -73,11 +74,6 @@ val DEPENDENCIES = listOf( "com.google.code.findbugs:jsr305:3.0.2", "com.google.guava:guava-beta-checker:1.0", "com.lmax:disruptor:3.4.4", - // using old version of okhttp to avoid pulling in kotlin stdlib - // not using (old) okhttp bom because that is pulling in old guava version - // and overriding the guava bom - "com.squareup.okhttp3:okhttp:3.14.9", - "com.squareup.okhttp3:okhttp-tls:3.14.9", "com.sun.net.httpserver:http:20070405", "com.tngtech.archunit:archunit-junit5:0.21.0", "com.uber.nullaway:nullaway:0.9.2", diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/grpc/OkHttpGrpcExporterBuilder.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/grpc/OkHttpGrpcExporterBuilder.java index a11fe3656b..c1c7c0f461 100644 --- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/grpc/OkHttpGrpcExporterBuilder.java +++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/grpc/OkHttpGrpcExporterBuilder.java @@ -10,6 +10,7 @@ import io.opentelemetry.api.metrics.MeterProvider; import io.opentelemetry.exporter.otlp.internal.Marshaler; import io.opentelemetry.exporter.otlp.internal.RetryPolicy; import io.opentelemetry.exporter.otlp.internal.TlsUtil; +import io.opentelemetry.exporter.otlp.internal.okhttp.OkHttpUtil; import io.opentelemetry.exporter.otlp.internal.okhttp.RetryInterceptor; import java.net.URI; import java.net.URISyntaxException; @@ -121,7 +122,8 @@ public final class OkHttpGrpcExporterBuilder @Override public GrpcExporter build() { - OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); + OkHttpClient.Builder clientBuilder = + new OkHttpClient.Builder().dispatcher(OkHttpUtil.newDispatcher()); Headers.Builder headers = this.headers != null ? this.headers : new Headers.Builder(); diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpExporterBuilder.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpExporterBuilder.java index dcbfcabf98..bb6db3ebcd 100644 --- a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpExporterBuilder.java +++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpExporterBuilder.java @@ -93,7 +93,9 @@ public final class OkHttpExporterBuilder { public OkHttpExporter build() { OkHttpClient.Builder clientBuilder = - new OkHttpClient.Builder().callTimeout(Duration.ofNanos(timeoutNanos)); + new OkHttpClient.Builder() + .dispatcher(OkHttpUtil.newDispatcher()) + .callTimeout(Duration.ofNanos(timeoutNanos)); if (trustedCertificatesPem != null) { try { diff --git a/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpUtil.java b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpUtil.java new file mode 100644 index 0000000000..38d67fecf9 --- /dev/null +++ b/exporters/otlp/common/src/main/java/io/opentelemetry/exporter/otlp/internal/okhttp/OkHttpUtil.java @@ -0,0 +1,30 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.exporter.otlp.internal.okhttp; + +import io.opentelemetry.sdk.internal.DaemonThreadFactory; +import java.util.concurrent.SynchronousQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import okhttp3.Dispatcher; + +/** Utilities for OkHttp. */ +public final class OkHttpUtil { + + /** Returns a {@link Dispatcher} using daemon threads, otherwise matching the OkHttp default. */ + public static Dispatcher newDispatcher() { + return new Dispatcher( + new ThreadPoolExecutor( + 0, + Integer.MAX_VALUE, + 60, + TimeUnit.SECONDS, + new SynchronousQueue<>(), + new DaemonThreadFactory("okhttp-dispatch"))); + } + + private OkHttpUtil() {} +}