Skip to content

Commit 1934a3f

Browse files
authored
Merge branch 'master' into adrien.boitreaud/fix-muzzle-mismatch
2 parents 2f70c92 + d86fe55 commit 1934a3f

File tree

11 files changed

+43
-18
lines changed

11 files changed

+43
-18
lines changed

.gitlab-ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -438,6 +438,7 @@ check_smoke:
438438
parallel: 4
439439
variables:
440440
GRADLE_TARGET: ":smokeCheck"
441+
CACHE_TYPE: "smoke"
441442

442443
check_profiling:
443444
extends: .check_job
@@ -647,7 +648,7 @@ test_flaky:
647648
extends: .test_job_with_test_agent
648649
variables:
649650
GRADLE_PARAMS: "-PrunFlakyTests"
650-
CACHE_TYPE: "base"
651+
CACHE_TYPE: "smoke"
651652
testJvm: "8"
652653
CONTINUE_ON_FAILURE: "true"
653654
rules:

dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpan.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper;
1818
import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities;
1919
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
20+
import datadog.trace.bootstrap.instrumentation.api.SpanWrapper;
2021
import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan;
2122
import io.opentelemetry.api.common.AttributeKey;
2223
import io.opentelemetry.api.common.Attributes;
@@ -31,7 +32,7 @@
3132
import javax.annotation.ParametersAreNonnullByDefault;
3233

