Skip to content

Commit b295f57

Browse files
authored
Merge branch 'master' into dd/pre-construct-tagmap-entries
2 parents d650b78 + a1239d3 commit b295f57

32 files changed

Lines changed: 1034 additions & 123 deletions

File tree

.github/workflows/create-release-branch.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ jobs:
119119
run: |
120120
git config user.name "github-actions[bot]"
121121
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
122-
git commit -m "chore: Pin system-tests for release branch" .github/workflows/run-system-tests.yaml
122+
git commit -m "chore: Pin system-tests for release branch" .github/workflows/run-system-tests.yaml .gitlab-ci.yml
123123
echo "commit=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
124124
125125
- name: Push changes

.github/workflows/run-system-tests.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ jobs:
6262
needs:
6363
- build
6464
# If you change the following comment, update the pattern in the update_system_test_reference.sh script to match.
65-
uses: DataDog/system-tests/.github/workflows/system-tests.yml@main # system tests are pinned for releases only
65+
uses: DataDog/system-tests/.github/workflows/system-tests.yml@main # system tests are pinned on release branches only
6666
secrets:
6767
TEST_OPTIMIZATION_API_KEY: ${{ secrets.DATADOG_API_KEY_PROD }}
6868
permissions:
@@ -72,7 +72,7 @@ jobs:
7272
with:
7373
library: java
7474
# If you change the following comment, update the pattern in the update_system_test_reference.sh script to match.
75-
ref: main # system tests are pinned for releases only
75+
ref: main # system tests are pinned on release branches only
7676
binaries_artifact: binaries
7777
desired_execution_time: 900 # 15 minutes
7878
scenarios_groups: tracer-release

.gitlab-ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -647,7 +647,7 @@ muzzle-dep-report:
647647
CI_USE_TEST_AGENT: "true"
648648
CI_AGENT_HOST: local-agent
649649
services:
650-
- name: ghcr.io/datadog/dd-apm-test-agent/ddapm-test-agent:v1.33.1
650+
- name: registry.ddbuild.io/images/mirror/dd-apm-test-agent/ddapm-test-agent:v1.44.0
651651
alias: local-agent
652652
variables:
653653
LOG_LEVEL: "DEBUG"
@@ -1071,6 +1071,7 @@ publishing-gate:
10711071

10721072
configure_system_tests:
10731073
variables:
1074+
SYSTEM_TESTS_REF: main # system tests are pinned on release branches only
10741075
SYSTEM_TESTS_SCENARIOS_GROUPS: "simple_onboarding,simple_onboarding_profiling,simple_onboarding_appsec,docker-ssi,lib-injection"
10751076

10761077
create_key:

communication/src/main/java/datadog/communication/ddagent/SharedCommunicationObjects.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import static datadog.trace.util.AgentThreadFactory.AGENT_THREAD_GROUP;
55

66
import datadog.common.container.ContainerInfo;
7-
import datadog.common.socket.SocketUtils;
87
import datadog.communication.http.OkHttpUtils;
8+
import datadog.communication.http.SocketUtils;
99
import datadog.metrics.api.Monitoring;
1010
import datadog.remoteconfig.ConfigurationPoller;
1111
import datadog.remoteconfig.DefaultConfigurationPoller;

communication/src/main/java/datadog/communication/http/OkHttpUtils.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package datadog.communication.http;
22

3-
import static datadog.common.socket.SocketUtils.discoverApmSocket;
3+
import static datadog.communication.http.SocketUtils.discoverApmSocket;
44
import static java.util.concurrent.TimeUnit.MILLISECONDS;
55
import static java.util.concurrent.TimeUnit.SECONDS;
66

@@ -68,6 +68,7 @@ public static OkHttpClient buildHttpClient(
6868
final long timeoutMillis) {
6969
return buildHttpClient(
7070
unixDomainSocketPath,
71+
Config.get().isJdkSocketEnabled(),
7172
namedPipe,
7273
null,
7374
isHttp,
@@ -77,7 +78,8 @@ public static OkHttpClient buildHttpClient(
7778
null,
7879
null,
7980
null,
80-
timeoutMillis);
81+
timeoutMillis,
82+
Config.get().isAgentConfiguredUsingDefault());
8183
}
8284

