Skip to content

Commit f31f574

Browse files
authored
make kubernetes-client indy-ready (#15012)
1 parent 45b7bb9 commit f31f574

File tree

2 files changed

+38
-31
lines changed

2 files changed

+38
-31
lines changed

instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/ApiClientInstrumentation.java

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,10 @@
2020
import io.opentelemetry.context.Scope;
2121
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2222
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
23+
import javax.annotation.Nullable;
2324
import net.bytebuddy.asm.Advice;
25+
import net.bytebuddy.asm.Advice.AssignReturned;
26+
import net.bytebuddy.asm.Advice.AssignReturned.ToArguments.ToArgument;
2427
import net.bytebuddy.description.type.TypeDescription;
2528
import net.bytebuddy.matcher.ElementMatcher;
2629
import okhttp3.Call;
@@ -55,19 +58,21 @@ public void transform(TypeTransformer transformer) {
5558
@SuppressWarnings("unused")
5659
public static class BuildRequestAdvice {
5760

61+
@AssignReturned.ToReturned
5862
@Advice.OnMethodExit(suppress = Throwable.class)
59-
public static void onExit(@Advice.Return(readOnly = false) Request request) {
63+
public static Request onExit(@Advice.Return Request originalReturnValue) {
6064
Context parentContext = currentContext();
61-
if (!instrumenter().shouldStart(parentContext, request)) {
62-
return;
65+
if (!instrumenter().shouldStart(parentContext, originalReturnValue)) {
66+
return originalReturnValue;
6367
}
6468

65-
Context context = instrumenter().start(parentContext, request);
69+
Context context = instrumenter().start(parentContext, originalReturnValue);
6670
Scope scope = context.makeCurrent();
67-
Request.Builder requestWithPropagation = request.newBuilder();
71+
Request.Builder requestWithPropagation = originalReturnValue.newBuilder();
6872
inject(context, requestWithPropagation);
69-
request = requestWithPropagation.build();
73+
Request request = requestWithPropagation.build();
7074
CurrentState.set(parentContext, context, scope, request);
75+
return request;
7176
}
7277
}
7378

@@ -96,39 +101,34 @@ public static void onExit(
96101
@SuppressWarnings("unused")
97102
public static class ExecuteAsyncAdvice {
98103

104+
@AssignReturned.ToArguments(@ToArgument(value = 2, index = 1))
99105
@Advice.OnMethodEnter(suppress = Throwable.class)
100-
public static void onEnter(
101-
@Advice.Argument(0) Call httpCall,
102-
@Advice.Argument(value = 2, readOnly = false) ApiCallback<?> callback,
103-
@Advice.Local("otelContext") Context context,
104-
@Advice.Local("otelScope") Scope scope,
105-
@Advice.Local("otelRequest") Request request) {
106+
public static Object[] onEnter(
107+
@Advice.Argument(0) Call httpCall, @Advice.Argument(2) ApiCallback<?> originalCallback) {
106108
CurrentState current = CurrentState.remove();
107109
if (current == null) {
108-
return;
110+
return new Object[] {null, originalCallback};
109111
}
110-
111-
context = current.getContext();
112-
scope = current.getScope();
113-
request = current.getRequest();
114-
callback = new TracingApiCallback<>(callback, current.getParentContext(), context, request);
112+
ApiCallback<?> callback =
113+
new TracingApiCallback<>(
114+
originalCallback,
115+
current.getParentContext(),
116+
current.getContext(),
117+
current.getRequest());
118+
return new Object[] {current, callback};
115119
}
116120

117121
@Advice.OnMethodExit(suppress = Throwable.class, onThrowable = Throwable.class)
118122
public static void onExit(
119-
@Advice.Thrown Throwable throwable,
120-
@Advice.Local("otelContext") Context context,
121-
@Advice.Local("otelScope") Scope scope,
122-
@Advice.Local("otelRequest") Request request) {
123-
if (scope == null) {
124-
return;
125-
}
126-
scope.close();
127-
128-
if (throwable != null) {
129-
instrumenter().end(context, request, null, throwable);
123+
@Advice.Thrown @Nullable Throwable throwable, @Advice.Enter Object[] enterResult) {
124+
CurrentState current = (CurrentState) enterResult[0];
125+
if (current != null) {
126+
current.getScope().close();
127+
if (throwable != null) {
128+
instrumenter().end(current.getContext(), current.getRequest(), null, throwable);
129+
}
130+
// else span will be ended in the TracingApiCallback
130131
}
131-
// else span will be ended in the TracingApiCallback
132132
}
133133
}
134134
}

instrumentation/kubernetes-client-7.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/kubernetesclient/KubernetesClientInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
import com.google.auto.service.AutoService;
1111
import io.opentelemetry.javaagent.extension.instrumentation.InstrumentationModule;
1212
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
13+
import io.opentelemetry.javaagent.extension.instrumentation.internal.ExperimentalInstrumentationModule;
1314
import java.util.List;
1415

1516
@AutoService(InstrumentationModule.class)
16-
public class KubernetesClientInstrumentationModule extends InstrumentationModule {
17+
public class KubernetesClientInstrumentationModule extends InstrumentationModule
18+
implements ExperimentalInstrumentationModule {
1719

1820
public KubernetesClientInstrumentationModule() {
1921
super("kubernetes-client", "kubernetes-client-7.0");
@@ -23,4 +25,9 @@ public KubernetesClientInstrumentationModule() {
2325
public List<TypeInstrumentation> typeInstrumentations() {
2426
return singletonList(new ApiClientInstrumentation());
2527
}
28+
29+
@Override
30+
public boolean isIndyReady() {
31+
return true;
32+
}
2633
}

0 commit comments

Comments
 (0)