Update to latest snapshot. (#1304)

This commit is contained in:
Anuraag Agrawal 2020-10-05 11:41:10 +09:00 committed by GitHub
parent 57ead9532a
commit f2194a928c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 228 additions and 265 deletions

View File

@ -60,8 +60,8 @@ public class AutoInstrumentationPlugin implements Plugin<Project> {
"io.opentelemetry.instrumentation.api", "io.opentelemetry.instrumentation.api",
"io.opentelemetry.OpenTelemetry", // OpenTelemetry API "io.opentelemetry.OpenTelemetry", // OpenTelemetry API
"io.opentelemetry.common", // OpenTelemetry API "io.opentelemetry.common", // OpenTelemetry API
"io.opentelemetry.baggage", // OpenTelemetry API
"io.opentelemetry.context", // OpenTelemetry API (context prop) "io.opentelemetry.context", // OpenTelemetry API (context prop)
"io.opentelemetry.correlationcontext", // OpenTelemetry API
"io.opentelemetry.internal", // OpenTelemetry API "io.opentelemetry.internal", // OpenTelemetry API
"io.opentelemetry.metrics", // OpenTelemetry API "io.opentelemetry.metrics", // OpenTelemetry API
"io.opentelemetry.trace", // OpenTelemetry API "io.opentelemetry.trace", // OpenTelemetry API

View File

@ -11,9 +11,10 @@ ext {
// Check https://oss.jfrog.org/libs-snapshot/io/opentelemetry/ for latest snapshot version. // Check https://oss.jfrog.org/libs-snapshot/io/opentelemetry/ for latest snapshot version.
// Snapshot versions are often split across versions (based on jfrog's whim and relative age of // Snapshot versions are often split across versions (based on jfrog's whim and relative age of
// each module), best to keep these separate until GA // each module), best to keep these separate until GA
opentelemetry : '0.9.0-20200925.025016-49', opentelemetry : '0.9.0-20201002.015754-70',
opentelemetryOther : '0.9.0-20200925.025016-49', opentelemetryOther : '0.9.0-20201002.015754-71',
opentelemetryAnother: '0.9.0-20200925.025016-49', opentelemetryAnother: '0.9.0-20201002.015754-69',
opentelemetryBaggage: '0.9.0-20201002.015754-19',
slf4j : "1.7.30", slf4j : "1.7.30",
guava : "20.0", // Last version to support Java 7 guava : "20.0", // Last version to support Java 7
@ -37,15 +38,15 @@ ext {
deps = [ deps = [
// OpenTelemetry // OpenTelemetry
opentelemetryApi : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-api', version: versions.opentelemetry), opentelemetryApi : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-api', version: versions.opentelemetry),
opentelemetryContextProp : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-context-prop', version: versions.opentelemetryOther), opentelemetryContextProp : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-context-prop', version: versions.opentelemetryAnother),
opentelemetryAutoAnnotations: dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-extension-auto-annotations', version: versions.opentelemetryOther), opentelemetryAutoAnnotations: dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-extension-auto-annotations', version: versions.opentelemetryOther),
opentelemetryTraceProps : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-extension-trace-propagators', version: versions.opentelemetryOther), opentelemetryTraceProps : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-extension-trace-propagators', version: versions.opentelemetry),
opentelemetrySdk : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-sdk', version: versions.opentelemetryOther), opentelemetrySdk : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-sdk', version: versions.opentelemetry),
opentelemetryJaeger : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-jaeger', version: versions.opentelemetry), opentelemetryJaeger : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-jaeger', version: versions.opentelemetry),
opentelemetryOtlp : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-otlp', version: versions.opentelemetry), opentelemetryOtlp : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-otlp', version: versions.opentelemetryAnother),
opentelemetryZipkin : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-zipkin', version: versions.opentelemetryOther), opentelemetryZipkin : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-zipkin', version: versions.opentelemetry),
opentelemetryLogging : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-logging', version: versions.opentelemetry), opentelemetryLogging : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-exporters-logging', version: versions.opentelemetry),
opentelemetryProto : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-proto', version: versions.opentelemetryOther), opentelemetryProto : dependencies.create(group: 'io.opentelemetry', name: 'opentelemetry-proto', version: versions.opentelemetry),
// General // General
slf4j : "org.slf4j:slf4j-api:${versions.slf4j}", slf4j : "org.slf4j:slf4j-api:${versions.slf4j}",

View File