8385
public static OkHttpClient buildHttpClient(
@@ -93,6 +95,7 @@ public static OkHttpClient buildHttpClient(
9395
final long timeoutMillis) {
9496
return buildHttpClient(
9597
discoverApmSocket(config),
98+
config.isJdkSocketEnabled(),
9699
config.getAgentNamedPipe(),
97100
dispatcher,
98101
isPlainHttp(url),
@@ -102,13 +105,15 @@ public static OkHttpClient buildHttpClient(
102105
proxyPort,
103106
proxyUsername,
104107
proxyPassword,
105-
timeoutMillis);
108+
timeoutMillis,
109+
config.isAgentConfiguredUsingDefault());
106110
}
107111

108112
public abstract static class CustomListener extends EventListener {}
109113

110114
private static OkHttpClient buildHttpClient(
111115
final String unixDomainSocketPath,
116+
final boolean useJdkUnixDomainSocket,
112117
final String namedPipe,
113118
final Dispatcher dispatcher,
114119
final boolean isHttp,
@@ -118,7 +123,8 @@ private static OkHttpClient buildHttpClient(
118123
final Integer proxyPort,
119124
final String proxyUsername,
120125
final String proxyPassword,
121-
final long timeoutMillis) {
126+
final long timeoutMillis,
127+
final boolean agentConfiguredUsingDefault) {
122128
final OkHttpClient.Builder builder = new OkHttpClient.Builder();
123129

124130
try {
@@ -144,7 +150,9 @@ private static OkHttpClient buildHttpClient(
144150
dispatcher != null ? dispatcher : new Dispatcher(RejectingExecutorService.INSTANCE));
145151

146152
if (unixDomainSocketPath != null) {
147-
builder.socketFactory(new UnixDomainSocketFactory(new File(unixDomainSocketPath)));
153+
builder.socketFactory(
154+
new UnixDomainSocketFactory(
155+
new File(unixDomainSocketPath), useJdkUnixDomainSocket, agentConfiguredUsingDefault));
148156
log.debug("Using UnixDomainSocket as http transport");
149157
} else if (namedPipe != null) {
150158
builder.socketFactory(new NamedPipeSocketFactory(namedPipe));

utils/socket-utils/src/main/java/datadog/common/socket/SocketUtils.java renamed to communication/src/main/java/datadog/communication/http/SocketUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package datadog.common.socket;
1+
package datadog.communication.http;
22

33
import static datadog.trace.api.ConfigDefaults.DEFAULT_TRACE_AGENT_SOCKET_PATH;
44

communication/src/main/java/datadog/communication/serialization/GrowableBuffer.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,18 @@ public GrowableBuffer(int initialCapacity) {
1717
this.buffer = ByteBuffer.allocate(initialCapacity);
1818
}
1919

20+
/** Flips the buffer and returns a new slice which shares the buffered content. */
2021
public ByteBuffer slice() {
2122
buffer.flip();
2223
return buffer.slice();
2324
}
2425

26+
/** Flips the buffer and returns the buffered content. */
27+
public ByteBuffer flip() {
28+
buffer.flip();
29+
return buffer;
30+
}
31+
2532
public int messageCount() {
2633
return messageCount;
2734
}

dd-java-agent/agent-otel/otel-bootstrap/src/main/java/datadog/trace/bootstrap/otel/common/export/OtlpCommonProto.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import static java.nio.charset.StandardCharsets.UTF_8;
44

55
import datadog.communication.serialization.GenerationalUtf8Cache;
6+
import datadog.communication.serialization.GrowableBuffer;
67
import datadog.communication.serialization.SimpleUtf8Cache;
78
import datadog.communication.serialization.StreamingBuffer;
89
import datadog.trace.api.Config;
910
import datadog.trace.bootstrap.otel.common.OtelInstrumentationScope;
11+
import java.nio.ByteBuffer;
1012
import java.util.List;
1113

1214
/**
@@ -43,6 +45,14 @@ public static int sizeVarInt(long value) {
4345
return 1 + (63 - Long.numberOfLeadingZeros(value)) / 7;
4446
}
4547

48+
public static void writeVarInt(ByteBuffer buf, int value) {
49+
for (int i = 1, len = sizeVarInt(value); i < len; i++) {
50+
buf.put((byte) ((value & 0x7f) | 0x80));
51+
value >>>= 7;
52+
}
53+
buf.put((byte) value);
54+
}
55+
4656
public static void writeVarInt(StreamingBuffer buf, int value) {
4757
for (int i = 1, len = sizeVarInt(value); i < len; i++) {
4858
buf.put((byte) ((value & 0x7f) | 0x80));
@@ -96,10 +106,32 @@ public static void writeString(StreamingBuffer buf, String value) {
96106
writeString(buf, value.getBytes(UTF_8));
97107
}
98108

109+
public static int sizeTag(int fieldNum) {
110+
return sizeVarInt(fieldNum << 3);
111+
}
112+
113+
public static void writeTag(ByteBuffer buf, int fieldNum, int wireType) {
114+
writeVarInt(buf, fieldNum << 3 | wireType);
115+
}
116+
99117
public static void writeTag(StreamingBuffer buf, int fieldNum, int wireType) {
100118
writeVarInt(buf, fieldNum << 3 | wireType);
101119
}
102120

121+
public static byte[] recordMessage(GrowableBuffer buf, int fieldNum) {
122+
try {
123+
ByteBuffer data = buf.flip();
124+
int dataSize = data.remaining();
125+
ByteBuffer message = ByteBuffer.allocate(sizeTag(fieldNum) + sizeVarInt(dataSize) + dataSize);
126+
writeTag(message, fieldNum, LEN_WIRE_TYPE);
127+
writeVarInt(message, dataSize);
128+
message.put(data);
129+
return message.array();
130+
} finally {
131+
buf.reset();
132+
}
133+
}
134+
103135
public static void writeInstrumentationScope(
104136
StreamingBuffer buf, OtelInstrumentationScope scope) {
105137
byte[] scopeNameUtf8 = scope.getName().getUtf8Bytes();
Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package datadog.trace.bootstrap.otel.common.export;
2+
3+
import static datadog.trace.bootstrap.otel.common.export.OtlpAttributeVisitor.STRING;
4+
import static datadog.trace.bootstrap.otel.common.export.OtlpCommonProto.LEN_WIRE_TYPE;
5+
import static datadog.trace.bootstrap.otel.common.export.OtlpCommonProto.recordMessage;
6+
import static datadog.trace.bootstrap.otel.common.export.OtlpCommonProto.writeAttribute;
7+
import static datadog.trace.bootstrap.otel.common.export.OtlpCommonProto.writeTag;
8+
9+
import datadog.communication.serialization.GrowableBuffer;
10+
import datadog.communication.serialization.StreamingBuffer;
11+
import datadog.trace.api.Config;
12+
import java.util.Arrays;
13+
import java.util.HashSet;
14+
import java.util.Locale;
15+
import java.util.Set;
16+
17+
/** Provides a canned message for OpenTelemetry's "resource.proto" wire protocol. */
18+
public final class OtlpResourceProto {
19+
private OtlpResourceProto() {}
20+
21+
private static final byte[] RESOURCE_MESSAGE = buildResourceMessage(Config.get());
22+
23+
private static final Set<String> IGNORED_GLOBAL_TAGS =
24+
new HashSet<>(
25+
Arrays.asList(
26+
"service",
27+
"env",
28+
"version",
29+
"service.name",
30+
"deployment.environment.name",
31+
"service.version"));
32+
33+
/** Writes the resource message in protobuf format to the given buffer. */
34+
public static void writeResourceMessage(StreamingBuffer buf) {
35+
buf.put(RESOURCE_MESSAGE);
36+
}
37+
38+
static byte[] buildResourceMessage(Config config) {
39+
GrowableBuffer buf = new GrowableBuffer(512);
40+
41+
String serviceName = config.getServiceName();
42+
String env = config.getEnv();
43+
String version = config.getVersion();
44+
45+
writeResourceAttribute(buf, "service.name", serviceName);
46+
if (!env.isEmpty()) {
47+
writeResourceAttribute(buf, "deployment.environment.name", env);
48+
}
49+
if (!version.isEmpty()) {
50+
writeResourceAttribute(buf, "service.version", version);
51+
}
52+
53+
config
54+
.getGlobalTags()
55+
.forEach(
56+
(key, value) -> {
57+
// ignore datadog tags and their otel equivalents that we map above
58+
if (!IGNORED_GLOBAL_TAGS.contains(key.toLowerCase(Locale.ROOT))) {
59+
writeResourceAttribute(buf, key, value);
60+
}
61+
});
62+
63+
return recordMessage(buf, 1);
64+
}
65+
66+
private static void writeResourceAttribute(StreamingBuffer buf, String key, String value) {
67+
writeTag(buf, 1, LEN_WIRE_TYPE);
68+
writeAttribute(buf, STRING, key, value);
69+
}
70+
}

0 commit comments

Comments
 (0)