Skip to content

Commit f66c37e

Browse files
authored
Merge branch 'master' into mhlidd/add_logback_config
2 parents f8b124a + b266e2d commit f66c37e

49 files changed

Lines changed: 1540 additions & 220 deletions

File tree

Some content is hidden

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

.github/dependabot.yml

Lines changed: 36 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,38 @@
1+
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
12
version: 2
23
updates:
3-
- package-ecosystem: github-actions
4-
directory: /
5-
schedule:
6-
interval: weekly
7-
labels:
8-
- 'comp: tooling'
9-
- 'tag: dependencies'
10-
- 'tag: no release notes'
11-
commit-message:
12-
prefix: 'chore(ci): '
13-
groups:
14-
gh-actions-packages:
15-
patterns:
16-
- '*'
17-
cooldown:
18-
default-days: 14
19-
- package-ecosystem: gradle
20-
directory: /
21-
schedule:
22-
interval: weekly
23-
allow:
24-
- dependency-name: gradle
25-
ignore:
26-
- dependency-name: gradle
27-
update-types:
28-
- version-update:semver-major
29-
labels:
30-
- 'comp: tooling'
31-
- 'tag: dependencies'
32-
- 'tag: no release notes'
33-
commit-message:
34-
prefix: 'chore(build): '
35-
cooldown:
36-
default-days: 14
4+
- package-ecosystem: github-actions
5+
directory: /
6+
schedule:
7+
interval: weekly
8+
labels:
9+
- 'comp: tooling'
10+
- 'tag: dependencies'
11+
- 'tag: no release notes'
12+
commit-message:
13+
prefix: 'chore(ci): '
14+
groups:
15+
gh-actions-packages:
16+
patterns:
17+
- '*'
18+
cooldown:
19+
default-days: 2
20+
21+
- package-ecosystem: gradle
22+
directory: /
23+
schedule:
24+
interval: weekly
25+
allow:
26+
- dependency-name: gradle
27+
ignore:
28+
- dependency-name: gradle
29+
update-types:
30+
- version-update:semver-major
31+
labels:
32+
- 'comp: tooling'
33+
- 'tag: dependencies'
34+
- 'tag: no release notes'
35+
commit-message:
36+
prefix: 'chore(build): '
37+
cooldown:
38+
default-days: 2

.github/workflows/analyze-changes.yaml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ jobs:
2020
with:
2121
submodules: 'recursive'
2222
- name: Cache Gradle dependencies
23-
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
23+
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
2424
with:
2525
path: |
2626
~/.gradle/caches
@@ -30,7 +30,7 @@ jobs:
3030
${{ runner.os }}-gradle-
3131
3232
- name: Initialize CodeQL
33-
uses: github/codeql-action/init@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0
33+
uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
3434
with:
3535
languages: 'java'
3636
build-mode: 'manual'
@@ -43,7 +43,7 @@ jobs:
4343
./gradlew clean :dd-java-agent:shadowJar --build-cache --parallel --stacktrace --no-daemon --max-workers=4
4444
4545
- name: Perform CodeQL Analysis and upload results to GitHub Security tab
46-
uses: github/codeql-action/analyze@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0
46+
uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
4747

4848
trivy:
4949
name: Analyze changes with Trivy
@@ -60,7 +60,7 @@ jobs:
6060
submodules: 'recursive'
6161

6262
- name: Cache Gradle dependencies
63-
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
63+
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
6464
with:
6565
path: |
6666
~/.gradle/caches
@@ -102,7 +102,7 @@ jobs:
102102
TRIVY_JAVA_DB_REPOSITORY: ghcr.io/aquasecurity/trivy-java-db,public.ecr.aws/aquasecurity/trivy-java-db
103103

104104
- name: Upload Trivy scan results to GitHub Security tab
105-
uses: github/codeql-action/upload-sarif@b1bff81932f5cdfc8695c7752dcee935dcd061c8 # v4.33.0
105+
uses: github/codeql-action/upload-sarif@c10b8064de6f491fea524254123dbe5e09572f13 # v4.35.1
106106
if: always()
107107
with:
108108
sarif_file: 'trivy-results.sarif'

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ jobs:
3030
fetch-depth: 0
3131

3232
- name: Cache Gradle dependencies
33-
uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
33+
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
3434
with:
3535
path: |
3636
~/.gradle/caches

