Skip to content

Commit 872388f

Browse files
authored
Add line probe exploration tests (#8741)
Refactor InstrumentTheWorld config to take a string indicating the usage of method or line probe for the process. Rename jobs to indicate line or method probes
1 parent c06c54a commit 872388f

File tree

18 files changed

+238
-38
lines changed

18 files changed

+238
-38
lines changed

.gitlab/exploration-tests.yml

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -45,32 +45,62 @@ build-exploration-tests-image:
4545
- "*_surefire-reports.tar.gz"
4646
- "*_debugger-dumps.tar.gz"
4747

48-
exploration-tests-jsoup:
48+
exploration-tests-method-jsoup:
4949
needs: [ build ]
5050
dependencies:
5151
- build
5252
<<: *common-exploration-tests
5353
variables:
5454
PROJECT: jsoup
5555
script:
56-
- ./run-exploration-tests.sh "$PROJECT" "mvn verify" "include_${PROJECT}.txt" "exclude_${PROJECT}.txt"
56+
- ./run-exploration-tests.sh "method" "$PROJECT" "mvn verify" "include_${PROJECT}.txt" "exclude_${PROJECT}.txt"
5757

58-
exploration-tests-jackson-core:
58+
exploration-tests-line-jsoup:
59+
needs: [ build ]
60+
dependencies:
61+
- build
62+
<<: *common-exploration-tests
63+
variables:
64+
PROJECT: jsoup
65+
script:
66+
- ./run-exploration-tests.sh "line" "$PROJECT" "mvn verify" "include_${PROJECT}.txt" "exclude_${PROJECT}.txt"
67+
68+
exploration-tests-method-jackson-core:
69+
needs: [ build ]
70+
dependencies:
71+
- build
72+
<<: *common-exploration-tests
73+
variables:
74+
PROJECT: jackson-core
75+
script:
76+
- ./run-exploration-tests.sh "method" "$PROJECT" "mvn verify" "include_${PROJECT}.txt" "exclude_${PROJECT}.txt"
77+
78+
exploration-tests-line-jackson-core:
5979
needs: [ build ]
6080
dependencies:
6181
- build
6282
<<: *common-exploration-tests
6383
variables:
6484
PROJECT: jackson-core
6585
script:
66-
- ./run-exploration-tests.sh "$PROJECT" "mvn verify" "include_${PROJECT}.txt" "exclude_${PROJECT}.txt"
86+
- ./run-exploration-tests.sh "line" "$PROJECT" "mvn verify" "include_${PROJECT}.txt" "exclude_${PROJECT}.txt"
87+
88+
exploration-tests-method-jackson-databind:
89+
needs: [ build ]
90+
dependencies:
91+
- build
92+
<<: *common-exploration-tests
93+
variables:
94+
PROJECT: jackson-databind
95+
script:
96+
- ./run-exploration-tests.sh "method" "$PROJECT" "./mvnw verify" "include_${PROJECT}.txt" "exclude_$PROJECT.txt"
6797

68-
exploration-tests-jackson-databind:
98+
exploration-tests-line-jackson-databind:
6999
needs: [ build ]
70100
dependencies:
71101
- build
72102
<<: *common-exploration-tests
73103
variables:
74104
PROJECT: jackson-databind
75105
script:
76-
- ./run-exploration-tests.sh "$PROJECT" "./mvnw verify" "exclude_$PROJECT.txt"
106+
- ./run-exploration-tests.sh "line" "$PROJECT" "./mvnw verify" "include_${PROJECT}.txt" "exclude_line_$PROJECT.txt"

dd-java-agent/agent-debugger/exploration-tests/Dockerfile.exploration-tests

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ COPY jackson-core_exploration-tests.patch .
2929
RUN cd jackson-core && git apply /exploration-tests/jackson-core_exploration-tests.patch
3030
RUN bash -c "source $HOME/.sdkman/bin/sdkman-init.sh && cd jackson-core && mvn verify -DskipTests=true"
3131
RUN git clone -b 2.16 https://github.com/FasterXML/jackson-databind.git
32+
COPY jackson-databind_exploration-tests.patch .
33+
# fix tests that are failing because too deep recrursion
34+
RUN cd jackson-databind && git apply /exploration-tests/jackson-databind_exploration-tests.patch
3235
RUN bash -c "source $HOME/.sdkman/bin/sdkman-init.sh && cd jackson-databind && mvn verify -DskipTests=true"
3336

3437
# Netty
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
# issues with powermock
12
com/fasterxml/jackson/databind/BaseTest
3+
com/fasterxml/jackson/databind/BaseMapTest*
24
com/fasterxml/jackson/databind/type/TypeFactory
5+
com/fasterxml/jackson/databind/deser/lazy/LazyIgnoralForNumbers3730Test::<init>
36

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
com/fasterxml/jackson/databind/BaseTest
2+
com/fasterxml/jackson/databind/BaseMapTest*
3+
com/fasterxml/jackson/databind/type/TypeFactory

dd-java-agent/agent-debugger/exploration-tests/jackson-core_exploration-tests.patch

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,27 @@ index 2f7957d1..7a8ea388 100644
1111
int count = errorCount.get();
1212

1313
if (count > 0) {
14+
diff --git forkSrcPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/DoubleToDecimalTest.java forkDstPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/DoubleToDecimalTest.java
15+
index 9752fd990959aa0b07382973d37c6f84b7a08fea..f8e6296e91fe1a8965c27727f111d7ffc77e434d 100644
16+
--- forkSrcPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/DoubleToDecimalTest.java
17+
+++ forkDstPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/DoubleToDecimalTest.java
18+
@@ -142,6 +142,6 @@ public class DoubleToDecimalTest {
19+
@Test
20+
void randomNumberTests() {
21+
// 29-Nov-2022, tatu: Reduce from 1M due to slowness
22+
- DoubleToDecimalChecker.randomNumberTests(250_000, new Random());
23+
+ DoubleToDecimalChecker.randomNumberTests(25_000, new Random());
24+
}
25+
}
26+
diff --git forkSrcPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/FloatToDecimalTest.java forkDstPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/FloatToDecimalTest.java
27+
index f6893940dd4aeeb4f4e17c7a21fc11a4594c369a..8563578eaa7b30b376f03e17ef3c25d3baa09f0e 100644
28+
--- forkSrcPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/FloatToDecimalTest.java
29+
+++ forkDstPrefix/src/test/java/com/fasterxml/jackson/core/io/schubfach/FloatToDecimalTest.java
30+
@@ -119,6 +119,6 @@ public class FloatToDecimalTest {
31+
32+
@Test
33+
void randomNumberTests() {
34+
- FloatToDecimalChecker.randomNumberTests(1_000_000, new Random());
35+
+ FloatToDecimalChecker.randomNumberTests(25_000, new Random());
36+
}
37+
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
diff --git forkSrcPrefix/src/test/java/com/fasterxml/jackson/databind/misc/ThreadSafety1759Test.java forkDstPrefix/src/test/java/com/fasterxml/jackson/databind/misc/ThreadSafety1759Test.java
2+
index 68c52b600550268242d16614e6143104ce37961d..29f453c8c0e07d139edd095d1614dd287aa5d283 100644
3+
--- forkSrcPrefix/src/test/java/com/fasterxml/jackson/databind/misc/ThreadSafety1759Test.java
4+
+++ forkDstPrefix/src/test/java/com/fasterxml/jackson/databind/misc/ThreadSafety1759Test.java
5+
@@ -41,7 +41,7 @@ public class ThreadSafety1759Test extends BaseMapTest
6+
}
7+
executor.shutdown();
8+
for (Future<Throwable> f : results) {
9+
- Throwable t = f.get(5, TimeUnit.SECONDS);
10+
+ Throwable t = f.get(30, TimeUnit.SECONDS);
11+
if (t != null) {
12+
fail("Exception during processing: "+t.getMessage());
13+
}
14+
diff --git forkSrcPrefix/src/test/java/com/fasterxml/jackson/databind/ser/dos/CyclicDataSerTest.java forkDstPrefix/src/test/java/com/fasterxml/jackson/databind/ser/dos/CyclicDataSerTest.java
15+
index aff54f8c731181eb17158c8329134b267529cd75..72673defcbfa493c707e2beab3b83573b43e6208 100644
16+
--- forkSrcPrefix/src/test/java/com/fasterxml/jackson/databind/ser/dos/CyclicDataSerTest.java
17+
+++ forkDstPrefix/src/test/java/com/fasterxml/jackson/databind/ser/dos/CyclicDataSerTest.java
18+
@@ -46,16 +46,16 @@ public class CyclicDataSerTest
19+
}
20+
21+
public void testListWithSelfReference() throws Exception {
22+
- List<Object> list = new ArrayList<>();
23+
- list.add(list);
24+
- try {
25+
- writeAndMap(MAPPER, list);
26+
- fail("expected DatabindException");
27+
- } catch (DatabindException e) {
28+
- String exceptionPrefix = String.format("Document nesting depth (%d) exceeds the maximum allowed",
29+
- StreamWriteConstraints.DEFAULT_MAX_DEPTH + 1);
30+
- assertTrue("DatabindException message is as expected?",
31+
- e.getMessage().startsWith(exceptionPrefix));
32+
- }
33+
+// List<Object> list = new ArrayList<>();
34+
+// list.add(list);
35+
+// try {
36+
+// writeAndMap(MAPPER, list);
37+
+// fail("expected DatabindException");
38+
+// } catch (DatabindException e) {
39+
+// String exceptionPrefix = String.format("Document nesting depth (%d) exceeds the maximum allowed",
40+
+// StreamWriteConstraints.DEFAULT_MAX_DEPTH + 1);
41+
+// assertTrue("DatabindException message is as expected?",
42+
+// e.getMessage().startsWith(exceptionPrefix));
43+
+// }
44+
}
45+
}
46+
diff --git forkSrcPrefix/src/test/java/com/fasterxml/jackson/databind/deser/dos/DeepJsonNodeSerTest.java forkDstPrefix/src/test/java/com/fasterxml/jackson/databind/deser/dos/DeepJsonNodeSerTest.java
47+
index 0a4860bc91101ae60d15bfd9f978207926a1a97a..58601f3ad33cc48ad27cb3914daf9d3146e1b181 100644
48+
--- forkSrcPrefix/src/test/java/com/fasterxml/jackson/databind/deser/dos/DeepJsonNodeSerTest.java
49+
+++ forkDstPrefix/src/test/java/com/fasterxml/jackson/databind/deser/dos/DeepJsonNodeSerTest.java
50+
@@ -41,9 +41,9 @@ public class DeepJsonNodeSerTest extends BaseMapTest
51+
52+
public void testDeepNodeSerNoStreamingLimits() throws Exception
53+
{
54+
- JsonNode jsonNode = NO_LIMITS_MAPPER.readTree(_nestedDoc(TEST_NESTING));
55+
- String json = NO_LIMITS_MAPPER.writeValueAsString(jsonNode);
56+
- assertNotNull(json);
57+
+// JsonNode jsonNode = NO_LIMITS_MAPPER.readTree(_nestedDoc(TEST_NESTING));
58+
+// String json = NO_LIMITS_MAPPER.writeValueAsString(jsonNode);
59+
+// assertNotNull(json);
60+
}
61+
62+
private String _nestedDoc(int nesting) {

dd-java-agent/agent-debugger/exploration-tests/run-exploration-tests.sh

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#!/usr/bin/env bash
22
set -uo pipefail
3-
NAME=$1
4-
COMMAND=$2
5-
PROJECT_INCLUDE_FILE=${3:-}
6-
PROJECT_EXCLUDE_FILE=${4:-}
3+
ITW_TYPE=${1:-"method"}
4+
NAME=$2
5+
COMMAND=$3
6+
PROJECT_INCLUDE_FILE=${4:-}
7+
PROJECT_EXCLUDE_FILE=${5:-}
78
echo " === running debugger java exploration tests === "
8-
export JAVA_TOOL_OPTIONS="-javaagent:`pwd`/dd-java-agent.jar -Ddatadog.slf4j.simpleLogger.log.com.datadog.debugger=debug -Ddd.trace.enabled=false -Ddd.dynamic.instrumentation.enabled=true -Ddd.dynamic.instrumentation.instrument.the.world=true -Ddd.dynamic.instrumentation.classfile.dump.enabled=true -Ddd.dynamic.instrumentation.verify.bytecode=false -Ddd.dynamic.instrumentation.include.files=/exploration-tests/$PROJECT_INCLUDE_FILE -Ddd.dynamic.instrumentation.exclude.files=/exploration-tests/$PROJECT_EXCLUDE_FILE"
9+
export JAVA_TOOL_OPTIONS="-javaagent:`pwd`/dd-java-agent.jar -Ddatadog.slf4j.simpleLogger.log.com.datadog.debugger=debug -Ddd.trace.enabled=false -Ddd.dynamic.instrumentation.enabled=true -Ddd.dynamic.instrumentation.instrument.the.world=$ITW_TYPE -Ddd.dynamic.instrumentation.classfile.dump.enabled=true -Ddd.dynamic.instrumentation.verify.bytecode=false -Ddd.dynamic.instrumentation.include.files=/exploration-tests/$PROJECT_INCLUDE_FILE -Ddd.dynamic.instrumentation.exclude.files=/exploration-tests/$PROJECT_EXCLUDE_FILE"
910
echo "$JAVA_TOOL_OPTIONS"
1011
cd $NAME
1112
echo "Building repository $NAME..."

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerAgent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public static synchronized void run(Instrumentation inst, SharedCommunicationObj
8989
}
9090
if (config.isDynamicInstrumentationEnabled()) {
9191
startDynamicInstrumentation();
92-
if (config.isDynamicInstrumentationInstrumentTheWorld()) {
92+
if (config.getDynamicInstrumentationInstrumentTheWorld() != null) {
9393
setupInstrumentTheWorldTransformer(config, instrumentation, sink);
9494
}
9595
}

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/agent/DebuggerTransformer.java

Lines changed: 54 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.datadog.debugger.agent;
22

3+
import static com.datadog.debugger.instrumentation.ASMHelper.getLineNumbers;
34
import static java.util.Collections.singletonList;
45
import static java.util.stream.Collectors.toList;
56

@@ -52,6 +53,7 @@
5253
import java.util.Map;
5354
import java.util.Set;
5455
import java.util.concurrent.ConcurrentHashMap;
56+
import java.util.function.BiConsumer;
5557
import java.util.regex.Pattern;
5658
import net.bytebuddy.description.type.TypeDescription;
5759
import net.bytebuddy.pool.TypePool;
@@ -103,6 +105,7 @@ public class DebuggerTransformer implements ClassFileTransformer {
103105
private final Set<String> includeMethods;
104106
private final Trie includeTrie;
105107
private final Map<String, LogProbe> instrumentTheWorldProbes;
108+
private final BiConsumer<MethodInfo, List<ProbeDefinition>> probeCreator;
106109

107110
public interface InstrumentationListener {
108111
void instrumentationResult(ProbeDefinition definition, InstrumentationResult result);
@@ -119,7 +122,8 @@ public DebuggerTransformer(
119122
this.denyListHelper = new DenyListHelper(configuration.getDenyList());
120123
this.listener = listener;
121124
this.debuggerSink = debuggerSink;
122-
this.instrumentTheWorld = config.isDynamicInstrumentationInstrumentTheWorld();
125+
String itwType = config.getDynamicInstrumentationInstrumentTheWorld();
126+
this.instrumentTheWorld = itwType != null;
123127
if (this.instrumentTheWorld) {
124128
instrumentTheWorldProbes = new ConcurrentHashMap<>();
125129
excludeTrie = new Trie();
@@ -138,6 +142,17 @@ public DebuggerTransformer(
138142
includeTrie,
139143
includeClasses,
140144
includeMethods);
145+
if (itwType.equals("method")) {
146+
probeCreator = this::createMethodProbe;
147+
} else if (itwType.equals("line")) {
148+
probeCreator = this::createLineProbes;
149+
} else {
150+
log.warn(
151+
"Invalid value for 'dd.debugger.instrument-the-world' property: {}. "
152+
+ "Valid values are 'method' or 'line'.",
153+
itwType);
154+
probeCreator = null;
155+
}
141156
} else {
142157
instrumentTheWorldProbes = null;
143158
excludeTrie = null;
@@ -146,6 +161,7 @@ public DebuggerTransformer(
146161
includeTrie = null;
147162
includeClasses = null;
148163
includeMethods = null;
164+
probeCreator = null;
149165
}
150166
}
151167

@@ -211,8 +227,7 @@ public byte[] transform(
211227
ProtectionDomain protectionDomain,
212228
byte[] classfileBuffer) {
213229
if (instrumentTheWorld) {
214-
return transformTheWorld(
215-
loader, classFilePath, classBeingRedefined, protectionDomain, classfileBuffer);
230+
return transformTheWorld(loader, classFilePath, protectionDomain, classfileBuffer);
216231
}
217232
if (skipInstrumentation(loader, classFilePath)) {
218233
return null;
@@ -264,7 +279,6 @@ private boolean skipInstrumentation(ClassLoader loader, String classFilePath) {
264279
private byte[] transformTheWorld(
265280
ClassLoader loader,
266281
String classFilePath,
267-
Class<?> classBeingRedefined,
268282
ProtectionDomain protectionDomain,
269283
byte[] classfileBuffer) {
270284
try {
@@ -303,16 +317,11 @@ private byte[] transformTheWorld(
303317
}
304318
List<ProbeDefinition> probes = new ArrayList<>();
305319
Set<String> methodNames = new HashSet<>();
320+
ClassFileLines classFileLines = new ClassFileLines(classNode);
306321
for (MethodNode methodNode : classNode.methods) {
307322
if (isMethodIncludedForTransformation(methodNode, classNode, methodNames)) {
308-
LogProbe probe =
309-
LogProbe.builder()
310-
.probeId(RandomUtils.randomUUID().toString(), 0)
311-
.where(classNode.name, methodNode.name)
312-
.captureSnapshot(false)
313-
.build();
314-
probes.add(probe);
315-
instrumentTheWorldProbes.put(probe.getProbeId().getEncodedId(), probe);
323+
MethodInfo methodInfo = new MethodInfo(loader, classNode, methodNode, classFileLines);
324+
probeCreator.accept(methodInfo, probes);
316325
}
317326
}
318327
boolean transformed = performInstrumentation(loader, classFilePath, probes, classNode);
@@ -342,6 +351,39 @@ private boolean isMethodIncludedForTransformation(
342351
return methodNames.add(methodNode.name);
343352
}
344353

354+
private void createMethodProbe(MethodInfo methodInfo, List<ProbeDefinition> probes) {
355+
LogProbe probe =
356+
LogProbe.builder()
357+
.probeId(RandomUtils.randomUUID().toString(), 0)
358+
.where(methodInfo.getClassNode().name, methodInfo.getMethodNode().name)
359+
.captureSnapshot(false)
360+
.build();
361+
probes.add(probe);
362+
instrumentTheWorldProbes.put(probe.getProbeId().getEncodedId(), probe);
363+
}
364+
365+
private void createLineProbes(MethodInfo methodInfo, List<ProbeDefinition> probes) {
366+
if (methodInfo.getMethodName().equals("<init>")) {
367+
// skip constructor for now to avoid dealing with code before super calls
368+
return;
369+
}
370+
if ((methodInfo.getMethodNode().access & Opcodes.ACC_SYNTHETIC) != 0) {
371+
// skip synthetic methods
372+
return;
373+
}
374+
List<Integer> lineNumbers = getLineNumbers(methodInfo.getMethodNode());
375+
for (Integer lineNumber : lineNumbers) {
376+
LogProbe probe =
377+
LogProbe.builder()
378+
.probeId(RandomUtils.randomUUID().toString(), 0)
379+
.where(methodInfo.getSourceFileName(), lineNumber)
380+
.captureSnapshot(false)
381+
.build();
382+
probes.add(probe);
383+
instrumentTheWorldProbes.put(probe.getProbeId().getEncodedId(), probe);
384+
}
385+
}
386+
345387
private boolean isClassLoaderRelated(ClassNode classNode) {
346388
return classNode.superName.equals("java/lang/ClassLoader")
347389
|| classNode.superName.equals("java/net/URLClassLoader")

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/ASMHelper.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,22 @@ public static boolean isStore(int opcode) {
408408
return opcode >= Opcodes.ISTORE && opcode <= Opcodes.ASTORE;
409409
}
410410

411+
public static List<Integer> getLineNumbers(MethodNode methodNode) {
412+
List<Integer> lines = new ArrayList<>();
413+
if (methodNode == null) {
414+
return lines;
415+
}
416+
AbstractInsnNode current = methodNode.instructions.getFirst();
417+
while (current != null) {
418+
if (current.getType() == AbstractInsnNode.LINE) {
419+
LineNumberNode lineNode = (LineNumberNode) current;
420+
lines.add(lineNode.line);
421+
}
422+
current = current.getNext();
423+
}
424+
return lines;
425+
}
426+
411427
/** Wraps ASM's {@link org.objectweb.asm.Type} with associated generic types */
412428
public static class Type {
413429
private final org.objectweb.asm.Type mainType;

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/instrumentation/CapturedContextInstrumentor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -909,7 +909,7 @@ private void collectLocalVariables(AbstractInsnNode location, InsnList insnList)
909909
}
910910

911911
if (methodNode.localVariables == null || methodNode.localVariables.isEmpty()) {
912-
if (!Config.get().isDynamicInstrumentationInstrumentTheWorld()) {
912+
if (Config.get().getDynamicInstrumentationInstrumentTheWorld() == null) {
913913
reportWarning("Missing local variable debug info");
914914
}
915915
// no local variables info - bail out

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/sink/ProbeStatusSink.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public ProbeStatusSink(Config config, String diagnosticsEndpoint, boolean useMul
5858
this.interval = Duration.ofSeconds(config.getDynamicInstrumentationDiagnosticsInterval());
5959
this.batchSize = config.getDynamicInstrumentationUploadBatchSize();
6060
this.queue = new ArrayBlockingQueue<>(2 * this.batchSize);
61-
this.isInstrumentTheWorld = config.isDynamicInstrumentationInstrumentTheWorld();
61+
this.isInstrumentTheWorld = config.getDynamicInstrumentationInstrumentTheWorld() != null;
6262
}
6363

6464
public void stop() {

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/uploader/BatchUploader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ public BatchUploader(Config config, String endpoint, RetryPolicy retryPolicy) {
128128
RetryPolicy retryPolicy,
129129
String containerId,
130130
String entityId) {
131-
instrumentTheWorld = config.isDynamicInstrumentationInstrumentTheWorld();
131+
instrumentTheWorld = config.getDynamicInstrumentationInstrumentTheWorld() != null;
132132
if (endpoint == null || endpoint.length() == 0) {
133133
throw new IllegalArgumentException("Endpoint url is empty");
134134
}

0 commit comments

Comments
 (0)