Skip to content

Commit 8d635f2

Browse files
committed
Use CapturedContextProviders API
1 parent 23b0ecf commit 8d635f2

File tree

8 files changed

+94
-320
lines changed

8 files changed

+94
-320
lines changed
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
11
apply from: "$rootDir/gradle/java.gradle"
2-
3-
//TODO generate lock files

dd-java-agent/instrumentation/servicetalk/gradle.lockfile

Lines changed: 0 additions & 184 deletions
This file was deleted.

dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.0/src/main/java/datadog/trace/instrumentation/servicetalk0_42_0/ServiceTalkInstrumentation.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public Reference[] additionalMuzzleReferences() {
2323
return new Reference[] {
2424
// This check prevents older instrumentation from being applied to ServiceTalk v0.42.56+
2525
new Reference.Builder("io.servicetalk.concurrent.api.DelegatingExecutor")
26-
// This field existed was removed in v0.42.56
26+
// Removed in v0.42.56
2727
.withField(new String[0], 0, "delegate", "Lio/servicetalk/concurrent/api/Executor;")
2828
.build(),
2929
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package datadog.trace.instrumentation.servicetalk0_42_56;
2+
3+
import static datadog.trace.agent.tooling.bytebuddy.matcher.NameMatchers.named;
4+
5+
import com.google.auto.service.AutoService;
6+
import datadog.trace.agent.tooling.Instrumenter;
7+
import datadog.trace.agent.tooling.InstrumenterModule;
8+
import io.servicetalk.concurrent.api.CapturedContextProvider;
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
import net.bytebuddy.asm.Advice;
12+
13+
@AutoService(InstrumenterModule.class)
14+
public class CapturedContextProvidersInstrumentation extends InstrumenterModule.Tracing
15+
implements Instrumenter.ForSingleType, Instrumenter.HasMethodAdvice {
16+
17+
public CapturedContextProvidersInstrumentation() {
18+
super("servicetalk", "servicetalk-concurrent");
19+
}
20+
21+
@Override
22+
public String instrumentedType() {
23+
return "io.servicetalk.concurrent.api.CapturedContextProviders";
24+
}
25+
26+
@Override
27+
public void methodAdvice(MethodTransformer transformer) {
28+
transformer.applyAdvice(named("loadProviders"), getClass().getName() + "$LoadProvidersAdvice");
29+
}
30+
31+
private static final class LoadProvidersAdvice {
32+
@Advice.OnMethodExit(suppress = Throwable.class)
33+
public static void exit(@Advice.Return(readOnly = false) java.util.List loadedProviders) {
34+
List<CapturedContextProvider> providers = new ArrayList<>(loadedProviders.size() + 1);
35+
providers.addAll(loadedProviders);
36+
providers.add(new DatadogCapturedContextProvider());
37+
loadedProviders = providers;
38+
}
39+
}
40+
41+
@Override
42+
public String[] helperClassNames() {
43+
return new String[] {
44+
packageName + ".DatadogCapturedContextProvider",
45+
};
46+
}
47+
}

dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/ContextPreservingInstrumentation.java

Lines changed: 0 additions & 75 deletions
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package datadog.trace.instrumentation.servicetalk0_42_56;
2+
3+
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
4+
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
5+
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
6+
import io.servicetalk.concurrent.api.CapturedContext;
7+
import io.servicetalk.concurrent.api.CapturedContextProvider;
8+
import io.servicetalk.concurrent.api.Scope;
9+
import io.servicetalk.context.api.ContextMap;
10+
11+
public final class DatadogCapturedContextProvider implements CapturedContextProvider {
12+
@Override
13+
public CapturedContext captureContext(CapturedContext underlying) {
14+
return captureContextCopy(underlying);
15+
}
16+
17+
@Override
18+
public CapturedContext captureContextCopy(CapturedContext underlying) {
19+
return new WithDatadogCapturedContext(AgentTracer.activeSpan(), underlying);
20+
}
21+
22+
private static final class WithDatadogCapturedContext implements CapturedContext {
23+
private final AgentSpan agentSpan;
24+
private final CapturedContext underlying;
25+
26+
public WithDatadogCapturedContext(AgentSpan agentSpan, CapturedContext underlying) {
27+
this.agentSpan = agentSpan;
28+
this.underlying = underlying;
29+
}
30+
31+
@Override
32+
public ContextMap captured() {
33+
return underlying.captured();
34+
}
35+
36+
@Override
37+
public Scope attachContext() {
38+
Scope stScope = underlying.attachContext();
39+
AgentScope ddScope = AgentTracer.activateSpan(agentSpan);
40+
return () -> {
41+
ddScope.close();
42+
stScope.close();
43+
};
44+
}
45+
}
46+
}

dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/DefaultAsyncContextProviderInstrumentation.java

Lines changed: 0 additions & 39 deletions
This file was deleted.

dd-java-agent/instrumentation/servicetalk/servicetalk-0.42.56/src/main/java/datadog/trace/instrumentation/servicetalk0_42_56/ServiceTalkInstrumentation.java

Lines changed: 0 additions & 19 deletions
This file was deleted.

0 commit comments

Comments
 (0)