dd-java-agent/build.gradle

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,16 @@ configurations {
1919
def includedAgentDir = project.layout.buildDirectory.dir("generated/included")
2020
def includedJarFileTree = fileTree(includedAgentDir)
2121

22+
def pomPropertiesDir = project.layout.buildDirectory.dir("generated/maven-metadata")
23+
def pomPropertiesFileTree = fileTree(pomPropertiesDir)
24+
2225
tasks.named("processResources") {
2326
dependsOn(includedJarFileTree)
27+
dependsOn(pomPropertiesFileTree)
28+
}
29+
30+
tasks.named("sourcesJar") {
31+
dependsOn(pomPropertiesFileTree)
2432
}
2533

2634
sourceSets {
@@ -33,7 +41,7 @@ sourceSets {
3341
"main_java11" {
3442
java.srcDirs "${project.projectDir}/src/main/java11"
3543
}
36-
main.resources.srcDir(includedAgentDir)
44+
main.resources.srcDirs(includedAgentDir, pomPropertiesDir)
3745
}
3846

3947
def java6CompileTask = tasks.named("compileMain_java6Java") {
@@ -324,6 +332,14 @@ def generateAgentJarIndex = tasks.register('generateAgentJarIndex', JavaExec) {
324332
}
325333
sourceSets.main.resources.srcDir(generateAgentJarIndex)
326334

335+
def generatePomProperties = tasks.register('generatePomProperties', WriteProperties) {
336+
destinationFile = pomPropertiesDir.map { it.file("META-INF/maven/com.datadoghq/dd-java-agent/pom.properties") }
337+
property("groupId", "com.datadoghq")
338+
property("artifactId", "dd-java-agent")
339+
property("version", project.providers.provider { project.version.toString() })
340+
}
341+
pomPropertiesFileTree.builtBy(generatePomProperties)
342+
327343
subprojects { Project subProj ->
328344
// Don't need javadoc task run for internal projects.
329345
subProj.tasks.withType(Javadoc).configureEach { enabled = false }

dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/ConsumerCoordinatorInstrumentation.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import datadog.trace.api.datastreams.DataStreamsTags;
1111
import datadog.trace.bootstrap.InstrumentationContext;
1212
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
13+
import datadog.trace.instrumentation.kafka_common.MetadataState;
1314
import java.util.HashMap;
1415
import java.util.Map;
1516
import net.bytebuddy.asm.Advice;
@@ -42,7 +43,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
4243
@Override
4344
public Map<String, String> contextStore() {
4445
Map<String, String> contextStores = new HashMap<>();
45-
contextStores.put("org.apache.kafka.clients.Metadata", "java.lang.String");
46+
contextStores.put(
47+
"org.apache.kafka.clients.Metadata",
48+
"datadog.trace.instrumentation.kafka_common.MetadataState");
4649
contextStores.put(
4750
"org.apache.kafka.clients.consumer.internals.ConsumerCoordinator",
4851
KafkaConsumerInfo.class.getName());
@@ -56,7 +59,11 @@ public String instrumentedType() {
5659

5760
@Override
5861
public String[] helperClassNames() {
59-
return new String[] {packageName + ".KafkaConsumerInfo"};
62+
return new String[] {
63+
packageName + ".KafkaConsumerInfo",
64+
"datadog.trace.instrumentation.kafka_common.PendingConfig",
65+
"datadog.trace.instrumentation.kafka_common.MetadataState",
66+
};
6067
}
6168

6269
@Override
@@ -90,7 +97,9 @@ public static void trackCommitOffset(
9097
Metadata consumerMetadata = kafkaConsumerInfo.getClientMetadata();
9198
String clusterId = null;
9299
if (consumerMetadata != null) {
93-
clusterId = InstrumentationContext.get(Metadata.class, String.class).get(consumerMetadata);
100+
MetadataState metadataState =
101+
InstrumentationContext.get(Metadata.class, MetadataState.class).get(consumerMetadata);
102+
clusterId = metadataState != null ? metadataState.clusterId : null;
94103
}
95104

96105
for (Map.Entry<TopicPartition, OffsetAndMetadata> entry : offsets.entrySet()) {

dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInfoInstrumentation.java

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import datadog.trace.bootstrap.instrumentation.api.AgentScope;
2424
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
2525
import datadog.trace.instrumentation.kafka_common.ClusterIdHolder;
26+
import datadog.trace.instrumentation.kafka_common.KafkaConfigHelper;
27+
import datadog.trace.instrumentation.kafka_common.MetadataState;
2628
import java.util.HashMap;
2729
import java.util.List;
2830
import java.util.Map;
@@ -60,7 +62,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
6062
@Override
6163
public Map<String, String> contextStore() {
6264
Map<String, String> contextStores = new HashMap<>();
63-
contextStores.put("org.apache.kafka.clients.Metadata", "java.lang.String");
65+
contextStores.put(
66+
"org.apache.kafka.clients.Metadata",
67+
"datadog.trace.instrumentation.kafka_common.MetadataState");
6468
contextStores.put(
6569
"org.apache.kafka.clients.consumer.ConsumerRecords", KafkaConsumerInfo.class.getName());
6670
contextStores.put(
@@ -82,6 +86,9 @@ public String[] helperClassNames() {
8286
packageName + ".KafkaDecorator",
8387
packageName + ".KafkaConsumerInfo",
8488
"datadog.trace.instrumentation.kafka_common.ClusterIdHolder",
89+
"datadog.trace.instrumentation.kafka_common.KafkaConfigHelper",
90+
"datadog.trace.instrumentation.kafka_common.PendingConfig",
91+
"datadog.trace.instrumentation.kafka_common.MetadataState",
8592
};
8693
}
8794

@@ -148,6 +155,16 @@ public static void captureGroup(
148155
.put(coordinator, kafkaConsumerInfo);
149156
}
150157
}
158+
159+
if (Config.get().isDataStreamsEnabled()) {
160+
MetadataState state =
161+
InstrumentationContext.get(Metadata.class, MetadataState.class)
162+
.putIfAbsent(metadata, MetadataState::new);
163+
KafkaConfigHelper.storePendingConsumerConfig(
164+
state,
165+
normalizedConsumerGroup,
166+
KafkaConfigHelper.extractConsumerConfig(consumerConfig));
167+
}
151168
}
152169

153170
public static void muzzleCheck(ConsumerRecord record) {
@@ -191,6 +208,16 @@ public static void captureGroup(
191208
.put(coordinator, kafkaConsumerInfo);
192209
}
193210
}
211+
212+
if (Config.get().isDataStreamsEnabled()) {
213+
MetadataState state =
214+
InstrumentationContext.get(Metadata.class, MetadataState.class)
215+
.putIfAbsent(metadata, MetadataState::new);
216+
KafkaConfigHelper.storePendingConsumerConfig(
217+
state,
218+
normalizedConsumerGroup,
219+
KafkaConfigHelper.extractConsumerConfigFromMap(consumerConfig));
220+
}
194221
}
195222

196223
public static void muzzleCheck(ConsumerRecord record) {
@@ -214,8 +241,9 @@ public static AgentScope onEnter(@Advice.This KafkaConsumer consumer) {
214241
if (kafkaConsumerInfo != null && Config.get().isDataStreamsEnabled()) {
215242
Metadata consumerMetadata = kafkaConsumerInfo.getClientMetadata();
216243
if (consumerMetadata != null) {
217-
String clusterId =
218-
InstrumentationContext.get(Metadata.class, String.class).get(consumerMetadata);
244+
MetadataState metadataState =
245+
InstrumentationContext.get(Metadata.class, MetadataState.class).get(consumerMetadata);
246+
String clusterId = metadataState != null ? metadataState.clusterId : null;
219247
if (clusterId != null) {
220248
ClusterIdHolder.set(clusterId);
221249
}

dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInstrumentation.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import datadog.trace.agent.tooling.Instrumenter;
1616
import datadog.trace.agent.tooling.InstrumenterModule;
1717
import datadog.trace.bootstrap.InstrumentationContext;
18+
import datadog.trace.instrumentation.kafka_common.MetadataState;
1819
import java.util.HashMap;
1920
import java.util.Iterator;
2021
import java.util.List;
@@ -46,7 +47,9 @@ public ElementMatcher.Junction<ClassLoader> classLoaderMatcher() {
4647
@Override
4748
public Map<String, String> contextStore() {
4849
Map<String, String> contextStores = new HashMap<>(2);
49-
contextStores.put("org.apache.kafka.clients.Metadata", "java.lang.String");
50+
contextStores.put(
51+
"org.apache.kafka.clients.Metadata",
52+
"datadog.trace.instrumentation.kafka_common.MetadataState");
5053
contextStores.put(
5154
"org.apache.kafka.clients.consumer.ConsumerRecords", KafkaConsumerInfo.class.getName());
5255
return contextStores;
@@ -73,6 +76,8 @@ public String[] helperClassNames() {
7376
packageName + ".TextMapInjectAdapter",
7477
"datadog.trace.instrumentation.kafka_common.Utils",
7578
"datadog.trace.instrumentation.kafka_common.StreamingContext",
79+
"datadog.trace.instrumentation.kafka_common.PendingConfig",
80+
"datadog.trace.instrumentation.kafka_common.MetadataState",
7681
};
7782
}
7883

@@ -113,7 +118,7 @@ public static void wrap(
113118
String group = KafkaConsumerInstrumentationHelper.extractGroup(kafkaConsumerInfo);
114119
String clusterId =
115120
KafkaConsumerInstrumentationHelper.extractClusterId(
116-
kafkaConsumerInfo, InstrumentationContext.get(Metadata.class, String.class));
121+
kafkaConsumerInfo, InstrumentationContext.get(Metadata.class, MetadataState.class));
117122
String bootstrapServers =
118123
KafkaConsumerInstrumentationHelper.extractBootstrapServers(kafkaConsumerInfo);
119124
iterable =
@@ -135,7 +140,7 @@ public static void wrap(
135140
String group = KafkaConsumerInstrumentationHelper.extractGroup(kafkaConsumerInfo);
136141
String clusterId =
137142
KafkaConsumerInstrumentationHelper.extractClusterId(
138-
kafkaConsumerInfo, InstrumentationContext.get(Metadata.class, String.class));
143+
kafkaConsumerInfo, InstrumentationContext.get(Metadata.class, MetadataState.class));
139144
String bootstrapServers =
140145
KafkaConsumerInstrumentationHelper.extractBootstrapServers(kafkaConsumerInfo);
141146
iterable =
@@ -157,7 +162,7 @@ public static void wrap(
157162
String group = KafkaConsumerInstrumentationHelper.extractGroup(kafkaConsumerInfo);
158163
String clusterId =
159164
KafkaConsumerInstrumentationHelper.extractClusterId(
160-
kafkaConsumerInfo, InstrumentationContext.get(Metadata.class, String.class));
165+
kafkaConsumerInfo, InstrumentationContext.get(Metadata.class, MetadataState.class));
161166
String bootstrapServers =
162167
KafkaConsumerInstrumentationHelper.extractBootstrapServers(kafkaConsumerInfo);
163168
iterator =

dd-java-agent/instrumentation/kafka/kafka-clients-0.11/src/main/java/datadog/trace/instrumentation/kafka_clients/KafkaConsumerInstrumentationHelper.java

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

33
import datadog.trace.api.Config;
44
import datadog.trace.bootstrap.ContextStore;
5+
import datadog.trace.instrumentation.kafka_common.MetadataState;
56
import org.apache.kafka.clients.Metadata;
67

78
public class KafkaConsumerInstrumentationHelper {
@@ -13,11 +14,13 @@ public static String extractGroup(KafkaConsumerInfo kafkaConsumerInfo) {
1314
}
1415

1516
public static String extractClusterId(
16-
KafkaConsumerInfo kafkaConsumerInfo, ContextStore<Metadata, String> metadataContextStore) {
17+
KafkaConsumerInfo kafkaConsumerInfo,
18+
ContextStore<Metadata, MetadataState> metadataContextStore) {
1719
if (Config.get().isDataStreamsEnabled() && kafkaConsumerInfo != null) {
1820
Metadata consumerMetadata = kafkaConsumerInfo.getClientMetadata();
1921
if (consumerMetadata != null) {
20-
return metadataContextStore.get(consumerMetadata);
22+
MetadataState state = metadataContextStore.get(consumerMetadata);
23+
return state != null ? state.clusterId : null;
2124
}
2225
}
2326
return null;

0 commit comments

Comments
 (0)