@ -118,12 +118,15 @@ dependencies {
// need to pin the opentelemetry-sdk transitive dependency versions explicitly, otherwise the // need to pin the opentelemetry-sdk transitive dependency versions explicitly, otherwise the
// latest snapshots are used, because the opentelemetry-sdk snapshot pom references these // latest snapshots are used, because the opentelemetry-sdk snapshot pom references these
// transitive dependencies using the generic SNAPSHOT instead of a specific snapshot // transitive dependencies using the generic SNAPSHOT instead of a specific snapshot
implementation group: 'io.opentelemetry', name: 'opentelemetry-api', version: versions.opentelemetry
implementation group: 'io.opentelemetry', name: 'opentelemetry-context-prop', version: versions.opentelemetryAnother
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk', version: versions.opentelemetry implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk', version: versions.opentelemetry
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-common', version: versions.opentelemetryAnother implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-baggage', version: versions.opentelemetryBaggage
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-correlation-context', version: versions.opentelemetryAnother implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-common', version: versions.opentelemetry
implementation group: 'io.opentelemetry', name: 'opentelemetry-proto', version: versions.opentelemetryOther implementation group: 'io.opentelemetry', name: 'opentelemetry-proto', version: versions.opentelemetry
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-metrics', version: versions.opentelemetryAnother implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-extension-otproto', version: versions.opentelemetryOther
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-tracing', version: versions.opentelemetryAnother implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-metrics', version: versions.opentelemetryOther
implementation group: 'io.opentelemetry', name: 'opentelemetry-sdk-tracing', version: versions.opentelemetry
} }
} }
@ -292,6 +295,10 @@ tasks.withType(Test).configureEach {
reports { reports {
junitXml.outputPerTestCase = true junitXml.outputPerTestCase = true
} }
testLogging {
exceptionFormat = 'full'
}
} }
tasks.withType(AbstractArchiveTask) { tasks.withType(AbstractArchiveTask) {

View File

@ -56,7 +56,7 @@ public abstract class BaseDecorator {
public Span onError(Span span, Throwable throwable) { public Span onError(Span span, Throwable throwable) {
assert span != null; assert span != null;
if (throwable != null) { if (throwable != null) {
onComplete(span, Status.UNKNOWN, throwable); onComplete(span, Status.ERROR, throwable);
} }
return span; return span;
} }

View File

@ -23,37 +23,10 @@ public final class HttpStatusConverter {
// https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md#status // https://github.com/open-telemetry/opentelemetry-specification/blob/master/specification/trace/semantic_conventions/http.md#status
public static Status statusFromHttpStatus(int httpStatus) { public static Status statusFromHttpStatus(int httpStatus) {
if (httpStatus >= 100 && httpStatus < 400) { if (httpStatus >= 100 && httpStatus < 400) {
return Status.OK; return Status.UNSET;
} }
switch (httpStatus) { return Status.ERROR;
case 401:
return Status.UNAUTHENTICATED;
case 403:
return Status.PERMISSION_DENIED;
case 404:
return Status.NOT_FOUND;
case 429:
return Status.RESOURCE_EXHAUSTED;
case 501:
return Status.UNIMPLEMENTED;
case 503:
return Status.UNAVAILABLE;
case 504:
return Status.DEADLINE_EXCEEDED;
default:
// fall through
}
if (httpStatus >= 400 && httpStatus < 500) {
return Status.INVALID_ARGUMENT;
}
if (httpStatus >= 500 && httpStatus < 600) {
return Status.INTERNAL;
}
return Status.UNKNOWN;
} }
private HttpStatusConverter() {} private HttpStatusConverter() {}

View File

@ -136,7 +136,7 @@ public abstract class BaseTracer {
} }
public void endExceptionally(Span span, Throwable throwable, long endTimeNanos) { public void endExceptionally(Span span, Throwable throwable, long endTimeNanos) {
span.setStatus(Status.INTERNAL); span.setStatus(Status.ERROR);
onError(span, unwrapThrowable(throwable)); onError(span, unwrapThrowable(throwable));
end(span, endTimeNanos); end(span, endTimeNanos);
} }

View File

@ -105,7 +105,7 @@ public abstract class DatabaseClientTracer<CONNECTION, QUERY> extends BaseTracer
@Override @Override
protected void onError(Span span, Throwable throwable) { protected void onError(Span span, Throwable throwable) {
if (throwable != null) { if (throwable != null) {
span.setStatus(Status.UNKNOWN); span.setStatus(Status.ERROR);
addThrowable( addThrowable(
span, throwable instanceof ExecutionException ? throwable.getCause() : throwable); span, throwable instanceof ExecutionException ? throwable.getCause() : throwable);
} }

View File

@ -19,7 +19,6 @@ package io.opentelemetry.instrumentation.api.typedspan;
import io.opentelemetry.common.AttributeKey; import io.opentelemetry.common.AttributeKey;
import io.opentelemetry.common.Attributes; import io.opentelemetry.common.Attributes;
import io.opentelemetry.trace.EndSpanOptions; import io.opentelemetry.trace.EndSpanOptions;
import io.opentelemetry.trace.Event;
import io.opentelemetry.trace.Span; import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanContext; import io.opentelemetry.trace.SpanContext;
import io.opentelemetry.trace.Status; import io.opentelemetry.trace.Status;
@ -76,16 +75,6 @@ public class DelegatingSpan implements Span {
delegate.addEvent(name, attributes, timestamp); delegate.addEvent(name, attributes, timestamp);
} }
@Override
public void addEvent(Event event) {
delegate.addEvent(event);
}
@Override
public void addEvent(Event event, long timestamp) {
delegate.addEvent(event, timestamp);
}
@Override @Override
public void setStatus(Status status) { public void setStatus(Status status) {
delegate.setStatus(status); delegate.setStatus(status);

View File

@ -98,7 +98,7 @@ class BaseDecoratorTest extends Specification {
then: then:
if (error) { if (error) {
1 * span.setStatus(Status.UNKNOWN) 1 * span.setStatus(Status.ERROR)
1 * span.recordException(error) 1 * span.recordException(error)
} }
0 * _ 0 * _
@ -120,7 +120,7 @@ class BaseDecoratorTest extends Specification {
where: where:
error | status error | status
new Exception() | Status.INTERNAL new Exception() | Status.ERROR
null | Status.OK null | Status.OK
} }

View File

@ -31,75 +31,75 @@ class HttpStatusConverterTest extends Specification {
// https://en.wikipedia.org/wiki/List_of_HTTP_status_codes // https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
where: where:
httpStatus | expectedStatus httpStatus | expectedStatus
100 | Status.OK 100 | Status.UNSET
101 | Status.OK 101 | Status.UNSET
102 | Status.OK 102 | Status.UNSET
103 | Status.OK 103 | Status.UNSET
200 | Status.OK 200 | Status.UNSET
201 | Status.OK 201 | Status.UNSET
202 | Status.OK 202 | Status.UNSET
203 | Status.OK 203 | Status.UNSET
204 | Status.OK 204 | Status.UNSET
205 | Status.OK 205 | Status.UNSET
206 | Status.OK 206 | Status.UNSET
207 | Status.OK 207 | Status.UNSET
208 | Status.OK 208 | Status.UNSET
226 | Status.OK 226 | Status.UNSET
300 | Status.OK 300 | Status.UNSET
301 | Status.OK 301 | Status.UNSET
302 | Status.OK 302 | Status.UNSET
303 | Status.OK 303 | Status.UNSET
304 | Status.OK 304 | Status.UNSET
305 | Status.OK 305 | Status.UNSET
306 | Status.OK 306 | Status.UNSET
307 | Status.OK 307 | Status.UNSET
308 | Status.OK 308 | Status.UNSET
400 | Status.INVALID_ARGUMENT 400 | Status.ERROR
401 | Status.UNAUTHENTICATED 401 | Status.ERROR
403 | Status.PERMISSION_DENIED 403 | Status.ERROR
404 | Status.NOT_FOUND 404 | Status.ERROR
405 | Status.INVALID_ARGUMENT 405 | Status.ERROR
406 | Status.INVALID_ARGUMENT 406 | Status.ERROR
407 | Status.INVALID_ARGUMENT 407 | Status.ERROR
408 | Status.INVALID_ARGUMENT 408 | Status.ERROR
409 | Status.INVALID_ARGUMENT 409 | Status.ERROR
410 | Status.INVALID_ARGUMENT 410 | Status.ERROR
411 | Status.INVALID_ARGUMENT 411 | Status.ERROR
412 | Status.INVALID_ARGUMENT 412 | Status.ERROR
413 | Status.INVALID_ARGUMENT 413 | Status.ERROR
414 | Status.INVALID_ARGUMENT 414 | Status.ERROR
415 | Status.INVALID_ARGUMENT 415 | Status.ERROR
416 | Status.INVALID_ARGUMENT 416 | Status.ERROR
417 | Status.INVALID_ARGUMENT 417 | Status.ERROR
418 | Status.INVALID_ARGUMENT 418 | Status.ERROR
421 | Status.INVALID_ARGUMENT 421 | Status.ERROR
422 | Status.INVALID_ARGUMENT 422 | Status.ERROR
423 | Status.INVALID_ARGUMENT 423 | Status.ERROR
424 | Status.INVALID_ARGUMENT 424 | Status.ERROR
425 | Status.INVALID_ARGUMENT 425 | Status.ERROR
426 | Status.INVALID_ARGUMENT 426 | Status.ERROR
428 | Status.INVALID_ARGUMENT 428 | Status.ERROR
429 | Status.RESOURCE_EXHAUSTED 429 | Status.ERROR
431 | Status.INVALID_ARGUMENT 431 | Status.ERROR
451 | Status.INVALID_ARGUMENT 451 | Status.ERROR
500 | Status.INTERNAL 500 | Status.ERROR
501 | Status.UNIMPLEMENTED 501 | Status.ERROR
502 | Status.INTERNAL 502 | Status.ERROR
503 | Status.UNAVAILABLE 503 | Status.ERROR
504 | Status.DEADLINE_EXCEEDED 504 | Status.ERROR
505 | Status.INTERNAL 505 | Status.ERROR
506 | Status.INTERNAL 506 | Status.ERROR
507 | Status.INTERNAL 507 | Status.ERROR
508 | Status.INTERNAL 508 | Status.ERROR
510 | Status.INTERNAL 510 | Status.ERROR
511 | Status.INTERNAL 511 | Status.ERROR
// Don't exist // Don't exist
99 | Status.UNKNOWN 99 | Status.ERROR
600 | Status.UNKNOWN 600 | Status.ERROR
} }
} }

View File

@ -68,7 +68,7 @@ public abstract class TracingRequestHandler<I, O> implements RequestHandler<I, O
} else { } else {
tracer.end(span); tracer.end(span);
} }
OpenTelemetrySdk.getTracerProvider().forceFlush().join(1, TimeUnit.SECONDS); OpenTelemetrySdk.getTracerManagement().forceFlush().join(1, TimeUnit.SECONDS);
} }
} }

View File

@ -64,7 +64,7 @@ public abstract class TracingSQSEventHandler extends TracingRequestHandler<SQSEv
} else { } else {
tracer.end(span); tracer.end(span);
} }
OpenTelemetrySdk.getTracerProvider().forceFlush().join(1, TimeUnit.SECONDS); OpenTelemetrySdk.getTracerManagement().forceFlush().join(1, TimeUnit.SECONDS);
} }
return null; return null;
} }

View File

