Skip to content

Commit 7ff5d91

Browse files
Merge branch 'master' into alexeyk/groovy-4
# Conflicts: # dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java
2 parents a647df7 + c79dfc6 commit 7ff5d91

File tree

43 files changed

+1927
-266
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+1927
-266
lines changed

buildSrc/src/main/kotlin/CIJobsExtensions.kt renamed to buildSrc/src/main/kotlin/datadog/gradle/plugin/ci/CIJobsExtensions.kt

File renamed without changes.

buildSrc/src/main/kotlin/datadog/gradle/plugin/muzzle/VersionSet.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class VersionSet(versions: Collection<Version>) {
3030
return resultSet.map { it.version }
3131
}
3232

33-
private class ParsedVersion(val version: Version) : Comparable<ParsedVersion> {
33+
internal class ParsedVersion(val version: Version) : Comparable<ParsedVersion> {
3434
companion object {
3535
private val dotPattern = Regex("\\.")
3636
private const val VERSION_SHIFT = 12

buildSrc/src/test/groovy/datadog/gradle/plugin/muzzle/RangeQueryTest.groovy

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

buildSrc/src/test/groovy/datadog/gradle/plugin/muzzle/VersionSetTest.groovy

Lines changed: 0 additions & 91 deletions
This file was deleted.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package datadog.gradle.plugin.muzzle
2+
3+
import org.eclipse.aether.artifact.Artifact
4+
import org.eclipse.aether.artifact.DefaultArtifact
5+
import org.eclipse.aether.resolution.VersionRangeRequest
6+
import org.gradle.internal.impldep.org.junit.Assert.assertTrue
7+
import org.junit.jupiter.api.Test
8+
9+
class RangeQueryTest {
10+
private val system = MuzzleMavenRepoUtils.newRepositorySystem()
11+
private val session = MuzzleMavenRepoUtils.newRepositorySystemSession(system)
12+
13+
@Test
14+
fun `test range request`() {
15+
// compile group: 'org.codehaus.groovy', name: 'groovy-all', version: '2.5.0', ext: 'pom'
16+
val directiveArtifact: Artifact = DefaultArtifact("org.codehaus.groovy", "groovy-all", "jar", "[2.5.0,2.5.8)")
17+
val rangeRequest = VersionRangeRequest().apply {
18+
repositories = MuzzleMavenRepoUtils.MUZZLE_REPOS
19+
artifact = directiveArtifact
20+
}
21+
22+
// This call makes an actual network request, which may fail if network access is limited.
23+
val rangeResult = system.resolveVersionRange(session, rangeRequest)
24+
25+
assertTrue(rangeResult.versions.size >= 8)
26+
}
27+
}
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package datadog.gradle.plugin.muzzle
2+
3+
import org.eclipse.aether.version.Version
4+
import org.junit.jupiter.api.Assertions.assertEquals
5+
import org.junit.jupiter.api.Test
6+
7+
class VersionSetTest {
8+
9+
@Test
10+
fun `parse versions properly`() {
11+
data class Case(
12+
val version: Version,
13+
val versionNumber: Long,
14+
val ending: String
15+
)
16+
17+
val cases = listOf(
18+
Case(ver("1.2.3"), num(1, 2, 3), ""),
19+
Case(ver("4.5.6-foo"), num(4, 5, 6), "foo"),
20+
Case(ver("7.8.9.foo"), num(7, 8, 9), "foo"),
21+
Case(ver("10.11.12.foo-bar"), num(10, 11, 12), "foo-bar"),
22+
Case(ver("13.14.foo-bar"), num(13, 14, 0), "foo-bar"),
23+
Case(ver("15.foo"), num(15, 0, 0), "foo"),
24+
Case(ver("16-foo"), num(16, 0, 0), "foo")
25+
)
26+
27+
for (c in cases) {
28+
val parsed = VersionSet.ParsedVersion(c.version)
29+
assertEquals(c.versionNumber, parsed.versionNumber, "versionNumber for ${c.version}")
30+
assertEquals(c.ending, parsed.ending, "ending for ${c.version}")
31+
assertEquals(
32+
c.versionNumber shr 12,
33+
parsed.majorMinor.toLong(),
34+
"majorMinor for ${c.version}"
35+
)
36+
}
37+
}
38+
39+
@Test
40+
fun `select low and high from major minor`() {
41+
val versionsCases = listOf(
42+
listOf(
43+
ver("4.5.6"),
44+
ver("1.2.3")
45+
),
46+
listOf(
47+
ver("1.2.3"),
48+
ver("1.2.1"),
49+
ver("1.3.0"),
50+
ver("1.2.7"),
51+
ver("1.4.17"),
52+
ver("1.4.1"),
53+
ver("1.4.0"),
54+
ver("1.4.10")
55+
)
56+
)
57+
58+
val expectedCases = listOf(
59+
listOf(
60+
ver("1.2.3"),
61+
ver("4.5.6")
62+
),
63+
listOf(
64+
ver("1.2.1"),
65+
ver("1.2.7"),
66+
ver("1.3.0"),
67+
ver("1.4.0"),
68+
ver("1.4.17")
69+
)
70+
)
71+
72+
versionsCases.zip(expectedCases).forEach { (versions, expected) ->
73+
val versionSet = VersionSet(versions)
74+
assertEquals(expected, versionSet.lowAndHighForMajorMinor)
75+
}
76+
}
77+
78+
private fun ver(v: String): Version = TestVersion(v)
79+
80+
private fun num(major: Int, minor: Int, micro: Int): Long {
81+
var result = major.toLong()
82+
result = (((result shl 12) + minor) shl 12) + micro
83+
return result
84+
}
85+
86+
private class TestVersion(private val v: String) : Version {
87+
override fun compareTo(other: Version?): Int {
88+
if (other is TestVersion) {
89+
return v.compareTo(other.v)
90+
}
91+
92+
return 1
93+
}
94+
95+
override fun equals(other: Any?): Boolean =
96+
other is TestVersion && v == other.v
97+
98+
override fun hashCode(): Int = v.hashCode()
99+
100+
override fun toString(): String = v
101+
}
102+
}

dd-java-agent/agent-debugger/debugger-bootstrap/src/main/java/datadog/trace/bootstrap/debugger/DebuggerContext.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package datadog.trace.bootstrap.debugger;
22

3+
import datadog.instrument.asm.Type;
34
import datadog.trace.api.Config;
45
import datadog.trace.bootstrap.debugger.util.TimeoutChecker;
56
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
@@ -100,7 +101,7 @@ public interface ExceptionDebugger {
100101
public interface CodeOriginRecorder {
101102
String captureCodeOrigin(boolean entry);
102103

103-
String captureCodeOrigin(Method method, boolean entry);
104+
String captureCodeOrigin(String typeName, String methodName, String descriptor, boolean entry);
104105
}
105106

106107
private static volatile ProbeResolver probeResolver;
@@ -506,11 +507,27 @@ public static void captureCodeOrigin(boolean entry) {
506507
}
507508
}
508509

510+
public static void captureCodeOrigin(
511+
String typeName, String methodName, String descriptor, boolean entry) {
512+
try {
513+
CodeOriginRecorder recorder = codeOriginRecorder;
514+
if (recorder != null) {
515+
recorder.captureCodeOrigin(typeName, methodName, descriptor, entry);
516+
}
517+
} catch (Exception ex) {
518+
LOGGER.debug("Error in captureCodeOrigin: ", ex);
519+
}
520+
}
521+
509522
public static void captureCodeOrigin(Method method, boolean entry) {
510523
try {
511524
CodeOriginRecorder recorder = codeOriginRecorder;
512525
if (recorder != null) {
513-
recorder.captureCodeOrigin(method, entry);
526+
recorder.captureCodeOrigin(
527+
method.getDeclaringClass().getName(),
528+
method.getName(),
529+
Type.getMethodDescriptor(method),
530+
entry);
514531
}
515532
} catch (Exception ex) {
516533
LOGGER.debug("Error in captureCodeOrigin: ", ex);

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/codeorigin/DefaultCodeOriginRecorder.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.datadog.debugger.agent.ConfigurationUpdater;
77
import com.datadog.debugger.exception.Fingerprinter;
8+
import com.datadog.debugger.instrumentation.Types;
89
import com.datadog.debugger.probe.CodeOriginProbe;
910
import com.datadog.debugger.probe.LogProbe;
1011
import com.datadog.debugger.probe.LogProbe.Builder;
@@ -20,7 +21,6 @@
2021
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
2122
import datadog.trace.util.AgentTaskScheduler;
2223
import datadog.trace.util.stacktrace.StackWalkerFactory;
23-
import java.lang.reflect.Method;
2424
import java.util.Collection;
2525
import java.util.Collections;
2626
import java.util.HashMap;
@@ -82,11 +82,13 @@ public String captureCodeOrigin(boolean entry) {
8282
}
8383

8484
@Override
85-
public String captureCodeOrigin(Method method, boolean entry) {
86-
String fingerprint = method.toString();
85+
public String captureCodeOrigin(
86+
String typeName, String methodName, String descriptor, boolean entry) {
87+
String fingerprint = typeName + "." + methodName + descriptor;
8788
CodeOriginProbe probe = probesByFingerprint.get(fingerprint);
8889
if (probe == null) {
89-
probe = createProbe(fingerprint, entry, Where.of(method));
90+
String signature = Types.descriptorToSignature(descriptor);
91+
probe = createProbe(fingerprint, entry, Where.of(typeName, methodName, signature));
9092
LOG.debug("Creating probe for method {}", fingerprint);
9193
}
9294
return probe.getId();

dd-java-agent/agent-debugger/src/main/java/com/datadog/debugger/probe/Where.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,18 @@
11
package com.datadog.debugger.probe;
22

3-
import static java.util.Arrays.stream;
4-
53
import com.datadog.debugger.agent.Generated;
64
import com.datadog.debugger.instrumentation.Types;
75
import com.datadog.debugger.util.ClassFileLines;
86
import com.squareup.moshi.JsonAdapter;
97
import com.squareup.moshi.JsonReader;
108
import com.squareup.moshi.JsonWriter;
119
import java.io.IOException;
12-
import java.lang.reflect.Method;
1310
import java.util.ArrayList;
1411
import java.util.Arrays;
1512
import java.util.List;
1613
import java.util.Objects;
1714
import java.util.regex.Matcher;
1815
import java.util.regex.Pattern;
19-
import java.util.stream.Collectors;
2016
import org.objectweb.asm.Opcodes;
2117
import org.objectweb.asm.tree.MethodNode;
2218

@@ -50,13 +46,8 @@ public static Where of(String typeName, String methodName, String signature, Str
5046
return new Where(typeName, methodName, signature, lines, null);
5147
}
5248

53-
public static Where of(Method method) {
54-
return of(
55-
method.getDeclaringClass().getName(),
56-
method.getName(),
57-
stream(method.getParameterTypes())
58-
.map(Class::getTypeName)
59-
.collect(Collectors.joining(", ", "(", ")")));
49+
public static Where of(String typeName, String methodName, String signature) {
50+
return new Where(typeName, methodName, signature, (SourceLine[]) null, null);
6051
}
6152

6253
protected static SourceLine[] sourceLines(String[] defs) {

0 commit comments

Comments
 (0)