Skip to content

Commit e35f8b0

Browse files
authored
Merge branch 'master' into andrea.marziali/muzzle-back
2 parents 73641d6 + 1807b63 commit e35f8b0

File tree

7 files changed

+66
-34
lines changed

7 files changed

+66
-34
lines changed

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -86,8 +86,8 @@ private static class State {
8686
String metricsEndpoint;
8787
String dataStreamsEndpoint;
8888
boolean supportsLongRunning;
89-
boolean supportsDropping;
9089
boolean supportsClientSideStats;
90+
boolean supportsDropping;
9191
String state;
9292
String configEndpoint;
9393
String debuggerLogEndpoint;
@@ -166,7 +166,7 @@ private void doDiscovery(State newState) {
166166
errorQueryingEndpoint("info", error);
167167
}
168168
if (fallback) {
169-
newState.supportsDropping = false;
169+
newState.supportsClientSideStats = false;
170170
newState.supportsLongRunning = false;
171171
log.debug("Falling back to probing, client dropping will be disabled");
172172
// disable metrics unless the info endpoint is present, which prevents
@@ -307,13 +307,15 @@ private boolean processInfoResponse(State newState, String response) {
307307
Boolean.TRUE.equals(map.getOrDefault("long_running_spans", false));
308308

309309
if (metricsEnabled) {
310-
newState.supportsClientSideStats = !AgentVersion.isVersionBelow(newState.version, 7, 65, 0);
311310
Object canDrop = map.get("client_drop_p0s");
312311
newState.supportsDropping =
313312
null != canDrop
314313
&& ("true".equalsIgnoreCase(String.valueOf(canDrop))
315314
|| Boolean.TRUE.equals(canDrop));
316315

316+
newState.supportsClientSideStats =
317+
newState.supportsDropping && !AgentVersion.isVersionBelow(newState.version, 7, 65, 0);
318+
317319
Object peer_tags = map.get("peer_tags");
318320
newState.peerTags =
319321
peer_tags instanceof List
@@ -360,7 +362,6 @@ private static void discoverStatsDPort(final Map<String, Object> info) {
360362
public boolean supportsMetrics() {
361363
return metricsEnabled
362364
&& null != discoveryState.metricsEndpoint
363-
&& discoveryState.supportsDropping
364365
&& discoveryState.supportsClientSideStats;
365366
}
366367

@@ -380,10 +381,6 @@ public boolean supportsDebuggerDiagnostics() {
380381
return discoveryState.debuggerDiagnosticsEndpoint != null;
381382
}
382383

383-
public boolean supportsDropping() {
384-
return discoveryState.supportsDropping;
385-
}
386-
387384
public boolean supportsLongRunning() {
388385
return discoveryState.supportsLongRunning;
389386
}

communication/src/test/groovy/datadog/communication/ddagent/DDAgentFeaturesDiscoveryTest.groovy

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
6060
features.getMetricsEndpoint() == V6_METRICS_ENDPOINT
6161
!features.supportsMetrics()
6262
features.getTraceEndpoint() == "v0.5/traces"
63-
!features.supportsDropping()
6463
features.getDataStreamsEndpoint() == V01_DATASTREAMS_ENDPOINT
6564
features.supportsDataStreams()
6665
features.state() == INFO_STATE
@@ -118,7 +117,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
118117
features.getMetricsEndpoint() == V6_METRICS_ENDPOINT
119118
!features.supportsMetrics()
120119
features.getTraceEndpoint() == "v0.5/traces"
121-
!features.supportsDropping()
122120
features.getDataStreamsEndpoint() == V01_DATASTREAMS_ENDPOINT
123121
features.supportsDataStreams()
124122
features.state() == INFO_STATE
@@ -145,7 +143,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
145143
features.getMetricsEndpoint() == V6_METRICS_ENDPOINT
146144
features.supportsMetrics()
147145
features.getTraceEndpoint() == "v0.5/traces"
148-
features.supportsDropping()
149146
features.state() == INFO_WITH_CLIENT_DROPPING_STATE
150147
0 * _
151148
}
@@ -201,7 +198,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
201198
features.getMetricsEndpoint() == null
202199
!features.supportsMetrics()
203200
features.getTraceEndpoint() == "v0.5/traces"
204-
!features.supportsDropping()
205201
!features.supportsLongRunning()
206202
features.state() == PROBE_STATE
207203
0 * _
@@ -222,7 +218,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
222218
features.getMetricsEndpoint() == null
223219
!features.supportsMetrics()
224220
features.getTraceEndpoint() == "v0.5/traces"
225-
!features.supportsDropping()
226221
!features.supportsLongRunning()
227222
features.state() == PROBE_STATE
228223
0 * _
@@ -245,7 +240,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
245240
features.getMetricsEndpoint() == null
246241
!features.supportsMetrics()
247242
features.getTraceEndpoint() == "v0.4/traces"
248-
!features.supportsDropping()
249243
features.state() == PROBE_STATE
250244
0 * _
251245
}
@@ -267,7 +261,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
267261
features.getMetricsEndpoint() == null
268262
!features.supportsMetrics()
269263
features.getTraceEndpoint() == "v0.4/traces"
270-
!features.supportsDropping()
271264
features.state() == PROBE_STATE
272265
0 * _
273266
}
@@ -290,7 +283,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
290283
!features.supportsMetrics()
291284
features.getTraceEndpoint() == "v0.3/traces"
292285
!features.supportsLongRunning()
293-
!features.supportsDropping()
294286
features.state() == PROBE_STATE
295287
0 * _
296288
}
@@ -308,7 +300,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
308300
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.5/traces" }) >> { Request request -> success(request) }
309301
0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.6/stats" })
310302
!features.supportsMetrics()
311-
!features.supportsDropping()
312303
!(features as DroppingPolicy).active()
313304
features.state() == PROBE_STATE
314305

@@ -318,7 +309,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
318309
then: "metrics and dropping not supported"
319310
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) }
320311
!features.supportsMetrics()
321-
!features.supportsDropping()
322312
!(features as DroppingPolicy).active()
323313
features.state() == INFO_WITH_CLIENT_DROPPING_STATE
324314

