Skip to content

Commit fdfa3ef

Browse files
SylvainJugelaurit
andauthored
make couchbase indy-ready (#14867)
Co-authored-by: Lauri Tulmin <[email protected]>
1 parent de8614f commit fdfa3ef

File tree

10 files changed

+85
-34
lines changed

10 files changed

+85
-34
lines changed

instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseBucketInstrumentation.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2020
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2121
import net.bytebuddy.asm.Advice;
22+
import net.bytebuddy.asm.Advice.AssignReturned;
2223
import net.bytebuddy.description.type.TypeDescription;
2324
import net.bytebuddy.matcher.ElementMatcher;
2425
import rx.Observable;
@@ -46,53 +47,57 @@ public void transform(TypeTransformer transformer) {
4647
public static class CouchbaseClientAdvice {
4748

4849
@Advice.OnMethodEnter
49-
public static void trackCallDepth(@Advice.Local("otelCallDepth") CallDepth callDepth) {
50-
callDepth = CallDepth.forClass(CouchbaseCluster.class);
50+
public static CallDepth trackCallDepth() {
51+
CallDepth callDepth = CallDepth.forClass(CouchbaseCluster.class);
5152
callDepth.getAndIncrement();
53+
return callDepth;
5254
}
5355

56+
@AssignReturned.ToReturned
5457
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
55-
public static void subscribeResult(
58+
public static Observable<?> subscribeResult(
5659
@Advice.Origin("#t") Class<?> declaringClass,
5760
@Advice.Origin("#m") String methodName,
5861
@Advice.FieldValue("bucket") String bucket,
59-
@Advice.Return(readOnly = false) Observable<?> result,
60-
@Advice.Local("otelCallDepth") CallDepth callDepth) {
62+
@Advice.Return Observable<?> result,
63+
@Advice.Enter CallDepth callDepth) {
6164
if (callDepth.decrementAndGet() > 0) {
62-
return;
65+
return result;
6366
}
6467
CouchbaseRequestInfo request =
6568
CouchbaseRequestInfo.create(bucket, declaringClass, methodName);
66-
result = Observable.create(new TracedOnSubscribe<>(result, instrumenter(), request));
69+
return Observable.create(new TracedOnSubscribe<>(result, instrumenter(), request));
6770
}
6871
}
6972

7073
@SuppressWarnings("unused")
7174
public static class CouchbaseClientQueryAdvice {
7275

7376
@Advice.OnMethodEnter
74-
public static void trackCallDepth(@Advice.Local("otelCallDepth") CallDepth callDepth) {
75-
callDepth = CallDepth.forClass(CouchbaseCluster.class);
77+
public static CallDepth trackCallDepth() {
78+
CallDepth callDepth = CallDepth.forClass(CouchbaseCluster.class);
7679
callDepth.getAndIncrement();
80+
return callDepth;
7781
}
7882

83+
@AssignReturned.ToReturned
7984
@Advice.OnMethodExit(onThrowable = Throwable.class)
80-
public static void subscribeResult(
85+
public static Observable<?> subscribeResult(
8186
@Advice.Origin("#t") Class<?> declaringClass,
8287
@Advice.Origin("#m") String methodName,
8388
@Advice.FieldValue("bucket") String bucket,
8489
@Advice.Argument(value = 0, optional = true) Object query,
85-
@Advice.Return(readOnly = false) Observable<?> result,
86-
@Advice.Local("otelCallDepth") CallDepth callDepth) {
90+
@Advice.Return Observable<?> result,
91+
@Advice.Enter CallDepth callDepth) {
8792
if (callDepth.decrementAndGet() > 0) {
88-
return;
93+
return result;
8994
}
9095

9196
CouchbaseRequestInfo request =
9297
query == null
9398
? CouchbaseRequestInfo.create(bucket, declaringClass, methodName)
9499
: CouchbaseRequestInfo.create(bucket, query);
95-
result = Observable.create(new TracedOnSubscribe<>(result, instrumenter(), request));
100+
return Observable.create(new TracedOnSubscribe<>(result, instrumenter(), request));
96101
}
97102
}
98103
}

instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseClusterInstrumentation.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
2020
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
2121
import net.bytebuddy.asm.Advice;
22+
import net.bytebuddy.asm.Advice.AssignReturned;
2223
import net.bytebuddy.description.type.TypeDescription;
2324
import net.bytebuddy.matcher.ElementMatcher;
2425
import rx.Observable;
@@ -43,23 +44,25 @@ public void transform(TypeTransformer transformer) {
4344
public static class CouchbaseClientAdvice {
4445

4546
@Advice.OnMethodEnter
46-
public static void trackCallDepth(@Advice.Local("otelCallDepth") CallDepth callDepth) {
47-
callDepth = CallDepth.forClass(CouchbaseCluster.class);
47+
public static CallDepth trackCallDepth() {
48+
CallDepth callDepth = CallDepth.forClass(CouchbaseCluster.class);
4849
callDepth.getAndIncrement();
50+
return callDepth;
4951
}
5052

53+
@AssignReturned.ToReturned
5154
@Advice.OnMethodExit(onThrowable = Throwable.class, suppress = Throwable.class)
52-
public static void subscribeResult(
55+
public static Observable<?> subscribeResult(
5356
@Advice.Origin("#t") Class<?> declaringClass,
5457
@Advice.Origin("#m") String methodName,
55-
@Advice.Return(readOnly = false) Observable<?> result,
56-
@Advice.Local("otelCallDepth") CallDepth callDepth) {
58+
@Advice.Return Observable<?> result,
59+
@Advice.Enter CallDepth callDepth) {
5760
if (callDepth.decrementAndGet() > 0) {
58-
return;
61+
return result;
5962
}
6063

6164
CouchbaseRequestInfo request = CouchbaseRequestInfo.create(null, declaringClass, methodName);
62-
result = Observable.create(new TracedOnSubscribe<>(result, instrumenter(), request));
65+
return Observable.create(new TracedOnSubscribe<>(result, instrumenter(), request));
6366
}
6467
}
6568
}

instrumentation/couchbase/couchbase-2.0/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_0/CouchbaseInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,9 @@ public String getModuleGroup() {
4141
public List<String> injectedClassNames() {
4242
return singletonList("rx.OpenTelemetryTracingUtil");
4343
}
44+
45+
@Override
46+
public boolean isIndyReady() {
47+
return true;
48+
}
4449
}

instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseCoreInstrumentation.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
package io.opentelemetry.javaagent.instrumentation.couchbase.v2_6;
77

8+
import static io.opentelemetry.javaagent.instrumentation.couchbase.v2_6.VirtualFieldHelper.COUCHBASE_REQUEST_INFO;
89
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
910
import static net.bytebuddy.matcher.ElementMatchers.isPublic;
1011
import static net.bytebuddy.matcher.ElementMatchers.named;
1112
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1213

1314
import com.couchbase.client.core.message.CouchbaseRequest;
1415
import io.opentelemetry.context.Context;
15-
import io.opentelemetry.instrumentation.api.util.VirtualField;
1616
import io.opentelemetry.javaagent.bootstrap.Java8BytecodeBridge;
1717
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1818
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
@@ -43,9 +43,7 @@ public static class CouchbaseCoreAdvice {
4343

4444
@Advice.OnMethodEnter(suppress = Throwable.class)
4545
public static void addOperationIdToSpan(@Advice.Argument(0) CouchbaseRequest request) {
46-
VirtualField<CouchbaseRequest, CouchbaseRequestInfo> virtualField =
47-
VirtualField.find(CouchbaseRequest.class, CouchbaseRequestInfo.class);
48-
CouchbaseRequestInfo requestInfo = virtualField.get(request);
46+
CouchbaseRequestInfo requestInfo = COUCHBASE_REQUEST_INFO.get(request);
4947
if (requestInfo != null) {
5048
return;
5149
}
@@ -55,7 +53,7 @@ public static void addOperationIdToSpan(@Advice.Argument(0) CouchbaseRequest req
5553
if (requestInfo != null) {
5654
// The scope from the initial rxJava subscribe is not available to the networking layer
5755
// To transfer the request info it is added to the context store
58-
virtualField.set(request, requestInfo);
56+
COUCHBASE_REQUEST_INFO.set(request, requestInfo);
5957

6058
requestInfo.setOperationId(request.operationId());
6159
}

instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseInstrumentationModule.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,9 @@ public List<TypeInstrumentation> typeInstrumentations() {
3030
public String getModuleGroup() {
3131
return "couchbase";
3232
}
33+
34+
@Override
35+
public boolean isIndyReady() {
36+
return true;
37+
}
3338
}

instrumentation/couchbase/couchbase-2.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v2_6/CouchbaseNetworkInstrumentation.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@
55

66
package io.opentelemetry.javaagent.instrumentation.couchbase.v2_6;
77

8+
import static io.opentelemetry.javaagent.instrumentation.couchbase.v2_6.VirtualFieldHelper.COUCHBASE_REQUEST_INFO;
89
import static net.bytebuddy.matcher.ElementMatchers.isMethod;
910
import static net.bytebuddy.matcher.ElementMatchers.named;
1011
import static net.bytebuddy.matcher.ElementMatchers.takesArgument;
1112
import static net.bytebuddy.matcher.ElementMatchers.takesArguments;
1213

1314
import com.couchbase.client.core.message.CouchbaseRequest;
1415
import com.couchbase.client.deps.io.netty.channel.ChannelHandlerContext;
15-
import io.opentelemetry.instrumentation.api.util.VirtualField;
1616
import io.opentelemetry.javaagent.extension.instrumentation.TypeInstrumentation;
1717
import io.opentelemetry.javaagent.extension.instrumentation.TypeTransformer;
1818
import io.opentelemetry.javaagent.instrumentation.couchbase.v2_0.CouchbaseRequestInfo;
@@ -51,10 +51,7 @@ public static void addNetworkTagsToSpan(
5151
@Advice.Argument(0) ChannelHandlerContext channelHandlerContext,
5252
@Advice.Argument(1) CouchbaseRequest request) {
5353

54-
VirtualField<CouchbaseRequest, CouchbaseRequestInfo> virtualField =
55-
VirtualField.find(CouchbaseRequest.class, CouchbaseRequestInfo.class);
56-
57-
CouchbaseRequestInfo requestInfo = virtualField.get(request);
54+
CouchbaseRequestInfo requestInfo = COUCHBASE_REQUEST_INFO.get(request);
5855
if (requestInfo != null) {
5956
requestInfo.setPeerAddress(channelHandlerContext.channel().remoteAddress());
6057
requestInfo.setLocalAddress(localSocket);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/*
2+
* Copyright The OpenTelemetry Authors
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package io.opentelemetry.javaagent.instrumentation.couchbase.v2_6;
7+
8+
import com.couchbase.client.core.message.CouchbaseRequest;
9+
import io.opentelemetry.instrumentation.api.util.VirtualField;
10+
import io.opentelemetry.javaagent.instrumentation.couchbase.v2_0.CouchbaseRequestInfo;
11+
12+
public final class VirtualFieldHelper {
13+
public static final VirtualField<CouchbaseRequest, CouchbaseRequestInfo> COUCHBASE_REQUEST_INFO =
14+
VirtualField.find(CouchbaseRequest.class, CouchbaseRequestInfo.class);
15+
16+
private VirtualFieldHelper() {}
17+
}

instrumentation/couchbase/couchbase-3.1.6/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1_6/CouchbaseInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
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.Collections;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class CouchbaseInstrumentationModule extends InstrumentationModule {
19+
public class CouchbaseInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public CouchbaseInstrumentationModule() {
2022
super("couchbase", "couchbase-3.1.6");
2123
}
@@ -32,4 +34,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3234
public List<TypeInstrumentation> typeInstrumentations() {
3335
return Collections.singletonList(new CouchbaseEnvironmentInstrumentation());
3436
}
37+
38+
@Override
39+
public boolean isIndyReady() {
40+
return true;
41+
}
3542
}

instrumentation/couchbase/couchbase-3.1/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_1/CouchbaseInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
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.Collections;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class CouchbaseInstrumentationModule extends InstrumentationModule {
19+
public class CouchbaseInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public CouchbaseInstrumentationModule() {
2022
super("couchbase", "couchbase-3.1");
2123
}
@@ -32,4 +34,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3234
public List<TypeInstrumentation> typeInstrumentations() {
3335
return Collections.singletonList(new CouchbaseEnvironmentInstrumentation());
3436
}
37+
38+
@Override
39+
public boolean isIndyReady() {
40+
return true;
41+
}
3542
}

instrumentation/couchbase/couchbase-3.2/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/couchbase/v3_2/CouchbaseInstrumentationModule.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
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.Collections;
1415
import java.util.List;
1516
import net.bytebuddy.matcher.ElementMatcher;
1617

1718
@AutoService(InstrumentationModule.class)
18-
public class CouchbaseInstrumentationModule extends InstrumentationModule {
19+
public class CouchbaseInstrumentationModule extends InstrumentationModule
20+
implements ExperimentalInstrumentationModule {
1921
public CouchbaseInstrumentationModule() {
2022
super("couchbase", "couchbase-3.2");
2123
}
@@ -30,4 +32,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
3032
public List<TypeInstrumentation> typeInstrumentations() {
3133
return Collections.singletonList(new CouchbaseEnvironmentInstrumentation());
3234
}
35+
36+
@Override
37+
public boolean isIndyReady() {
38+
return true;
39+
}
3340
}

0 commit comments

Comments
 (0)