3334
@ParametersAreNonnullByDefault
34-
public class OtelSpan implements Span, WithAgentSpan {
35+
public class OtelSpan implements Span, WithAgentSpan, SpanWrapper {
3536
private final AgentSpan delegate;
3637
private StatusCode statusCode;
3738
private boolean recording;
@@ -142,16 +143,12 @@ public Span updateName(String name) {
142143
@Override
143144
public void end() {
144145
this.recording = false;
145-
applyNamingConvention(this.delegate);
146-
setEventsAsTag(this.delegate, this.events);
147146
this.delegate.finish();
148147
}
149148

150149
@Override
151150
public void end(long timestamp, TimeUnit unit) {
152151
this.recording = false;
153-
applyNamingConvention(this.delegate);
154-
setEventsAsTag(this.delegate, this.events);
155152
this.delegate.finish(unit.toMicros(timestamp));
156153
}
157154

@@ -178,6 +175,12 @@ public AgentSpan asAgentSpan() {
178175
return this.delegate;
179176
}
180177

178+
@Override
179+
public void onSpanFinished() {
180+
applyNamingConvention(this.delegate);
181+
setEventsAsTag(this.delegate, this.events);
182+
}
183+
181184
private static class NoopSpan implements Span {
182185
private static final Span INSTANCE = new NoopSpan();
183186

dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/OtelSpan.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import datadog.trace.api.DDTags;
44
import datadog.trace.api.interceptor.MutableSpan;
55
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
6+
import datadog.trace.bootstrap.instrumentation.api.SpanWrapper;
67
import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan;
78
import io.opentelemetry.common.AttributeValue;
89
import io.opentelemetry.trace.EndSpanOptions;
@@ -13,7 +14,7 @@
1314
import java.util.Map;
1415
import java.util.concurrent.TimeUnit;
1516

16-
public class OtelSpan implements Span, MutableSpan, WithAgentSpan {
17+
public class OtelSpan implements Span, MutableSpan, WithAgentSpan, SpanWrapper {
1718
private final AgentSpan delegate;
1819
private final TypeConverter converter;
1920

dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/main/java/datadog/trace/instrumentation/opentelemetry/TypeConverter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public Span toSpan(final AgentSpan agentSpan) {
4141
if (wrapper instanceof Span) {
4242
return (Span) wrapper;
4343
}
44-
Span spanWrapper = new OtelSpan(agentSpan, this);
44+
OtelSpan spanWrapper = new OtelSpan(agentSpan, this);
4545
attachableSpanWrapper.attachWrapper(spanWrapper);
4646
return spanWrapper;
4747
}

dd-java-agent/instrumentation/opentracing/api-0.31/src/main/java/datadog/trace/instrumentation/opentracing31/OTSpan.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
55
import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities;
66
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
7+
import datadog.trace.bootstrap.instrumentation.api.SpanWrapper;
78
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
89
import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan;
910
import datadog.trace.instrumentation.opentracing.LogHandler;
@@ -15,7 +16,7 @@
1516
* This class should be castable to MutableSpan since that is the way we've encouraged users to
1617
* interact with non-ot parts of our API.
1718
*/
18-
class OTSpan implements Span, MutableSpan, WithAgentSpan {
19+
class OTSpan implements Span, MutableSpan, WithAgentSpan, SpanWrapper {
1920
private final AgentSpan delegate;
2021
private final TypeConverter converter;
2122
private final LogHandler logHandler;

dd-java-agent/instrumentation/opentracing/api-0.32/src/main/java/datadog/trace/instrumentation/opentracing32/OTSpan.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
55
import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities;
66
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
7+
import datadog.trace.bootstrap.instrumentation.api.SpanWrapper;
78
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
89
import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan;
910
import datadog.trace.instrumentation.opentracing.LogHandler;
@@ -16,7 +17,7 @@
1617
* This class should be castable to MutableSpan since that is the way we've encouraged users to
1718
* interact with non-ot parts of our API.
1819
*/
19-
class OTSpan implements Span, MutableSpan, WithAgentSpan {
20+
class OTSpan implements Span, MutableSpan, WithAgentSpan, SpanWrapper {
2021
private final AgentSpan delegate;
2122
private final TypeConverter converter;
2223
private final LogHandler logHandler;

dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@
2828
import datadog.trace.bootstrap.instrumentation.api.AttachableWrapper;
2929
import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities;
3030
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
31+
import datadog.trace.bootstrap.instrumentation.api.SpanWrapper;
3132
import datadog.trace.bootstrap.instrumentation.api.Tags;
3233
import datadog.trace.core.util.StackTraces;
34+
import edu.umd.cs.findbugs.annotations.NonNull;
3335
import java.util.Collections;
3436
import java.util.List;
3537
import java.util.Map;
@@ -94,9 +96,9 @@ static DDSpan create(
9496
private volatile EndpointTracker endpointTracker;
9597

9698
// Cached OT/OTel wrapper to avoid multiple allocations, e.g. when span is activated
97-
private volatile Object wrapper;
98-
private static final AtomicReferenceFieldUpdater<DDSpan, Object> WRAPPER_FIELD_UPDATER =
99-
AtomicReferenceFieldUpdater.newUpdater(DDSpan.class, Object.class, "wrapper");
99+
private volatile SpanWrapper wrapper;
100+
private static final AtomicReferenceFieldUpdater<DDSpan, SpanWrapper> WRAPPER_FIELD_UPDATER =
101+
AtomicReferenceFieldUpdater.newUpdater(DDSpan.class, SpanWrapper.class, "wrapper");
100102

101103
// the request is to be blocked (AppSec)
102104
private volatile Flow.Action.RequestBlockingAction requestBlockingAction;
@@ -148,6 +150,10 @@ private void finishAndAddToTrace(final long durationNano) {
148150
// ensure a min duration of 1
149151
if (DURATION_NANO_UPDATER.compareAndSet(this, 0, Math.max(1, durationNano))) {
150152
setLongRunningVersion(-this.longRunningVersion);
153+
SpanWrapper wrapper = getWrapper();
154+
if (wrapper != null) {
155+
wrapper.onSpanFinished();
156+
}
151157
this.metrics.onSpanFinished();
152158
TraceCollector.PublishState publishState = context.getTraceCollector().onPublish(this);
153159
log.debug("Finished span ({}): {}", publishState, this);
@@ -804,12 +810,12 @@ public String toString() {
804810
}
805811

806812
@Override
807-
public void attachWrapper(Object wrapper) {
813+
public void attachWrapper(@NonNull SpanWrapper wrapper) {
808814
WRAPPER_FIELD_UPDATER.compareAndSet(this, null, wrapper);
809815
}
810816

811817
@Override
812-
public Object getWrapper() {
818+
public SpanWrapper getWrapper() {
813819
return WRAPPER_FIELD_UPDATER.get(this);
814820
}
815821

dd-trace-ot/src/main/java/datadog/opentracing/OTSpan.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
55
import datadog.trace.bootstrap.instrumentation.api.ErrorPriorities;
66
import datadog.trace.bootstrap.instrumentation.api.ResourceNamePriorities;
7+
import datadog.trace.bootstrap.instrumentation.api.SpanWrapper;
78
import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString;
89
import datadog.trace.bootstrap.instrumentation.api.WithAgentSpan;
910
import io.opentracing.Span;
@@ -15,7 +16,7 @@
1516
* This class should be castable to MutableSpan since that is the way we've encouraged users to
1617
* interact with non-ot parts of our API.
1718
*/
18-
class OTSpan implements Span, MutableSpan, WithAgentSpan {
19+
class OTSpan implements Span, MutableSpan, WithAgentSpan, SpanWrapper {
1920
private final AgentSpan delegate;
2021
private final TypeConverter converter;
2122
private final LogHandler logHandler;

internal-api/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ val excludedClassesCoverage by extra(
110110
"datadog.trace.bootstrap.instrumentation.api.ScopeSource",
111111
"datadog.trace.bootstrap.instrumentation.api.ScopedContext",
112112
"datadog.trace.bootstrap.instrumentation.api.ScopedContextKey",
113+
"datadog.trace.bootstrap.instrumentation.api.SpanWrapper",
113114
"datadog.trace.bootstrap.instrumentation.api.TagContext",
114115
"datadog.trace.bootstrap.instrumentation.api.TagContext.HttpHeaders",
115116
"datadog.trace.api.civisibility.config.TestIdentifier",

internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AttachableWrapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@
77
public interface AttachableWrapper {
88

99
/** Attaches a OT/OTel wrapper to a tracer object. */
10-
void attachWrapper(@Nonnull Object wrapper);
10+
void attachWrapper(@Nonnull SpanWrapper wrapper);
1111

1212
/** Returns an attached OT/OTel wrapper or null. */
1313
@Nullable
14-
Object getWrapper();
14+
SpanWrapper getWrapper();
1515
}

0 commit comments

Comments
 (0)