From ed57751d00ad571c32180951a52aa34dff9857b4 Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Tue, 1 Dec 2020 09:12:58 +0900 Subject: [PATCH] Remove Guava from SDK extensions, except zpages (#2149) * Remove Guava from SDK extensions, except zpages * Fix --- .../export/DisruptorAsyncSpanProcessor.java | 5 +++-- sdk-extensions/aws/build.gradle | 12 +++------- .../aws/resource/BeanstalkResource.java | 3 +-- .../extension/aws/resource/DockerHelper.java | 3 +-- .../extension/aws/resource/Ec2Resource.java | 22 ++++++++++++++----- .../extension/aws/resource/EcsResource.java | 10 ++++----- .../extension/aws/resource/EksResource.java | 19 ++++++++-------- .../extension/aws/resource/JdkHttpClient.java | 18 ++++++++++++--- .../jaeger/sampler/JaegerRemoteSampler.java | 3 +-- .../jaeger/sampler/RateLimitingSampler.java | 3 +-- 10 files changed, 55 insertions(+), 43 deletions(-) diff --git a/sdk-extensions/async-processor/src/main/java/io/opentelemetry/sdk/extension/trace/export/DisruptorAsyncSpanProcessor.java b/sdk-extensions/async-processor/src/main/java/io/opentelemetry/sdk/extension/trace/export/DisruptorAsyncSpanProcessor.java index c650c39151..3caaf6a3ce 100644 --- a/sdk-extensions/async-processor/src/main/java/io/opentelemetry/sdk/extension/trace/export/DisruptorAsyncSpanProcessor.java +++ b/sdk-extensions/async-processor/src/main/java/io/opentelemetry/sdk/extension/trace/export/DisruptorAsyncSpanProcessor.java @@ -5,7 +5,6 @@ package io.opentelemetry.sdk.extension.trace.export; -import com.google.common.base.Preconditions; import com.lmax.disruptor.SleepingWaitStrategy; import com.lmax.disruptor.WaitStrategy; import io.opentelemetry.context.Context; @@ -149,7 +148,9 @@ public final class DisruptorAsyncSpanProcessor implements SpanProcessor { * @return this. */ public Builder setBufferSize(int bufferSize) { - Preconditions.checkArgument(bufferSize > 0, "bufferSize must be positive"); + if (bufferSize <= 0) { + throw new IllegalArgumentException("bufferSize must be positive"); + } this.bufferSize = bufferSize; return this; } diff --git a/sdk-extensions/aws/build.gradle b/sdk-extensions/aws/build.gradle index 25e9b12019..555689404c 100644 --- a/sdk-extensions/aws/build.gradle +++ b/sdk-extensions/aws/build.gradle @@ -12,16 +12,10 @@ dependencies { api project(':opentelemetry-api'), project(':opentelemetry-sdk') - implementation 'com.fasterxml.jackson.core:jackson-core', - libraries.guava, - platform(boms.guava) - - implementation 'com.fasterxml.jackson.core:jackson-databind', - libraries.guava, - platform(boms.guava) + implementation 'com.fasterxml.jackson.core:jackson-core' + implementation 'com.fasterxml.jackson.core:jackson-databind' testImplementation 'com.github.tomakehurst:wiremock-jre8:2.27.2', + libraries.guava, libraries.junit - - signature libraries.android_signature } diff --git a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/BeanstalkResource.java b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/BeanstalkResource.java index 929c786a64..3d180cd861 100644 --- a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/BeanstalkResource.java +++ b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/BeanstalkResource.java @@ -8,7 +8,6 @@ package io.opentelemetry.sdk.extension.aws.resource; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; -import com.google.common.annotations.VisibleForTesting; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.resources.ResourceAttributes; @@ -42,7 +41,7 @@ public class BeanstalkResource extends ResourceProvider { this(BEANSTALK_CONF_PATH); } - @VisibleForTesting + // Visible for testing BeanstalkResource(String configPath) { this.configPath = configPath; } diff --git a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/DockerHelper.java b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/DockerHelper.java index f2cd0ddc72..72206ec018 100644 --- a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/DockerHelper.java +++ b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/DockerHelper.java @@ -5,7 +5,6 @@ package io.opentelemetry.sdk.extension.aws.resource; -import com.google.common.annotations.VisibleForTesting; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; @@ -25,7 +24,7 @@ class DockerHelper { this(DEFAULT_CGROUP_PATH); } - @VisibleForTesting + // Visible for testing DockerHelper(String cgroupPath) { this.cgroupPath = cgroupPath; } diff --git a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/Ec2Resource.java b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/Ec2Resource.java index 1c9c4ea0ef..027a012b84 100644 --- a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/Ec2Resource.java +++ b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/Ec2Resource.java @@ -8,8 +8,6 @@ package io.opentelemetry.sdk.extension.aws.resource; import com.fasterxml.jackson.core.JsonFactory; import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.core.JsonToken; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.io.ByteStreams; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.resources.ResourceAttributes; @@ -25,6 +23,7 @@ import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.logging.Level; import java.util.logging.Logger; +import javax.annotation.Nullable; /** * A {@link ResourceProvider} which provides information about the current EC2 instance if running @@ -54,7 +53,7 @@ public class Ec2Resource extends ResourceProvider { this(System.getProperty("otel.aws.imds.endpointOverride", DEFAULT_IMDS_ENDPOINT)); } - @VisibleForTesting + // Visible for testing Ec2Resource(String endpoint) { String urlBase = "http://" + endpoint; try { @@ -68,6 +67,7 @@ public class Ec2Resource extends ResourceProvider { } // Generic HTTP fetch function for IMDS. + // TODO(anuraaga): Migrate to JdkHttpClient private static String fetchString(String httpMethod, URL url, String token, boolean includeTtl) { final HttpURLConnection connection; try { @@ -117,13 +117,13 @@ public class Ec2Resource extends ResourceProvider { private static String readResponseString(HttpURLConnection connection) { ByteArrayOutputStream os = new ByteArrayOutputStream(); try (InputStream is = connection.getInputStream()) { - ByteStreams.copy(is, os); + readTo(is, os); } catch (IOException e) { // Only best effort read if we can. } try (InputStream is = connection.getErrorStream()) { if (is != null) { - ByteStreams.copy(is, os); + readTo(is, os); } } catch (IOException e) { // Only best effort read if we can. @@ -206,4 +206,16 @@ public class Ec2Resource extends ResourceProvider { private String fetchHostname(String token) { return fetchString("GET", hostnameUrl, token, /* includeTtl= */ false); } + + private static void readTo(@Nullable InputStream is, ByteArrayOutputStream os) + throws IOException { + if (is == null) { + return; + } + byte[] buf = new byte[8192]; + int read; + while ((read = is.read(buf)) > 0) { + os.write(buf, 0, read); + } + } } diff --git a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EcsResource.java b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EcsResource.java index 338478448d..a3a096ac62 100644 --- a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EcsResource.java +++ b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EcsResource.java @@ -5,8 +5,6 @@ package io.opentelemetry.sdk.extension.aws.resource; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Strings; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.resources.ResourceAttributes; @@ -39,7 +37,7 @@ public class EcsResource extends ResourceProvider { this(System.getenv(), new DockerHelper()); } - @VisibleForTesting + // Visible for testing EcsResource(Map sysEnv, DockerHelper dockerHelper) { this.sysEnv = sysEnv; this.dockerHelper = dockerHelper; @@ -61,7 +59,7 @@ public class EcsResource extends ResourceProvider { } String containerId = dockerHelper.getContainerId(); - if (!Strings.isNullOrEmpty(containerId)) { + if (containerId != null && !containerId.isEmpty()) { attrBuilders.put(ResourceAttributes.CONTAINER_ID, containerId); } @@ -69,7 +67,7 @@ public class EcsResource extends ResourceProvider { } private boolean isOnEcs() { - return (!Strings.isNullOrEmpty(sysEnv.get(ECS_METADATA_KEY_V3)) - || !Strings.isNullOrEmpty(sysEnv.get(ECS_METADATA_KEY_V4))); + return !sysEnv.getOrDefault(ECS_METADATA_KEY_V3, "").isEmpty() + || !sysEnv.getOrDefault(ECS_METADATA_KEY_V4, "").isEmpty(); } } diff --git a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EksResource.java b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EksResource.java index c83e04db02..07d2d9e484 100644 --- a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EksResource.java +++ b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/EksResource.java @@ -7,16 +7,15 @@ package io.opentelemetry.sdk.extension.aws.resource; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Charsets; -import com.google.common.base.Strings; -import com.google.common.io.Files; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.AttributesBuilder; import io.opentelemetry.sdk.resources.ResourceAttributes; import io.opentelemetry.sdk.resources.ResourceProvider; import java.io.File; import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; @@ -43,7 +42,7 @@ public class EksResource extends ResourceProvider { this(new JdkHttpClient(), new DockerHelper(), K8S_TOKEN_PATH, K8S_CERT_PATH); } - @VisibleForTesting + // Visible for testing EksResource( JdkHttpClient jdkHttpClient, DockerHelper dockerHelper, @@ -64,12 +63,12 @@ public class EksResource extends ResourceProvider { AttributesBuilder attrBuilders = Attributes.builder(); String clusterName = getClusterName(); - if (!Strings.isNullOrEmpty(clusterName)) { + if (clusterName != null && !clusterName.isEmpty()) { attrBuilders.put(ResourceAttributes.K8S_CLUSTER, clusterName); } String containerId = dockerHelper.getContainerId(); - if (!Strings.isNullOrEmpty(containerId)) { + if (containerId != null && !containerId.isEmpty()) { attrBuilders.put(ResourceAttributes.CONTAINER_ID, containerId); } @@ -88,7 +87,7 @@ public class EksResource extends ResourceProvider { jdkHttpClient.fetchString( "GET", K8S_SVC_URL + AUTH_CONFIGMAP_PATH, requestProperties, K8S_CERT_PATH); - return !Strings.isNullOrEmpty(awsAuth); + return awsAuth != null && !awsAuth.isEmpty(); } private boolean isK8s() { @@ -115,8 +114,8 @@ public class EksResource extends ResourceProvider { private static String getK8sCredHeader() { try { - File file = new File(K8S_TOKEN_PATH); - String content = Files.asCharSource(file, Charsets.UTF_8).read(); + String content = + new String(Files.readAllBytes(Paths.get(K8S_TOKEN_PATH)), StandardCharsets.UTF_8); return "Bearer " + content; } catch (IOException e) { logger.log(Level.WARNING, "Unable to load K8s client token.", e); diff --git a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/JdkHttpClient.java b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/JdkHttpClient.java index 3cf015d192..4217d3216a 100644 --- a/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/JdkHttpClient.java +++ b/sdk-extensions/aws/src/main/java/io/opentelemetry/sdk/extension/aws/resource/JdkHttpClient.java @@ -5,7 +5,6 @@ package io.opentelemetry.sdk.extension.aws.resource; -import com.google.common.io.ByteStreams; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.IOException; @@ -21,6 +20,7 @@ import java.util.Collection; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import javax.annotation.Nullable; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSocketFactory; @@ -80,13 +80,13 @@ class JdkHttpClient { private static String readResponseString(HttpURLConnection connection) { ByteArrayOutputStream os = new ByteArrayOutputStream(); try (InputStream is = connection.getInputStream()) { - ByteStreams.copy(is, os); + readTo(is, os); } catch (IOException e) { // Only best effort read if we can. } try (InputStream is = connection.getErrorStream()) { if (is != null) { - ByteStreams.copy(is, os); + readTo(is, os); } } catch (IOException e) { // Only best effort read if we can. @@ -134,4 +134,16 @@ class JdkHttpClient { return null; } } + + private static void readTo(@Nullable InputStream is, ByteArrayOutputStream os) + throws IOException { + if (is == null) { + return; + } + byte[] buf = new byte[8192]; + int read; + while ((read = is.read(buf)) > 0) { + os.write(buf, 0, read); + } + } } diff --git a/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/JaegerRemoteSampler.java b/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/JaegerRemoteSampler.java index 0e756aaeb3..9fdbf43c61 100644 --- a/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/JaegerRemoteSampler.java +++ b/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/JaegerRemoteSampler.java @@ -5,7 +5,6 @@ package io.opentelemetry.sdk.extension.trace.jaeger.sampler; -import com.google.common.annotations.VisibleForTesting; import io.grpc.ManagedChannel; import io.opentelemetry.api.common.ReadableAttributes; import io.opentelemetry.api.trace.Span.Kind; @@ -111,7 +110,7 @@ public class JaegerRemoteSampler implements Sampler { return getDescription(); } - @VisibleForTesting + // Visible for testing Sampler getSampler() { return this.sampler; } diff --git a/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/RateLimitingSampler.java b/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/RateLimitingSampler.java index dd0eaa6030..5fe086922e 100644 --- a/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/RateLimitingSampler.java +++ b/sdk-extensions/jaeger-remote-sampler/src/main/java/io/opentelemetry/sdk/extension/trace/jaeger/sampler/RateLimitingSampler.java @@ -8,7 +8,6 @@ package io.opentelemetry.sdk.extension.trace.jaeger.sampler; import static io.opentelemetry.api.common.AttributeKey.doubleKey; import static io.opentelemetry.api.common.AttributeKey.stringKey; -import com.google.common.annotations.VisibleForTesting; import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.common.ReadableAttributes; @@ -84,7 +83,7 @@ class RateLimitingSampler implements Sampler { return getDescription(); } - @VisibleForTesting + // Visible for testing double getMaxTracesPerSecond() { return maxTracesPerSecond; }