Skip to content

Commit c42d72c

Browse files
authored
Override tracing preferred service name and pin to dynamic config (#6648)
* Override tracing preferred service name and pin to dynamic config * refactor
1 parent 47044c2 commit c42d72c

File tree

6 files changed

+75
-1
lines changed

6 files changed

+75
-1
lines changed

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,11 @@ abstract class AgentTestRunner extends DDSpecification implements AgentBuilder.L
221221
return null
222222
}
223223

224+
@Override
225+
String getPreferredServiceName() {
226+
return null
227+
}
228+
224229
@Override
225230
List<? extends SamplingRule.SpanSamplingRule> getSpanSamplingRules() {
226231
return null

dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,6 +230,11 @@ public AgentHistogram newHistogram(double relativeAccuracy, int maxNumBins) {
230230
return Histograms.newHistogram(relativeAccuracy, maxNumBins);
231231
}
232232

233+
@Override
234+
public void updatePreferredServiceName(String serviceName) {
235+
dynamicConfig.current().setPreferredServiceName(serviceName).apply();
236+
}
237+
233238
PropagationTags.Factory getPropagationTagsFactory() {
234239
return propagationTagsFactory;
235240
}
@@ -1533,7 +1538,12 @@ private DDSpanContext buildSpanContext() {
15331538
serviceName = rootSpan != null ? rootSpan.getServiceName() : null;
15341539
}
15351540
if (serviceName == null) {
1536-
serviceName = CoreTracer.this.serviceName;
1541+
serviceName = captureTraceConfig().getPreferredServiceName();
1542+
if (serviceName == null) {
1543+
// it could be on the initial snapshot but may be overridden to null and service name
1544+
// cannot be null
1545+
serviceName = CoreTracer.this.serviceName;
1546+
}
15371547
}
15381548

15391549
final CharSequence operationName =

dd-trace-core/src/test/groovy/datadog/trace/core/CoreTracerTest.groovy

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,23 @@ class CoreTracerTest extends DDCoreSpecification {
421421
cleanup:
422422
tracer?.close()
423423
}
424+
425+
def "test local root service name override"() {
426+
setup:
427+
def tracer = tracerBuilder().writer(new ListWriter()).serviceName("test").build()
428+
tracer.updatePreferredServiceName(preferred)
429+
when:
430+
def span = tracer.startSpan("", "test")
431+
span.finish()
432+
then:
433+
span.serviceName == expected
434+
cleanup:
435+
tracer?.close()
436+
where:
437+
preferred | expected
438+
null | "test"
439+
"some" | "some"
440+
}
424441
}
425442

426443
class ControllableSampler implements Sampler, PrioritySampler {

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,8 @@ public final class Builder {
107107

108108
Double traceSampleRate;
109109

110+
String preferredServiceName;
111+
110112
Builder() {}
111113

112114
Builder(Snapshot snapshot) {
@@ -121,6 +123,7 @@ public final class Builder {
121123
this.baggageMapping = snapshot.baggageMapping;
122124

123125
this.traceSampleRate = snapshot.traceSampleRate;
126+
this.preferredServiceName = snapshot.preferredServiceName;
124127
}
125128

126129
public Builder setRuntimeMetricsEnabled(boolean runtimeMetricsEnabled) {
@@ -192,6 +195,11 @@ public Builder setTraceSamplingRules(List<? extends TraceSamplingRule> traceSamp
192195
return this;
193196
}
194197

198+
public Builder setPreferredServiceName(String preferredServiceName) {
199+
this.preferredServiceName = preferredServiceName;
200+
return this;
201+
}
202+
195203
/** Overwrites the current configuration with a new snapshot. */
196204
public DynamicConfig<S> apply() {
197205
S oldSnapshot = currentSnapshot;
@@ -289,6 +297,8 @@ public static class Snapshot implements TraceConfig {
289297

290298
final Double traceSampleRate;
291299

300+
final String preferredServiceName;
301+
292302
protected Snapshot(DynamicConfig<?>.Builder builder, Snapshot oldSnapshot) {
293303

294304
this.runtimeMetricsEnabled = builder.runtimeMetricsEnabled;
@@ -304,6 +314,7 @@ protected Snapshot(DynamicConfig<?>.Builder builder, Snapshot oldSnapshot) {
304314

305315
this.spanSamplingRules = builder.spanSamplingRules;
306316
this.traceSamplingRules = builder.traceSamplingRules;
317+
this.preferredServiceName = builder.preferredServiceName;
307318
}
308319

309320
private static <K, V> Map<K, V> nullToEmpty(Map<K, V> mapping) {
@@ -350,6 +361,11 @@ public Double getTraceSampleRate() {
350361
return traceSampleRate;
351362
}
352363

364+
@Override
365+
public String getPreferredServiceName() {
366+
return preferredServiceName;
367+
}
368+
353369
@Override
354370
public List<? extends SpanSamplingRule> getSpanSamplingRules() {
355371
return spanSamplingRules;
@@ -385,6 +401,8 @@ public String toString() {
385401
+ traceSamplingRules
386402
+ ", traceSampleRate="
387403
+ traceSampleRate
404+
+ ", preferredServiceName="
405+
+ preferredServiceName
388406
+ '}';
389407
}
390408
}

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ public interface TraceConfig {
2424

2525
Double getTraceSampleRate();
2626

27+
/**
28+
* The preferred service name to be used for tracing.
29+
*
30+
* @return null if not set (will use tracing default one)
31+
*/
32+
String getPreferredServiceName();
33+
2734
/**
2835
* Get the tracer sampler Span Sampling Rules.
2936
*

internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/AgentTracer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,13 @@ default SpanBuilder buildSpan(CharSequence spanName) {
296296
ProfilingContextIntegration getProfilingContext();
297297

298298
AgentHistogram newHistogram(double relativeAccuracy, int maxNumBins);
299+
300+
/**
301+
* Sets the new service name to be used as a default
302+
*
303+
* @param serviceName
304+
*/
305+
void updatePreferredServiceName(String serviceName);
299306
}
300307

301308
public interface SpanBuilder {
@@ -534,6 +541,11 @@ public TraceConfig captureTraceConfig() {
534541
public AgentHistogram newHistogram(double relativeAccuracy, int maxNumBins) {
535542
return NoopAgentHistogram.INSTANCE;
536543
}
544+
545+
@Override
546+
public void updatePreferredServiceName(String serviceName) {
547+
// no ops
548+
}
537549
}
538550

539551
public static final class BlackholeAgentSpan extends NoopAgentSpan {
@@ -1260,6 +1272,11 @@ public Double getTraceSampleRate() {
12601272
return null;
12611273
}
12621274

1275+
@Override
1276+
public String getPreferredServiceName() {
1277+
return null;
1278+
}
1279+
12631280
@Override
12641281
public List<? extends SamplingRule.SpanSamplingRule> getSpanSamplingRules() {
12651282
return Collections.emptyList();

0 commit comments

Comments
 (0)