@ -94,7 +94,7 @@ public final class DropwizardViewInstrumentation extends Instrumenter.Default {
} }
Span span = spanWithScope.getSpan(); Span span = spanWithScope.getSpan();
if (throwable != null) { if (throwable != null) {
span.setStatus(Status.UNKNOWN); span.setStatus(Status.ERROR);
BaseDecorator.addThrowable(span, throwable); BaseDecorator.addThrowable(span, throwable);
} }
span.end(); span.end();

View File

@ -127,7 +127,7 @@ public class GoogleHttpClientInstrumentation extends Instrumenter.Default {
// If HttpRequest.setThrowExceptionOnExecuteError is set to false, there are no exceptions // If HttpRequest.setThrowExceptionOnExecuteError is set to false, there are no exceptions
// for a failed request. Thus, check the response code // for a failed request. Thus, check the response code
if (response != null && !response.isSuccessStatusCode()) { if (response != null && !response.isSuccessStatusCode()) {
span.setStatus(Status.UNKNOWN); span.setStatus(Status.ERROR);
} }
} }
} }

View File

@ -32,23 +32,22 @@ public final class GrpcHelper {
static { static {
EnumMap<Code, CanonicalCode> codeMap = new EnumMap<>(Code.class); EnumMap<Code, CanonicalCode> codeMap = new EnumMap<>(Code.class);
codeMap.put(Code.OK, CanonicalCode.OK); codeMap.put(Code.CANCELLED, CanonicalCode.ERROR);
codeMap.put(Code.CANCELLED, CanonicalCode.CANCELLED); codeMap.put(Code.INVALID_ARGUMENT, CanonicalCode.ERROR);
codeMap.put(Code.INVALID_ARGUMENT, CanonicalCode.INVALID_ARGUMENT); codeMap.put(Code.DEADLINE_EXCEEDED, CanonicalCode.ERROR);
codeMap.put(Code.DEADLINE_EXCEEDED, CanonicalCode.DEADLINE_EXCEEDED); codeMap.put(Code.NOT_FOUND, CanonicalCode.ERROR);
codeMap.put(Code.NOT_FOUND, CanonicalCode.NOT_FOUND); codeMap.put(Code.ALREADY_EXISTS, CanonicalCode.ERROR);
codeMap.put(Code.ALREADY_EXISTS, CanonicalCode.ALREADY_EXISTS); codeMap.put(Code.PERMISSION_DENIED, CanonicalCode.ERROR);
codeMap.put(Code.PERMISSION_DENIED, CanonicalCode.PERMISSION_DENIED); codeMap.put(Code.RESOURCE_EXHAUSTED, CanonicalCode.ERROR);
codeMap.put(Code.RESOURCE_EXHAUSTED, CanonicalCode.RESOURCE_EXHAUSTED); codeMap.put(Code.FAILED_PRECONDITION, CanonicalCode.ERROR);
codeMap.put(Code.FAILED_PRECONDITION, CanonicalCode.FAILED_PRECONDITION); codeMap.put(Code.ABORTED, CanonicalCode.ERROR);
codeMap.put(Code.ABORTED, CanonicalCode.ABORTED); codeMap.put(Code.OUT_OF_RANGE, CanonicalCode.ERROR);
codeMap.put(Code.OUT_OF_RANGE, CanonicalCode.OUT_OF_RANGE); codeMap.put(Code.UNIMPLEMENTED, CanonicalCode.ERROR);
codeMap.put(Code.UNIMPLEMENTED, CanonicalCode.UNIMPLEMENTED); codeMap.put(Code.INTERNAL, CanonicalCode.ERROR);
codeMap.put(Code.INTERNAL, CanonicalCode.INTERNAL); codeMap.put(Code.UNAVAILABLE, CanonicalCode.ERROR);
codeMap.put(Code.UNAVAILABLE, CanonicalCode.UNAVAILABLE); codeMap.put(Code.DATA_LOSS, CanonicalCode.ERROR);
codeMap.put(Code.DATA_LOSS, CanonicalCode.DATA_LOSS); codeMap.put(Code.UNAUTHENTICATED, CanonicalCode.ERROR);
codeMap.put(Code.UNAUTHENTICATED, CanonicalCode.UNAUTHENTICATED); codeMap.put(Code.UNKNOWN, CanonicalCode.ERROR);
codeMap.put(Code.UNKNOWN, CanonicalCode.UNKNOWN);
CODE_MAP = Collections.unmodifiableMap(codeMap); CODE_MAP = Collections.unmodifiableMap(codeMap);
} }
@ -88,7 +87,7 @@ public final class GrpcHelper {
private static CanonicalCode codeFromGrpcCode(Code grpcCode) { private static CanonicalCode codeFromGrpcCode(Code grpcCode) {
CanonicalCode code = CODE_MAP.get(grpcCode); CanonicalCode code = CODE_MAP.get(grpcCode);
return code != null ? code : CanonicalCode.UNKNOWN; return code != null ? code : CanonicalCode.UNSET;
} }
private GrpcHelper() {} private GrpcHelper() {}

View File

@ -27,7 +27,6 @@ import io.grpc.ServerBuilder
import io.grpc.stub.StreamObserver import io.grpc.stub.StreamObserver
import io.opentelemetry.auto.test.AgentTestRunner import io.opentelemetry.auto.test.AgentTestRunner
import io.opentelemetry.auto.test.utils.PortUtils import io.opentelemetry.auto.test.utils.PortUtils
import io.opentelemetry.trace.Status
import io.opentelemetry.trace.attributes.SemanticAttributes import io.opentelemetry.trace.attributes.SemanticAttributes
import java.util.concurrent.CopyOnWriteArrayList import java.util.concurrent.CopyOnWriteArrayList
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -119,7 +118,6 @@ class GrpcStreamingTest extends AgentTestRunner {
spanKind CLIENT spanKind CLIENT
parent() parent()
errored false errored false
status(Status.OK)
attributes { attributes {
"${SemanticAttributes.RPC_SYSTEM.key()}" "grpc" "${SemanticAttributes.RPC_SYSTEM.key()}" "grpc"
"${SemanticAttributes.RPC_SERVICE.key()}" "example.Greeter" "${SemanticAttributes.RPC_SERVICE.key()}" "example.Greeter"
@ -143,7 +141,6 @@ class GrpcStreamingTest extends AgentTestRunner {
spanKind SERVER spanKind SERVER
childOf span(0) childOf span(0)
errored false errored false
status(Status.OK)
attributes { attributes {
"${SemanticAttributes.RPC_SYSTEM.key()}" "grpc" "${SemanticAttributes.RPC_SYSTEM.key()}" "grpc"
"${SemanticAttributes.RPC_SERVICE.key()}" "example.Greeter" "${SemanticAttributes.RPC_SERVICE.key()}" "example.Greeter"

View File

@ -77,7 +77,6 @@ class GrpcTest extends AgentTestRunner {
spanKind CLIENT spanKind CLIENT
childOf span(0) childOf span(0)
errored false errored false
status(io.opentelemetry.trace.Status.OK)
event(0) { event(0) {
eventName "message" eventName "message"
attributes { attributes {
@ -98,7 +97,6 @@ class GrpcTest extends AgentTestRunner {
spanKind SERVER spanKind SERVER
childOf span(1) childOf span(1)
errored false errored false
status(io.opentelemetry.trace.Status.OK)
event(0) { event(0) {
eventName "message" eventName "message"
attributes { attributes {
@ -249,7 +247,6 @@ class GrpcTest extends AgentTestRunner {
errored true errored true
// NB: Exceptions thrown on the server don't appear to be propagated to the client, at // NB: Exceptions thrown on the server don't appear to be propagated to the client, at
// least for the version we test against. // least for the version we test against.
status(io.opentelemetry.trace.Status.UNKNOWN)
attributes { attributes {
"${SemanticAttributes.RPC_SYSTEM.key()}" "grpc" "${SemanticAttributes.RPC_SYSTEM.key()}" "grpc"
"${SemanticAttributes.RPC_SERVICE.key()}" "example.Greeter" "${SemanticAttributes.RPC_SERVICE.key()}" "example.Greeter"

View File

@ -26,7 +26,11 @@ class GrpcHelperTest extends Specification {
def status = GrpcHelper.statusFromGrpcStatus(grpcStatus) def status = GrpcHelper.statusFromGrpcStatus(grpcStatus)
then: then:
status.canonicalCode.name() == grpcStatus.code.name() if (grpcStatus == Status.OK) {
status.canonicalCode == io.opentelemetry.trace.Status.CanonicalCode.UNSET
} else {
status.canonicalCode == io.opentelemetry.trace.Status.CanonicalCode.ERROR
}
status.description == null status.description == null
// Considering history of status, if we compare all values of the gRPC status by name, we will // Considering history of status, if we compare all values of the gRPC status by name, we will
@ -40,7 +44,7 @@ class GrpcHelperTest extends Specification {
def status = GrpcHelper.statusFromGrpcStatus(Status.INVALID_ARGUMENT.withDescription("bad argument")) def status = GrpcHelper.statusFromGrpcStatus(Status.INVALID_ARGUMENT.withDescription("bad argument"))
then: then:
status.canonicalCode == io.opentelemetry.trace.Status.CanonicalCode.INVALID_ARGUMENT status.canonicalCode == io.opentelemetry.trace.Status.CanonicalCode.ERROR
status.description == "bad argument" status.description == "bad argument"
} }
} }

View File

@ -77,8 +77,8 @@ shadowJar {
// relocate OpenTelemetry API usage // relocate OpenTelemetry API usage
relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.javaagent.shaded.io.opentelemetry.OpenTelemetry" relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.javaagent.shaded.io.opentelemetry.OpenTelemetry"
relocate "io.opentelemetry.common", "io.opentelemetry.javaagent.shaded.io.opentelemetry.common" relocate "io.opentelemetry.common", "io.opentelemetry.javaagent.shaded.io.opentelemetry.common"
relocate "io.opentelemetry.baggage", "io.opentelemetry.javaagent.shaded.io.opentelemetry.baggage"
relocate "io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context" relocate "io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context"
relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.javaagent.shaded.io.opentelemetry.correlationcontext"
relocate "io.opentelemetry.internal", "io.opentelemetry.javaagent.shaded.io.opentelemetry.internal" relocate "io.opentelemetry.internal", "io.opentelemetry.javaagent.shaded.io.opentelemetry.internal"
relocate "io.opentelemetry.metrics", "io.opentelemetry.javaagent.shaded.io.opentelemetry.metrics" relocate "io.opentelemetry.metrics", "io.opentelemetry.javaagent.shaded.io.opentelemetry.metrics"
relocate "io.opentelemetry.trace", "io.opentelemetry.javaagent.shaded.io.opentelemetry.trace" relocate "io.opentelemetry.trace", "io.opentelemetry.javaagent.shaded.io.opentelemetry.trace"

View File

@ -39,8 +39,7 @@ public abstract class LettuceAbstractDatabaseClientTracer<QUERY>
@Override @Override
public Span onConnection(Span span, RedisURI connection) { public Span onConnection(Span span, RedisURI connection) {
if (connection != null && connection.getDatabase() != 0) { if (connection != null && connection.getDatabase() != 0) {
span.setAttribute( span.setAttribute(SemanticAttributes.REDIS_DATABASE_INDEX, connection.getDatabase());
SemanticAttributes.REDIS_DATABASE_INDEX, String.valueOf(connection.getDatabase()));
} }
return super.onConnection(span, connection); return super.onConnection(span, connection);
} }

View File

@ -43,8 +43,7 @@ public abstract class LettuceAbstractDatabaseClientTracer<QUERY>
@Override @Override
public Span onConnection(Span span, RedisURI connection) { public Span onConnection(Span span, RedisURI connection) {
if (connection != null && connection.getDatabase() != 0) { if (connection != null && connection.getDatabase() != 0) {
span.setAttribute( span.setAttribute(SemanticAttributes.REDIS_DATABASE_INDEX, connection.getDatabase());
SemanticAttributes.REDIS_DATABASE_INDEX, String.valueOf(connection.getDatabase()));
} }
return super.onConnection(span, connection); return super.onConnection(span, connection);
} }

View File

@ -154,7 +154,7 @@ public enum OpenTelemetryTracing implements Tracing {
@Nullable private List<Object> events; @Nullable private List<Object> events;
@Nullable private Status status; @Nullable private Throwable error;
@Nullable private Span span; @Nullable private Span span;
@ -208,9 +208,10 @@ public enum OpenTelemetryTracing implements Tracing {
events = null; events = null;
} }
if (status != null) { if (error != null) {
span.setStatus(status); span.setStatus(Status.ERROR);
status = null; span.recordException(error);
error = null;
} }
return this; return this;
@ -247,13 +248,10 @@ public enum OpenTelemetryTracing implements Tracing {
@Override @Override
public synchronized Tracer.Span error(Throwable throwable) { public synchronized Tracer.Span error(Throwable throwable) {
// TODO(anuraaga): Check if any lettuce exceptions map well to a Status and try mapping.
Status status =
Status.UNKNOWN.withDescription(throwable.getClass() + ": " + throwable.getMessage());
if (span != null) { if (span != null) {
span.setStatus(status); span.recordException(throwable);
} else { } else {
this.status = status; this.error = throwable;
} }
return this; return this;
} }

View File

@ -23,8 +23,8 @@ import static net.bytebuddy.matcher.ElementMatchers.named;
import static net.bytebuddy.matcher.ElementMatchers.takesArguments; import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
import application.io.grpc.Context; import application.io.grpc.Context;
import application.io.opentelemetry.correlationcontext.CorrelationContext;
import com.google.auto.service.AutoService; import com.google.auto.service.AutoService;
import io.opentelemetry.baggage.Baggage;
import io.opentelemetry.javaagent.tooling.Instrumenter; import io.opentelemetry.javaagent.tooling.Instrumenter;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -33,30 +33,26 @@ import net.bytebuddy.description.method.MethodDescription;
import net.bytebuddy.description.type.TypeDescription; import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.matcher.ElementMatcher; import net.bytebuddy.matcher.ElementMatcher;
// TODO: Actually bridge correlation context. We currently just stub out withCorrelationContext // TODO: Actually bridge correlation context. We currently just stub out withBaggage
// to have minimum functionality with SDK shim implementations. // to have minimum functionality with SDK shim implementations.
// https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/973 // https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/973
@AutoService(Instrumenter.class) @AutoService(Instrumenter.class)
public class CorrelationsContextUtilsInstrumentation extends AbstractInstrumentation { public class BaggageUtilsInstrumentation extends AbstractInstrumentation {
@Override @Override
public ElementMatcher<? super TypeDescription> typeMatcher() { public ElementMatcher<? super TypeDescription> typeMatcher() {
return named("application.io.opentelemetry.correlationcontext.CorrelationsContextUtils"); return named("application.io.opentelemetry.baggage.BaggageUtils");
} }
@Override @Override
public Map<? extends ElementMatcher<? super MethodDescription>, String> transformers() { public Map<? extends ElementMatcher<? super MethodDescription>, String> transformers() {
Map<ElementMatcher<? super MethodDescription>, String> transformers = new HashMap<>(); Map<ElementMatcher<? super MethodDescription>, String> transformers = new HashMap<>();
transformers.put( transformers.put(
isMethod() isMethod().and(isPublic()).and(isStatic()).and(named("withBaggage")).and(takesArguments(2)),
.and(isPublic()) BaggageUtilsInstrumentation.class.getName() + "$WithBaggageAdvice");
.and(isStatic())
.and(named("withCorrelationContext"))
.and(takesArguments(2)),
CorrelationsContextUtilsInstrumentation.class.getName() + "$WithCorrelationContextAdvice");
return transformers; return transformers;
} }
public static class WithCorrelationContextAdvice { public static class WithBaggageAdvice {
@Advice.OnMethodEnter(skipOn = Advice.OnDefaultValue.class) @Advice.OnMethodEnter(skipOn = Advice.OnDefaultValue.class)
public static Object onEnter() { public static Object onEnter() {
@ -65,7 +61,7 @@ public class CorrelationsContextUtilsInstrumentation extends AbstractInstrumenta
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class) @Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
public static void methodExit( public static void methodExit(
@Advice.Argument(0) CorrelationContext applicationCorrelationContext, @Advice.Argument(0) Baggage applicationBaggage,
@Advice.Argument(1) Context applicationContext, @Advice.Argument(1) Context applicationContext,
@Advice.Return(readOnly = false) Context applicationUpdatedContext) { @Advice.Return(readOnly = false) Context applicationUpdatedContext) {
applicationUpdatedContext = applicationContext; applicationUpdatedContext = applicationContext;

View File

@ -23,8 +23,6 @@ import application.io.grpc.Context;
import application.io.opentelemetry.common.AttributeKey; import application.io.opentelemetry.common.AttributeKey;
import application.io.opentelemetry.common.Attributes; import application.io.opentelemetry.common.Attributes;
import application.io.opentelemetry.trace.EndSpanOptions; import application.io.opentelemetry.trace.EndSpanOptions;
import application.io.opentelemetry.trace.Event;
import application.io.opentelemetry.trace.Link;
import application.io.opentelemetry.trace.Span; import application.io.opentelemetry.trace.Span;
import application.io.opentelemetry.trace.SpanContext; import application.io.opentelemetry.trace.SpanContext;
import application.io.opentelemetry.trace.Status; import application.io.opentelemetry.trace.Status;
@ -92,16 +90,6 @@ class ApplicationSpan implements Span {
agentSpan.addEvent(name, Bridging.toAgent(applicationAttributes), timestamp); agentSpan.addEvent(name, Bridging.toAgent(applicationAttributes), timestamp);
} }
@Override
public void addEvent(Event applicationEvent) {
addEvent(applicationEvent.getName(), applicationEvent.getAttributes());
}
@Override
public void addEvent(Event applicationEvent, long timestamp) {
addEvent(applicationEvent.getName(), applicationEvent.getAttributes(), timestamp);
}
@Override @Override
public void setStatus(Status applicationStatus) { public void setStatus(Status applicationStatus) {
io.opentelemetry.trace.Status agentStatus = Bridging.toAgentOrNull(applicationStatus); io.opentelemetry.trace.Status agentStatus = Bridging.toAgentOrNull(applicationStatus);
@ -192,14 +180,6 @@ class ApplicationSpan implements Span {
return this; return this;
} }
@Override
public Span.Builder addLink(Link applicationLink) {
agentBuilder.addLink(
Bridging.toAgent(applicationLink.getContext()),
Bridging.toAgent(applicationLink.getAttributes()));
return this;
}
@Override @Override
public Span.Builder setAttribute(String key, String value) { public Span.Builder setAttribute(String key, String value) {
agentBuilder.setAttribute(key, value); agentBuilder.setAttribute(key, value);

View File

@ -14,11 +14,11 @@
* limitations under the License. * limitations under the License.
*/ */
import static io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type.MONOTONIC_DOUBLE import static io.opentelemetry.sdk.metrics.data.MetricData.Type.MONOTONIC_DOUBLE
import static io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type.MONOTONIC_LONG import static io.opentelemetry.sdk.metrics.data.MetricData.Type.MONOTONIC_LONG
import static io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type.NON_MONOTONIC_DOUBLE import static io.opentelemetry.sdk.metrics.data.MetricData.Type.NON_MONOTONIC_DOUBLE
import static io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type.NON_MONOTONIC_LONG import static io.opentelemetry.sdk.metrics.data.MetricData.Type.NON_MONOTONIC_LONG
import static io.opentelemetry.sdk.metrics.data.MetricData.Descriptor.Type.SUMMARY import static io.opentelemetry.sdk.metrics.data.MetricData.Type.SUMMARY
import application.io.opentelemetry.OpenTelemetry import application.io.opentelemetry.OpenTelemetry
import application.io.opentelemetry.common.Labels import application.io.opentelemetry.common.Labels
@ -54,9 +54,9 @@ class MeterTest extends AgentTestRunner {
then: then:
def metricData = findMetric(OpenTelemetrySdk.getMeterProvider().getMetricProducer().collectAllMetrics(), instrumentationName, "test") def metricData = findMetric(OpenTelemetrySdk.getMeterProvider().getMetricProducer().collectAllMetrics(), instrumentationName, "test")
metricData != null metricData != null
metricData.descriptor.description == "d" metricData.description == "d"
metricData.descriptor.unit == "u" metricData.unit == "u"
metricData.descriptor.type == expectedType metricData.type == expectedType
metricData.instrumentationLibraryInfo.name == instrumentationName metricData.instrumentationLibraryInfo.name == instrumentationName
metricData.instrumentationLibraryInfo.version == "1.2.3" metricData.instrumentationLibraryInfo.version == "1.2.3"
metricData.points.size() == 1 metricData.points.size() == 1
@ -105,9 +105,9 @@ class MeterTest extends AgentTestRunner {
then: then:
def metricData = findMetric(OpenTelemetrySdk.getMeterProvider().getMetricProducer().collectAllMetrics(), instrumentationName, "test") def metricData = findMetric(OpenTelemetrySdk.getMeterProvider().getMetricProducer().collectAllMetrics(), instrumentationName, "test")
metricData != null metricData != null
metricData.descriptor.description == "d" metricData.description == "d"
metricData.descriptor.unit == "u" metricData.unit == "u"
metricData.descriptor.type == SUMMARY metricData.type == SUMMARY
metricData.instrumentationLibraryInfo.name == instrumentationName metricData.instrumentationLibraryInfo.name == instrumentationName
metricData.instrumentationLibraryInfo.version == "1.2.3" metricData.instrumentationLibraryInfo.version == "1.2.3"
metricData.points.size() == 1 metricData.points.size() == 1
@ -186,9 +186,9 @@ class MeterTest extends AgentTestRunner {
then: then:
def metricData = findMetric(OpenTelemetrySdk.getMeterProvider().getMetricProducer().collectAllMetrics(), instrumentationName, "test") def metricData = findMetric(OpenTelemetrySdk.getMeterProvider().getMetricProducer().collectAllMetrics(), instrumentationName, "test")
metricData != null metricData != null
metricData.descriptor.description == "d" metricData.description == "d"
metricData.descriptor.unit == "u" metricData.unit == "u"
metricData.descriptor.type == expectedType metricData.type == expectedType
metricData.instrumentationLibraryInfo.name == instrumentationName metricData.instrumentationLibraryInfo.name == instrumentationName
metricData.instrumentationLibraryInfo.version == "1.2.3" metricData.instrumentationLibraryInfo.version == "1.2.3"
metricData.points.size() == 1 metricData.points.size() == 1
@ -238,9 +238,9 @@ class MeterTest extends AgentTestRunner {
then: then:
def metricData = findMetric(allMetrics, instrumentationName, "test") def metricData = findMetric(allMetrics, instrumentationName, "test")
metricData != null metricData != null
metricData.descriptor.description == "d" metricData.description == "d"
metricData.descriptor.unit == "u" metricData.unit == "u"
metricData.descriptor.type == MONOTONIC_LONG metricData.type == MONOTONIC_LONG
metricData.instrumentationLibraryInfo.name == instrumentationName metricData.instrumentationLibraryInfo.name == instrumentationName
metricData.instrumentationLibraryInfo.version == "1.2.3" metricData.instrumentationLibraryInfo.version == "1.2.3"
metricData.points.size() == 1 metricData.points.size() == 1
@ -250,9 +250,9 @@ class MeterTest extends AgentTestRunner {
def metricData2 = findMetric(allMetrics, instrumentationName, "test2") def metricData2 = findMetric(allMetrics, instrumentationName, "test2")
metricData2 != null metricData2 != null
metricData2.descriptor.description == "d" metricData2.description == "d"
metricData2.descriptor.unit == "u" metricData2.unit == "u"
metricData2.descriptor.type == SUMMARY metricData2.type == SUMMARY
metricData2.instrumentationLibraryInfo.name == instrumentationName metricData2.instrumentationLibraryInfo.name == instrumentationName
metricData2.instrumentationLibraryInfo.version == "1.2.3" metricData2.instrumentationLibraryInfo.version == "1.2.3"
metricData2.points.size() == 1 metricData2.points.size() == 1
@ -264,7 +264,7 @@ class MeterTest extends AgentTestRunner {
def findMetric(Collection<MetricData> allMetrics, instrumentationName, metricName) { def findMetric(Collection<MetricData> allMetrics, instrumentationName, metricName) {
for (def metric : allMetrics) { for (def metric : allMetrics) {
if (metric.instrumentationLibraryInfo.name == instrumentationName && metric.descriptor.name == metricName) { if (metric.instrumentationLibraryInfo.name == instrumentationName && metric.name == metricName) {
return metric return metric
} }
} }

View File

@ -22,7 +22,7 @@ class TracerSdkTest extends AgentTestRunner {
def "direct access to sdk should not fail"() { def "direct access to sdk should not fail"() {
when: when:
def provider = OpenTelemetrySdk.getTracerProvider() def provider = OpenTelemetrySdk.getTracerManagement()
then: then:
provider instanceof TracerSdkProvider provider instanceof TracerSdkProvider

View File

@ -41,7 +41,7 @@ class TracerTest extends AgentTestRunner {
testSpan.setAttribute("long", 2) testSpan.setAttribute("long", 2)
testSpan.setAttribute("double", 3.0) testSpan.setAttribute("double", 3.0)
testSpan.setAttribute("boolean", true) testSpan.setAttribute("boolean", true)
testSpan.setStatus(Status.UNKNOWN) testSpan.setStatus(Status.ERROR)
testSpan.end() testSpan.end()
then: then:
@ -51,7 +51,7 @@ class TracerTest extends AgentTestRunner {
operationName "test" operationName "test"
spanKind io.opentelemetry.trace.Span.Kind.PRODUCER spanKind io.opentelemetry.trace.Span.Kind.PRODUCER
parent() parent()
status io.opentelemetry.trace.Status.UNKNOWN status io.opentelemetry.trace.Status.ERROR
attributes { attributes {
"string" "1" "string" "1"
"long" 2 "long" 2

View File

@ -31,7 +31,7 @@ public class ErrorHandlerAdvice {
Optional<Span> span = ctx.maybeGet(Span.class); Optional<Span> span = ctx.maybeGet(Span.class);
if (span.isPresent()) { if (span.isPresent()) {
// TODO this emulates old behaviour of BaseDecorator. Has to review // TODO this emulates old behaviour of BaseDecorator. Has to review
span.get().setStatus(Status.UNKNOWN); span.get().setStatus(Status.ERROR);
TRACER.addThrowable(span.get(), throwable); TRACER.addThrowable(span.get(), throwable);
} }
} }

View File

@ -64,7 +64,7 @@ public class Servlet3HttpServerTracer extends ServletHttpServerTracer<HttpServle
} }
public void onTimeout(Span span, long timeout) { public void onTimeout(Span span, long timeout) {
span.setStatus(Status.DEADLINE_EXCEEDED); span.setStatus(Status.ERROR);
span.setAttribute("timeout", timeout); span.setAttribute("timeout", timeout);
span.end(); span.end();
} }

View File

@ -111,7 +111,7 @@ public class OtelConfig {
Tracer tracer = OpenTelemetry.getTracer(tracerName); Tracer tracer = OpenTelemetry.getTracer(tracerName);
SpanProcessor logProcessor = SimpleSpanProcessor.newBuilder(new LoggingSpanExporter()).build(); SpanProcessor logProcessor = SimpleSpanProcessor.newBuilder(new LoggingSpanExporter()).build();
OpenTelemetrySdk.getTracerProvider().addSpanProcessor(logProcessor); OpenTelemetrySdk.getTracerManagement().addSpanProcessor(logProcessor);
return tracer; return tracer;
} }
@ -130,7 +130,7 @@ SpanProcessor jaegerProcessor = SimpleSpanProcessor
.setChannel(ManagedChannelBuilder.forAddress("localhost", 14250).usePlaintext().build()) .setChannel(ManagedChannelBuilder.forAddress("localhost", 14250).usePlaintext().build())
.build()) .build())
.build(); .build();
OpenTelemetrySdk.getTracerProvider().addSpanProcessor(jaegerProcessor); OpenTelemetrySdk.getTracerManagement().addSpanProcessor(jaegerProcessor);
``` ```
### Project Background ### Project Background

View File

@ -36,8 +36,7 @@ import org.springframework.context.annotation.Configuration;
/** /**
* Create {@link io.opentelemetry.trace.Tracer} bean if bean is missing. * Create {@link io.opentelemetry.trace.Tracer} bean if bean is missing.
* *
* <p>Adds span exporter beans to the active tracer provider {@code * <p>Adds span exporter beans to the active tracer provider.
* OpenTelemetrySdk.getTracerProvider()}
* *
* <p>Updates the sampler probability in the active {@link TraceConfig} * <p>Updates the sampler probability in the active {@link TraceConfig}
*/ */
@ -69,18 +68,18 @@ public class TracerAutoConfiguration {
.map(spanExporter -> SimpleSpanProcessor.newBuilder(spanExporter).build()) .map(spanExporter -> SimpleSpanProcessor.newBuilder(spanExporter).build())
.collect(Collectors.toList()); .collect(Collectors.toList());
OpenTelemetrySdk.getTracerProvider() OpenTelemetrySdk.getTracerManagement()
.addSpanProcessor(MultiSpanProcessor.create(spanProcessors)); .addSpanProcessor(MultiSpanProcessor.create(spanProcessors));
} }
private void setSampler(TracerProperties tracerProperties) { private void setSampler(TracerProperties tracerProperties) {
TraceConfig updatedTraceConfig = TraceConfig updatedTraceConfig =
OpenTelemetrySdk.getTracerProvider() OpenTelemetrySdk.getTracerManagement()
.getActiveTraceConfig() .getActiveTraceConfig()
.toBuilder() .toBuilder()
.setSampler(Samplers.traceIdRatioBased(tracerProperties.getSamplerProbability())) .setSampler(Samplers.traceIdRatioBased(tracerProperties.getSamplerProbability()))
.build(); .build();
OpenTelemetrySdk.getTracerProvider().updateActiveTraceConfig(updatedTraceConfig); OpenTelemetrySdk.getTracerManagement().updateActiveTraceConfig(updatedTraceConfig);
} }
} }

View File

@ -57,7 +57,7 @@ public class WithSpanAspect {
try (Scope scope = tracer.withSpan(span)) { try (Scope scope = tracer.withSpan(span)) {
return pjp.proceed(); return pjp.proceed();
} catch (Throwable t) { } catch (Throwable t) {
span.setStatus(Status.INTERNAL); span.setStatus(Status.ERROR);
span.recordException(t); span.recordException(t);
throw t; throw t;
} finally { } finally {

View File

@ -91,7 +91,7 @@ public class AdviceUtils {
if (context != null) { if (context != null) {
Span span = TracingContextUtils.getSpan(context); Span span = TracingContextUtils.getSpan(context);
if (throwable != null) { if (throwable != null) {
span.setStatus(Status.UNKNOWN); span.setStatus(Status.ERROR);
BaseDecorator.addThrowable(span, throwable); BaseDecorator.addThrowable(span, throwable);
} }
span.end(); span.end();

View File

@ -58,8 +58,8 @@ shadowJar {
// relocate OpenTelemetry API usage // relocate OpenTelemetry API usage
relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.javaagent.shaded.io.opentelemetry.OpenTelemetry" relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.javaagent.shaded.io.opentelemetry.OpenTelemetry"
relocate "io.opentelemetry.common", "io.opentelemetry.javaagent.shaded.io.opentelemetry.common" relocate "io.opentelemetry.common", "io.opentelemetry.javaagent.shaded.io.opentelemetry.common"
relocate "io.opentelemetry.baggage", "io.opentelemetry.javaagent.shaded.io.opentelemetry.baggage"
relocate "io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context" relocate "io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context"
relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.javaagent.shaded.io.opentelemetry.correlationcontext"
relocate "io.opentelemetry.internal", "io.opentelemetry.javaagent.shaded.io.opentelemetry.internal" relocate "io.opentelemetry.internal", "io.opentelemetry.javaagent.shaded.io.opentelemetry.internal"
relocate "io.opentelemetry.metrics", "io.opentelemetry.javaagent.shaded.io.opentelemetry.metrics" relocate "io.opentelemetry.metrics", "io.opentelemetry.javaagent.shaded.io.opentelemetry.metrics"
relocate "io.opentelemetry.trace", "io.opentelemetry.javaagent.shaded.io.opentelemetry.trace" relocate "io.opentelemetry.trace", "io.opentelemetry.javaagent.shaded.io.opentelemetry.trace"

View File

@ -17,6 +17,7 @@
package io.opentelemetry.javaagent.spi; package io.opentelemetry.javaagent.spi;
import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.ContextPropagators;
import io.opentelemetry.sdk.trace.TracerSdkManagement;
import io.opentelemetry.sdk.trace.TracerSdkProvider; import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.sdk.trace.config.TraceConfig; import io.opentelemetry.sdk.trace.config.TraceConfig;
@ -35,5 +36,5 @@ import io.opentelemetry.sdk.trace.config.TraceConfig;
public interface TracerCustomizer { public interface TracerCustomizer {
/** Callback executed after the initial {@link TracerSdkProvider} has been initialized. */ /** Callback executed after the initial {@link TracerSdkProvider} has been initialized. */
void configure(TracerSdkProvider tracerSdkProvider); void configure(TracerSdkManagement tracerManagement);
} }

View File

@ -108,7 +108,7 @@ public class AgentInstaller {
new ForceFlusher() { new ForceFlusher() {
@Override @Override
public void run(int timeout, TimeUnit unit) { public void run(int timeout, TimeUnit unit) {
OpenTelemetrySdk.getTracerProvider().forceFlush().join(timeout, unit); OpenTelemetrySdk.getTracerManagement().forceFlush().join(timeout, unit);
} }
}); });

View File

@ -46,12 +46,12 @@ public class ExporterClassLoader extends URLClassLoader {
rule( rule(
"#io.opentelemetry.common", "#io.opentelemetry.common",
"#io.opentelemetry.javaagent.shaded.io.opentelemetry.common"), "#io.opentelemetry.javaagent.shaded.io.opentelemetry.common"),
rule(
"#io.opentelemetry.baggage",
"#io.opentelemetry.javaagent.shaded.io.opentelemetry.baggage"),
rule( rule(
"#io.opentelemetry.context", "#io.opentelemetry.context",
"#io.opentelemetry.javaagent.shaded.io.opentelemetry.context"), "#io.opentelemetry.javaagent.shaded.io.opentelemetry.context"),
rule(
"#io.opentelemetry.correlationcontext",
"#io.opentelemetry.javaagent.shaded.io.opentelemetry.correlationcontext"),
rule( rule(
"#io.opentelemetry.internal", "#io.opentelemetry.internal",
"#io.opentelemetry.javaagent.shaded.io.opentelemetry.internal"), "#io.opentelemetry.javaagent.shaded.io.opentelemetry.internal"),

View File

@ -58,6 +58,12 @@ public class PropagatorsInitializer {
public static void initializePropagators(List<String> propagators) { public static void initializePropagators(List<String> propagators) {
/* Only override the default propagators *if* the user specified any. */ /* Only override the default propagators *if* the user specified any. */
if (propagators.size() == 0) { if (propagators.size() == 0) {
// TODO this is probably temporary until default propagators are supplied by SDK
// https://github.com/open-telemetry/opentelemetry-java/issues/1742
OpenTelemetry.setPropagators(
DefaultContextPropagators.builder()
.addTextMapPropagator(HttpTraceContext.getInstance())
.build());
return; return;
} }

View File

@ -23,7 +23,7 @@ import io.opentelemetry.javaagent.spi.exporter.SpanExporterFactory;
import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.metrics.export.IntervalMetricReader; import io.opentelemetry.sdk.metrics.export.IntervalMetricReader;
import io.opentelemetry.sdk.metrics.export.MetricExporter; import io.opentelemetry.sdk.metrics.export.MetricExporter;
import io.opentelemetry.sdk.trace.TracerSdkProvider; import io.opentelemetry.sdk.trace.TracerSdkManagement;
import io.opentelemetry.sdk.trace.config.TraceConfig; import io.opentelemetry.sdk.trace.config.TraceConfig;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor; import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.sdk.trace.export.SpanExporter; import io.opentelemetry.sdk.trace.export.SpanExporter;
@ -166,7 +166,7 @@ public class TracerInstaller {
SpanExporter spanExporter = spanExporterFactory.fromConfig(config); SpanExporter spanExporter = spanExporterFactory.fromConfig(config);
BatchSpanProcessor spanProcessor = BatchSpanProcessor spanProcessor =
BatchSpanProcessor.newBuilder(spanExporter).readProperties(config).build(); BatchSpanProcessor.newBuilder(spanExporter).readProperties(config).build();
OpenTelemetrySdk.getTracerProvider().addSpanProcessor(spanProcessor); OpenTelemetrySdk.getTracerManagement().addSpanProcessor(spanProcessor);
log.info("Installed span exporter: " + spanExporter.getClass().getName()); log.info("Installed span exporter: " + spanExporter.getClass().getName());
} }
@ -186,21 +186,21 @@ public class TracerInstaller {
} }
private static void configure(Properties config) { private static void configure(Properties config) {
TracerSdkProvider tracerSdkProvider = OpenTelemetrySdk.getTracerProvider(); TracerSdkManagement tracerManagement = OpenTelemetrySdk.getTracerManagement();
// Register additional thread details logging span processor // Register additional thread details logging span processor
tracerSdkProvider.addSpanProcessor(new AddThreadDetailsSpanProcessor()); tracerManagement.addSpanProcessor(new AddThreadDetailsSpanProcessor());
// Execute any user-provided (usually vendor-provided) configuration logic. // Execute any user-provided (usually vendor-provided) configuration logic.
ServiceLoader<TracerCustomizer> serviceLoader = ServiceLoader<TracerCustomizer> serviceLoader =
ServiceLoader.load(TracerCustomizer.class, TracerInstaller.class.getClassLoader()); ServiceLoader.load(TracerCustomizer.class, TracerInstaller.class.getClassLoader());
for (TracerCustomizer customizer : serviceLoader) { for (TracerCustomizer customizer : serviceLoader) {
customizer.configure(tracerSdkProvider); customizer.configure(tracerManagement);
} }
/* Update trace config from env vars or sys props */ /* Update trace config from env vars or sys props */
TraceConfig activeTraceConfig = tracerSdkProvider.getActiveTraceConfig(); TraceConfig activeTraceConfig = tracerManagement.getActiveTraceConfig();
tracerSdkProvider.updateActiveTraceConfig( tracerManagement.updateActiveTraceConfig(
activeTraceConfig.toBuilder().readProperties(config).build()); activeTraceConfig.toBuilder().readProperties(config).build());
} }

View File

@ -19,7 +19,6 @@ package io.opentelemetry.javaagent.typed.base;
import io.opentelemetry.common.AttributeKey; import io.opentelemetry.common.AttributeKey;
import io.opentelemetry.common.Attributes; import io.opentelemetry.common.Attributes;
import io.opentelemetry.trace.EndSpanOptions; import io.opentelemetry.trace.EndSpanOptions;
import io.opentelemetry.trace.Event;
import io.opentelemetry.trace.Span; import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanContext; import io.opentelemetry.trace.SpanContext;
import io.opentelemetry.trace.Status; import io.opentelemetry.trace.Status;
@ -77,16 +76,6 @@ public class DelegatingSpan implements Span {
delegate.addEvent(name, attributes, timestamp); delegate.addEvent(name, attributes, timestamp);
} }
@Override
public void addEvent(Event event) {
delegate.addEvent(event);
}
@Override
public void addEvent(Event event, long timestamp) {
delegate.addEvent(event, timestamp);
}
@Override @Override
public void setStatus(Status status) { public void setStatus(Status status) {
delegate.setStatus(status); delegate.setStatus(status);

View File

@ -89,8 +89,8 @@ tasks.withType(ShadowJar).configureEach {
// relocate OpenTelemetry API // relocate OpenTelemetry API
relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.javaagent.shaded.io.opentelemetry.OpenTelemetry" relocate "io.opentelemetry.OpenTelemetry", "io.opentelemetry.javaagent.shaded.io.opentelemetry.OpenTelemetry"
relocate "io.opentelemetry.common", "io.opentelemetry.javaagent.shaded.io.opentelemetry.common" relocate "io.opentelemetry.common", "io.opentelemetry.javaagent.shaded.io.opentelemetry.common"
relocate "io.opentelemetry.baggage", "io.opentelemetry.javaagent.shaded.io.opentelemetry.baggage"
relocate "io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context" relocate "io.opentelemetry.context", "io.opentelemetry.javaagent.shaded.io.opentelemetry.context"
relocate "io.opentelemetry.correlationcontext", "io.opentelemetry.javaagent.shaded.io.opentelemetry.correlationcontext"
relocate "io.opentelemetry.internal", "io.opentelemetry.javaagent.shaded.io.opentelemetry.internal" relocate "io.opentelemetry.internal", "io.opentelemetry.javaagent.shaded.io.opentelemetry.internal"
relocate "io.opentelemetry.metrics", "io.opentelemetry.javaagent.shaded.io.opentelemetry.metrics" relocate "io.opentelemetry.metrics", "io.opentelemetry.javaagent.shaded.io.opentelemetry.metrics"
relocate "io.opentelemetry.trace", "io.opentelemetry.javaagent.shaded.io.opentelemetry.trace" relocate "io.opentelemetry.trace", "io.opentelemetry.javaagent.shaded.io.opentelemetry.trace"

View File

@ -27,6 +27,7 @@ import groovy.transform.stc.ClosureParams;
import groovy.transform.stc.SimpleType; import groovy.transform.stc.SimpleType;
import io.opentelemetry.OpenTelemetry; import io.opentelemetry.OpenTelemetry;
import io.opentelemetry.auto.test.asserts.InMemoryExporterAssert; import io.opentelemetry.auto.test.asserts.InMemoryExporterAssert;
import io.opentelemetry.context.propagation.DefaultContextPropagators;
import io.opentelemetry.javaagent.tooling.AgentInstaller; import io.opentelemetry.javaagent.tooling.AgentInstaller;
import io.opentelemetry.javaagent.tooling.Instrumenter; import io.opentelemetry.javaagent.tooling.Instrumenter;
import io.opentelemetry.javaagent.tooling.config.ConfigInitializer; import io.opentelemetry.javaagent.tooling.config.ConfigInitializer;
@ -34,6 +35,7 @@ import io.opentelemetry.javaagent.tooling.matcher.AdditionalLibraryIgnoresMatche
import io.opentelemetry.sdk.OpenTelemetrySdk; import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.data.SpanData; import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Tracer; import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.propagation.HttpTraceContext;
import java.lang.instrument.ClassFileTransformer; import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation; import java.lang.instrument.Instrumentation;
import java.util.ArrayList; import java.util.ArrayList;
@ -108,7 +110,21 @@ public abstract class AgentTestRunner extends Specification {
((Logger) LoggerFactory.getLogger("io.opentelemetry")).setLevel(Level.DEBUG); ((Logger) LoggerFactory.getLogger("io.opentelemetry")).setLevel(Level.DEBUG);
TEST_WRITER = new InMemoryExporter(); TEST_WRITER = new InMemoryExporter();
OpenTelemetrySdk.getTracerProvider().addSpanProcessor(TEST_WRITER); // TODO this is probably temporary until default propagators are supplied by SDK
// https://github.com/open-telemetry/opentelemetry-java/issues/1742
// currently checking against no-op implementation so that it won't override aws-lambda
// propagator configuration
if (OpenTelemetry.getPropagators()
.getTextMapPropagator()
.getClass()
.getSimpleName()
.equals("NoopTextMapPropagator")) {
OpenTelemetry.setPropagators(
DefaultContextPropagators.builder()
.addTextMapPropagator(HttpTraceContext.getInstance())
.build());
}
OpenTelemetrySdk.getTracerManagement().addSpanProcessor(TEST_WRITER);
TEST_TRACER = OpenTelemetry.getTracer("io.opentelemetry.auto"); TEST_TRACER = OpenTelemetry.getTracer("io.opentelemetry.auto");
} }

View File

@ -20,9 +20,12 @@ import com.google.common.base.Predicate
import com.google.common.base.Predicates import com.google.common.base.Predicates
import groovy.transform.stc.ClosureParams import groovy.transform.stc.ClosureParams
import groovy.transform.stc.SimpleType import groovy.transform.stc.SimpleType
import io.opentelemetry.OpenTelemetry
import io.opentelemetry.auto.test.asserts.InMemoryExporterAssert import io.opentelemetry.auto.test.asserts.InMemoryExporterAssert
import io.opentelemetry.context.propagation.DefaultContextPropagators
import io.opentelemetry.sdk.OpenTelemetrySdk import io.opentelemetry.sdk.OpenTelemetrySdk
import io.opentelemetry.sdk.trace.data.SpanData import io.opentelemetry.sdk.trace.data.SpanData
import io.opentelemetry.trace.propagation.HttpTraceContext
import org.junit.Before import org.junit.Before
import spock.lang.Specification import spock.lang.Specification
@ -36,7 +39,16 @@ abstract class InstrumentationTestRunner extends Specification {
static { static {
TEST_WRITER = new InMemoryExporter() TEST_WRITER = new InMemoryExporter()
OpenTelemetrySdk.getTracerProvider().addSpanProcessor(TEST_WRITER) // TODO this is probably temporary until default propagators are supplied by SDK
// https://github.com/open-telemetry/opentelemetry-java/issues/1742
// currently checking against no-op implementation so that it won't override aws-lambda
// propagator configuration
if (OpenTelemetry.getPropagators().getTextMapPropagator().getClass().getSimpleName() == "NoopTextMapPropagator") {
OpenTelemetry.setPropagators(DefaultContextPropagators.builder()
.addTextMapPropagator(HttpTraceContext.getInstance())
.build())
}
OpenTelemetrySdk.getTracerManagement().addSpanProcessor(TEST_WRITER)
} }
@Before @Before

View File

@ -17,13 +17,13 @@
package io.opentelemetry.auto.test.asserts package io.opentelemetry.auto.test.asserts
import static AttributesAssert.assertAttributes import static AttributesAssert.assertAttributes
import static io.opentelemetry.sdk.trace.data.SpanData.Event
import groovy.transform.stc.ClosureParams import groovy.transform.stc.ClosureParams
import groovy.transform.stc.SimpleType import groovy.transform.stc.SimpleType
import io.opentelemetry.common.AttributeConsumer import io.opentelemetry.common.AttributeConsumer
import io.opentelemetry.common.AttributeKey import io.opentelemetry.common.AttributeKey
import io.opentelemetry.common.Attributes import io.opentelemetry.common.Attributes
import io.opentelemetry.trace.Event
class EventAssert { class EventAssert {
private final Event event private final Event event

View File

@ -140,9 +140,10 @@ class SpanAssert {
def errored(boolean errored) { def errored(boolean errored) {
if (errored) { if (errored) {
assert span.status != Status.OK // comparing only canonical code, since description may be different
assert span.status.canonicalCode == Status.CanonicalCode.ERROR
} else { } else {
assert span.status == Status.OK assert span.status == Status.UNSET
} }
checked.status = true checked.status = true
} }