From 29a18bdf208df48d3dc40dd88b5a60a38438b7da Mon Sep 17 00:00:00 2001 From: Rashmi Date: Sun, 17 May 2020 01:48:43 +0530 Subject: [PATCH] Used BatchSpansProcessor instead of SimpleSpansProcessor (#393) BatchSpansProcessor won't get blocked by the exporter. Fixes #368 --- .../bootstrap/instrumentation/java/concurrent/State.java | 2 +- .../java/io/opentelemetry/auto/tooling/TracerInstaller.java | 6 ++++-- .../io/opentelemetry/smoketest/AbstractSmokeTest.groovy | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/agent-bootstrap/src/main/java/io/opentelemetry/auto/bootstrap/instrumentation/java/concurrent/State.java b/agent-bootstrap/src/main/java/io/opentelemetry/auto/bootstrap/instrumentation/java/concurrent/State.java index 38a1dc2ba52..ff12a51ee68 100644 --- a/agent-bootstrap/src/main/java/io/opentelemetry/auto/bootstrap/instrumentation/java/concurrent/State.java +++ b/agent-bootstrap/src/main/java/io/opentelemetry/auto/bootstrap/instrumentation/java/concurrent/State.java @@ -37,7 +37,7 @@ private State() {} public void setParentSpan(final Span parentSpan) { final boolean result = parentSpanRef.compareAndSet(null, parentSpan); - if (!result) { + if (!result && parentSpanRef.get() != parentSpan) { log.debug( "Failed to set parent span because another parent span is already set {}: new: {}, old: {}", this, diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java index 31b0f0664f9..d2adc77afc0 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/TracerInstaller.java @@ -22,7 +22,7 @@ import io.opentelemetry.sdk.contrib.auto.config.SpanExporterFactory; import io.opentelemetry.sdk.metrics.export.IntervalMetricReader; import io.opentelemetry.sdk.metrics.export.MetricExporter; -import io.opentelemetry.sdk.trace.export.SimpleSpansProcessor; +import io.opentelemetry.sdk.trace.export.BatchSpansProcessor; import io.opentelemetry.sdk.trace.export.SpanExporter; import java.io.File; import java.net.MalformedURLException; @@ -71,7 +71,9 @@ private static synchronized void installExportersFromJar(final String exporterJa if (spanExporterFactory != null) { final SpanExporter spanExporter = spanExporterFactory.fromConfig(config); OpenTelemetrySdk.getTracerProvider() - .addSpanProcessor(SimpleSpansProcessor.create(spanExporter)); + .addSpanProcessor( + BatchSpansProcessor.create( + spanExporter, BatchSpansProcessor.Config.loadFromDefaultSources())); log.info("Installed span exporter: " + spanExporter.getClass().getName()); } else { log.warn("No matching providers in jar " + exporterJar); diff --git a/smoke-tests/src/main/groovy/io/opentelemetry/smoketest/AbstractSmokeTest.groovy b/smoke-tests/src/main/groovy/io/opentelemetry/smoketest/AbstractSmokeTest.groovy index 46bba702616..ae653bf012c 100644 --- a/smoke-tests/src/main/groovy/io/opentelemetry/smoketest/AbstractSmokeTest.groovy +++ b/smoke-tests/src/main/groovy/io/opentelemetry/smoketest/AbstractSmokeTest.groovy @@ -70,6 +70,11 @@ abstract class AbstractSmokeTest extends Specification { processBuilder.environment().put("JAVA_HOME", System.getProperty("java.home")) processBuilder.environment().put("DD_API_KEY", API_KEY) + // Setting configuration variables of batch span processor through env vars + // This config is to immediately flush a batch of 1 span with delay of 10ms + processBuilder.environment().put("OTEL_BSP_MAX_EXPORT_BATCH", "1") + processBuilder.environment().put("OTEL_BSP_SCHEDULE_DELAY", "10") + processBuilder.redirectErrorStream(true) logfile = new File("${buildDirectory}/reports/testProcess.${this.getClass().getName()}.log") processBuilder.redirectOutput(ProcessBuilder.Redirect.to(logfile))