@@ -328,7 +318,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
328318
then: "metrics and dropping not supported"
329319
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_RESPONSE) }
330320
!features.supportsMetrics()
331-
!features.supportsDropping()
332321
!(features as DroppingPolicy).active()
333322
features.state() == INFO_STATE
334323
0 * _
@@ -346,7 +335,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
346335
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> notFound(request) }
347336
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) }
348337
0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.6/stats" })
349-
!features.supportsDropping()
350338
!features.supportsMetrics()
351339
!(features as DroppingPolicy).active()
352340
features.state() == PROBE_STATE
@@ -357,7 +345,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
357345
then: "metrics endpoint not probed, metrics and dropping enabled"
358346
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) }
359347
0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) }
360-
features.supportsDropping()
361348
features.supportsMetrics()
362349
(features as DroppingPolicy).active()
363350
features.state() == INFO_WITH_CLIENT_DROPPING_STATE
@@ -376,7 +363,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
376363
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) }
377364
0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) }
378365
0 * client.newCall(_)
379-
features.supportsDropping()
380366
features.supportsMetrics()
381367
(features as DroppingPolicy).active()
382368
features.state() == INFO_WITH_CLIENT_DROPPING_STATE
@@ -388,7 +374,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
388374
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> notFound(request) }
389375
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) }
390376
0 * client.newCall(_)
391-
!features.supportsDropping()
392377
!features.supportsMetrics()
393378
!(features as DroppingPolicy).active()
394379
features.state() == PROBE_STATE
@@ -407,7 +392,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
407392
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITH_CLIENT_DROPPING_RESPONSE) }
408393
0 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/v0.4/traces" }) >> { Request request -> success(request) }
409394
0 * client.newCall(_)
410-
features.supportsDropping()
411395
features.supportsMetrics()
412396
(features as DroppingPolicy).active()
413397
features.state() == INFO_WITH_CLIENT_DROPPING_STATE
@@ -418,8 +402,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
418402
then: "metrics and dropping not supported"
419403
1 * client.newCall({ Request request -> request.url().toString() == "http://localhost:8125/info" }) >> { Request request -> infoResponse(request, INFO_WITHOUT_METRICS_RESPONSE) }
420404
0 * client.newCall(_)
421-
// misconfigured agent allows dropping but not metrics
422-
features.supportsDropping()
423405
!features.supportsMetrics()
424406
// but we don't permit dropping anyway
425407
!(features as DroppingPolicy).active()
@@ -481,7 +463,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
481463
then:
482464
1 * client.newCall(_) >> { Request request -> infoResponse(request, INFO_WITH_PEER_TAG_BACK_PROPAGATION_RESPONSE) }
483465
features.state() == INFO_WITH_PEER_TAG_BACK_PROPAGATION_STATE
484-
features.supportsDropping()
485466
features.peerTags().containsAll(
486467
"_dd.base_service",
487468
"active_record.db.vendor",
@@ -519,7 +500,6 @@ class DDAgentFeaturesDiscoveryTest extends DDSpecification {
519500
infoResponse(request, response)
520501
}
521502
features.getMetricsEndpoint() == V6_METRICS_ENDPOINT
522-
features.supportsDropping() == true
523503
features.supportsMetrics() == expected
524504

525505
where:

dd-java-agent/instrumentation-testing/src/main/groovy/datadog/trace/agent/test/base/HttpServerTest.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2348,6 +2348,7 @@ abstract class HttpServerTest<SERVER> extends WithHttpServer<SERVER> {
23482348
/**
23492349
* This test should be done in a forked test class
23502350
*/
2351+
@Flaky("https://datadoghq.atlassian.net/browse/APMLP-785")
23512352
def "test rum injection in head for mime #mime"() {
23522353
setup:
23532354
assumeTrue(testRumInjection())

dd-java-agent/instrumentation/servlet/javax-servlet/javax-servlet-3.0/src/main/java/datadog/trace/instrumentation/servlet3/RumAsyncContextInstrumentation.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,11 @@ public ElementMatcher<TypeDescription> hierarchyMatcher() {
4141
return implementsInterface(named(hierarchyMarkerType()));
4242
}
4343

44+
@Override
45+
public String muzzleDirective() {
46+
return "servlet-3.x";
47+
}
48+
4449
@Override
4550
public boolean isEnabled() {
4651
return super.isEnabled() && InstrumenterConfig.get().isRumEnabled();

dd-trace-core/src/main/java/datadog/trace/common/metrics/ConflatingMetricsAggregator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -289,8 +289,7 @@ public boolean publish(List<? extends CoreSpan<?>> trace) {
289289
forceKeep |= publish(span, isTopLevel, spanKind);
290290
}
291291
}
292-
healthMetrics.onClientStatTraceComputed(
293-
counted, trace.size(), features.supportsDropping() && !forceKeep);
292+
healthMetrics.onClientStatTraceComputed(counted, trace.size(), !forceKeep);
294293
}
295294
return forceKeep;
296295
}

internal-api/src/main/java/datadog/trace/api/ProcessTags.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,10 @@ static void calculate() {
146146
.map(
147147
entry ->
148148
UTF8BytesString.create(
149-
entry.getKey() + ":" + TraceUtils.normalizeTagValue(entry.getValue())));
149+
entry.getKey()
150+
+ ":"
151+
+ TraceUtils.normalizeTagValue(
152+
entry.getValue().replace(':', '_'))));
150153
utf8ListForm = Collections.unmodifiableList(tagStream.collect(Collectors.toList()));
151154
stringListForm =
152155
Collections.unmodifiableList(

internal-api/src/test/groovy/datadog/trace/api/ProcessTagsForkedTest.groovy

Lines changed: 50 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
package datadog.trace.api
22

3+
import static datadog.trace.api.config.GeneralConfig.EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED
4+
35
import datadog.trace.api.env.CapturedEnvironment
46
import datadog.trace.test.util.DDSpecification
5-
67
import java.nio.file.Paths
78

8-
import static datadog.trace.api.config.GeneralConfig.EXPERIMENTAL_PROPAGATE_PROCESS_TAGS_ENABLED
9-
109
class ProcessTagsForkedTest extends DDSpecification {
1110

1211
def originalProcessInfo
@@ -129,4 +128,52 @@ class ProcessTagsForkedTest extends DDSpecification {
129128
assert ProcessTags.tagsAsStringList[0] == "0test:value"
130129
assert ProcessTags.tagsAsUTF8ByteStringList[0].toString() == "0test:value"
131130
}
131+
132+
def 'process tag value normalization'() {
133+
setup:
134+
ProcessTags.reset()
135+
ProcessTags.addTag("test", testValue)
136+
expect:
137+
assert ProcessTags.tagsAsStringList != null
138+
assert ProcessTags.tagsAsStringList.find { it.startsWith("test:") } == "test:${expectedValue}"
139+
140+
where:
141+
testValue | expectedValue
142+
"#test_starting_hash" | "test_starting_hash"
143+
"TestCAPSandSuch" | "testcapsandsuch"
144+
"Test Conversion Of Weird !@#\$%^&**() Characters" | "test_conversion_of_weird_characters"
145+
"\$#weird_starting" | "weird_starting"
146+
"disallowed:c0l0ns" | "disallowed_c0l0ns"
147+
"1love" | "1love"
148+
"123456" | "123456"
149+
"7.0" | "7.0"
150+
"ünicöde" | "ünicöde"
151+
"ünicöde:metäl" | "ünicöde_metäl"
152+
"Data🐨dog🐶 繋がっ⛰てて" | "data_dog_繋がっ_てて"
153+
" spaces " | "spaces"
154+
" #hashtag!@#spaces #__<># " | "hashtag_spaces"
155+
":testing" | "testing"
156+
"_foo" | "foo"
157+
":::test" | "test"
158+
"contiguous_____underscores" | "contiguous_underscores"
159+
"foo_" | "foo"
160+
"" | ""
161+
" " | ""
162+
"ok" | "ok"
163+
"AlsO:ök" | "also_ök"
164+
":still_ok" | "still_ok"
165+
"___trim" | "trim"
166+
"fun:ky__tag/1" | "fun_ky_tag/1"
167+
"fun:ky@tag/2" | "fun_ky_tag/2"
168+
"fun:ky@@@tag/3" | "fun_ky_tag/3"
169+
"tag:1/2.3" | "tag_1/2.3"
170+
"---fun:k####y_ta@#g/1_@@#" | "fun_k_y_ta_g/1"
171+
"AlsO:œ#@ö))œk" | "also_œ_ö_œk"
172+
" regulartag " | "regulartag"
173+
"\u017Fodd_\u017Fcase\u017F" | "\u017Fodd_\u017Fcase\u017F"
174+
"™Ö™Ö™™Ö™" | "ö_ö_ö"
175+
"a�" | "a"
176+
"a��" | "a"
177+
"a��b" | "a_b"
178+
}
132179
}

0 commit comments

Comments
 (0)