Skip to content

Commit d43a099

Browse files
committed
Do tags and baggage processing in ListWriter
1 parent d844053 commit d43a099

File tree

12 files changed

+50
-33
lines changed

12 files changed

+50
-33
lines changed

dd-java-agent/instrumentation/jsp-2.3/src/test/groovy/JSPInstrumentationBasicTests.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ class JSPInstrumentationBasicTests extends JSPTestBase {
110110
"$Tags.SPAN_KIND" Tags.SPAN_KIND_SERVER
111111
"$Tags.PEER_HOST_IPV4" "127.0.0.1"
112112
"$Tags.PEER_PORT" Integer
113-
"$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/getQuery.jsp"
113+
"$Tags.HTTP_URL" "http://localhost:$port/$jspWebappContext/getQuery.jsp?HELLO"
114114
"$DDTags.HTTP_QUERY" "HELLO"
115115
"$Tags.HTTP_HOSTNAME" "localhost"
116116
"$Tags.HTTP_METHOD" "GET"

dd-java-agent/instrumentation/spring-webflux-5/src/test/groovy/dd/trace/instrumentation/springwebflux/client/SpringWebfluxHttpClientBase.groovy

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import datadog.trace.agent.test.naming.TestingGenericHttpNamingConventions
66
import datadog.trace.api.DDSpanTypes
77
import datadog.trace.api.DDTags
88
import datadog.trace.bootstrap.instrumentation.api.Tags
9+
import datadog.trace.bootstrap.instrumentation.api.URIUtils
910
import datadog.trace.instrumentation.netty41.client.NettyHttpClientDecorator
1011
import datadog.trace.instrumentation.springwebflux.client.SpringWebfluxHttpClientDecorator
1112
import org.springframework.http.HttpMethod
@@ -64,6 +65,11 @@ abstract class SpringWebfluxHttpClientBase extends HttpClientTest implements Tes
6465
def leafParentId = trace.spanAssertCount.get()
6566
super.clientSpan(trace, parentSpan, method, renameService, tagQueryString, uri, status, error, exception)
6667
if (!exception) {
68+
def expectedQuery = tagQueryString ? uri.query : null
69+
def expectedUrl = URIUtils.buildURL(uri.scheme, uri.host, uri.port, uri.path)
70+
if (expectedQuery != null && !expectedQuery.empty) {
71+
expectedUrl = "$expectedUrl?$expectedQuery"
72+
}
6773
trace.span {
6874
childOf(trace.span(leafParentId))
6975
if (renameService) {
@@ -80,13 +86,13 @@ abstract class SpringWebfluxHttpClientBase extends HttpClientTest implements Tes
8086
"$Tags.PEER_HOSTNAME" "localhost"
8187
"$Tags.PEER_PORT" uri.port
8288
"$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional
83-
"$Tags.HTTP_URL" "${uri.resolve(uri.path)}"
89+
"$Tags.HTTP_URL" expectedUrl
8490
"$Tags.HTTP_METHOD" method
8591
if (status) {
8692
"$Tags.HTTP_STATUS" status
8793
}
8894
if (tagQueryString) {
89-
"$DDTags.HTTP_QUERY" uri.query
95+
"$DDTags.HTTP_QUERY" expectedQuery
9096
"$DDTags.HTTP_FRAGMENT" { it == null || it == uri.fragment } // Optional
9197
}
9298
if (exception) {

dd-java-agent/instrumentation/spring-webflux-6/src/test/groovy/dd/trace/instrumentation/springwebflux6/client/SpringWebfluxHttpClientBase.groovy

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import datadog.trace.api.DDSpanTypes
77
import datadog.trace.api.DDTags
88
import datadog.trace.api.naming.SpanNaming
99
import datadog.trace.bootstrap.instrumentation.api.Tags
10+
import datadog.trace.bootstrap.instrumentation.api.URIUtils
1011
import datadog.trace.instrumentation.netty41.client.NettyHttpClientDecorator
1112
import datadog.trace.instrumentation.springwebflux6.client.SpringWebfluxHttpClientDecorator
1213
import org.springframework.http.HttpMethod
@@ -63,6 +64,11 @@ abstract class SpringWebfluxHttpClientBase extends HttpClientTest implements Tes
6364
def leafParentId = trace.spanAssertCount.get()
6465
super.clientSpan(trace, parentSpan, method, renameService, tagQueryString, uri, status, error, exception)
6566
if (!exception) {
67+
def expectedQuery = tagQueryString ? uri.query : null
68+
def expectedUrl = URIUtils.buildURL(uri.scheme, uri.host, uri.port, uri.path)
69+
if (expectedQuery != null && !expectedQuery.empty) {
70+
expectedUrl = "$expectedUrl?$expectedQuery"
71+
}
6672
trace.span {
6773
childOf(trace.span(leafParentId))
6874
if (renameService) {
@@ -79,13 +85,13 @@ abstract class SpringWebfluxHttpClientBase extends HttpClientTest implements Tes
7985
"$Tags.PEER_HOSTNAME" "localhost"
8086
"$Tags.PEER_PORT" uri.port
8187
"$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" } // Optional
82-
"$Tags.HTTP_URL" "${uri.resolve(uri.path)}"
88+
"$Tags.HTTP_URL" expectedUrl
8389
"$Tags.HTTP_METHOD" method
8490
if (status) {
8591
"$Tags.HTTP_STATUS" status
8692
}
8793
if (tagQueryString) {
88-
"$DDTags.HTTP_QUERY" uri.query
94+
"$DDTags.HTTP_QUERY" expectedQuery
8995
"$DDTags.HTTP_FRAGMENT" { it == null || it == uri.fragment } // Optional
9096
}
9197
if (exception) {

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

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import datadog.trace.api.DDSpanTypes
88
import datadog.trace.api.DDTags
99
import datadog.trace.api.config.TracerConfig
1010
import datadog.trace.bootstrap.instrumentation.api.Tags
11+
import datadog.trace.bootstrap.instrumentation.api.URIUtils
1112
import datadog.trace.core.DDSpan
1213
import datadog.trace.core.datastreams.StatsGroup
1314
import datadog.trace.test.util.Flaky
@@ -748,6 +749,11 @@ abstract class HttpClientTest extends VersionedNamingTestBase {
748749

749750
// parent span must be cast otherwise it breaks debugging classloading (junit loads it early)
750751
void clientSpan(TraceAssert trace, Object parentSpan, String method = "GET", boolean renameService = false, boolean tagQueryString = false, URI uri = server.address.resolve("/success"), Integer status = 200, boolean error = false, Throwable exception = null, boolean ignorePeer = false) {
752+
def expectedQuery = tagQueryString ? uri.query : null
753+
def expectedUrl = URIUtils.buildURL(uri.scheme, uri.host, uri.port, uri.path)
754+
if (expectedQuery != null && !expectedQuery.empty) {
755+
expectedUrl = "$expectedUrl?$expectedQuery"
756+
}
751757
trace.span {
752758
if (parentSpan == null) {
753759
parent()
@@ -768,13 +774,13 @@ abstract class HttpClientTest extends VersionedNamingTestBase {
768774
"$Tags.PEER_HOSTNAME" { it == uri.host || ignorePeer }
769775
"$Tags.PEER_HOST_IPV4" { it == null || it == "127.0.0.1" || ignorePeer } // Optional
770776
"$Tags.PEER_PORT" { it == null || it == uri.port || it == proxy.port || it == 443 || ignorePeer }
771-
"$Tags.HTTP_URL" "${uri.resolve(uri.path)}" // remove fragment
777+
"$Tags.HTTP_URL" expectedUrl
772778
"$Tags.HTTP_METHOD" method
773779
if (status) {
774780
"$Tags.HTTP_STATUS" status
775781
}
776782
if (tagQueryString) {
777-
"$DDTags.HTTP_QUERY" uri.query
783+
"$DDTags.HTTP_QUERY" expectedQuery
778784
"$DDTags.HTTP_FRAGMENT" { it == null || it == uri.fragment } // Optional
779785
}
780786
if ({ isDataStreamsEnabled() }) {

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,12 @@ abstract class HttpServerTest<SERVER> extends WithHttpServer<SERVER> {
182182
String expectedUrl(ServerEndpoint endpoint, URI address) {
183183
URI url = endpoint.resolve(address)
184184
def path = Config.get().isHttpServerRawResource() && supportsRaw() ? url.rawPath : url.path
185-
return URIUtils.buildURL(url.scheme, url.host, url.port, path)
185+
def uri = URIUtils.buildURL(url.scheme, url.host, url.port, path)
186+
def qt = expectedQueryTag(endpoint)
187+
if (qt && !qt.isEmpty()) {
188+
uri = "$uri?$qt"
189+
}
190+
return uri
186191
}
187192

188193
Serializable expectedServerSpanRoute(ServerEndpoint endpoint) {

dd-trace-core/src/main/java/datadog/trace/civisibility/writer/ddintake/CiTestCycleMapperV1.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ public String endpoint() {
232232
return "citestcycle/v1";
233233
}
234234

235-
private static final class MetaWriter extends MetadataConsumer {
235+
private static final class MetaWriter implements MetadataConsumer {
236236

237237
private Writable writable;
238238

dd-trace-core/src/main/java/datadog/trace/common/writer/ListWriter.java

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
package datadog.trace.common.writer;
22

3-
import datadog.trace.api.DDTags;
4-
import datadog.trace.bootstrap.instrumentation.api.Tags;
53
import datadog.trace.core.DDSpan;
4+
import datadog.trace.core.MetadataConsumer;
65
import datadog.trace.core.tagprocessor.PeerServiceCalculator;
76
import java.util.ArrayList;
8-
import java.util.HashMap;
97
import java.util.List;
10-
import java.util.Map;
118
import java.util.concurrent.CopyOnWriteArrayList;
129
import java.util.concurrent.CountDownLatch;
1310
import java.util.concurrent.TimeUnit;
@@ -46,18 +43,9 @@ public void write(List<DDSpan> trace) {
4643
return;
4744
}
4845
for (DDSpan span : trace) {
49-
// todo: this can be better with span.processTagsAndBaggage(NoopMetadataConsumer.INSTANCE);
50-
// we cannot use the full postProcessor chain since it trigger also query obsfuscator and will
51-
// make fail a lot of tests
52-
// only kicks in peer.service computation (avoid scrambling queries and url)
53-
final Map<String, ?> enriched =
54-
peerServiceCalculator.processTags(new HashMap<>(span.getTags()));
55-
final Object peerServiceSource = enriched.get(DDTags.PEER_SERVICE_SOURCE);
56-
// we needed to copy the original tag map since it's unmodifiable
57-
if (peerServiceSource != null) {
58-
span.setTag(Tags.PEER_SERVICE, enriched.get(Tags.PEER_SERVICE));
59-
span.setTag(DDTags.PEER_SERVICE_SOURCE, peerServiceSource);
60-
}
46+
// This is needed to properly do all delayed processing to make this writer even
47+
// remotely realistic so the test actually test something
48+
span.processTagsAndBaggage(MetadataConsumer.NO_OP);
6149
}
6250
traceCount.incrementAndGet();
6351
synchronized (latches) {

dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/TraceMapperV0_4.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public TraceMapperV0_4() {
2929
this(5 << 20);
3030
}
3131

32-
private static final class MetaWriter extends MetadataConsumer {
32+
private static final class MetaWriter implements MetadataConsumer {
3333

3434
private Writable writable;
3535
private boolean writeSamplingPriority;

dd-trace-core/src/main/java/datadog/trace/common/writer/ddagent/TraceMapperV0_5.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ private List<ByteBuffer> toList() {
176176
}
177177
}
178178

179-
private final class MetaWriter extends MetadataConsumer {
179+
private final class MetaWriter implements MetadataConsumer {
180180

181181
private Writable writable;
182182
private boolean writeSamplingPriority;
Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package datadog.trace.core;
22

3-
public abstract class MetadataConsumer {
4-
public abstract void accept(Metadata metadata);
3+
import java.util.function.Consumer;
4+
5+
@FunctionalInterface
6+
public interface MetadataConsumer extends Consumer<Metadata> {
7+
8+
MetadataConsumer NO_OP = (md) -> {};
9+
10+
void accept(Metadata metadata);
511
}

0 commit comments

Comments
 (0)