Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,11 @@ abstract class AgentTestRunner extends DDSpecification implements AgentBuilder.L
return null
}

@Override
String getPreferredServiceName() {
return null
}

@Override
List<? extends SamplingRule.SpanSamplingRule> getSpanSamplingRules() {
return null
Expand Down
12 changes: 11 additions & 1 deletion dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,11 @@ public AgentHistogram newHistogram(double relativeAccuracy, int maxNumBins) {
return Histograms.newHistogram(relativeAccuracy, maxNumBins);
}

@Override
public void updatePreferredServiceName(String serviceName) {
dynamicConfig.current().setPreferredServiceName(serviceName).apply();
}

PropagationTags.Factory getPropagationTagsFactory() {
return propagationTagsFactory;
}
Expand Down Expand Up @@ -1533,7 +1538,12 @@ private DDSpanContext buildSpanContext() {
serviceName = rootSpan != null ? rootSpan.getServiceName() : null;
}
if (serviceName == null) {
serviceName = CoreTracer.this.serviceName;
serviceName = captureTraceConfig().getPreferredServiceName();
if (serviceName == null) {
// it could be on the initial snapshot but may be overridden to null and service name
// cannot be null
serviceName = CoreTracer.this.serviceName;
}
}

final CharSequence operationName =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -421,6 +421,23 @@ class CoreTracerTest extends DDCoreSpecification {
cleanup:
tracer?.close()
}

def "test local root service name override"() {
setup:
def tracer = tracerBuilder().writer(new ListWriter()).serviceName("test").build()
tracer.updatePreferredServiceName(preferred)
when:
def span = tracer.startSpan("", "test")
span.finish()
then:
span.serviceName == expected
cleanup:
tracer?.close()
where:
preferred | expected
null | "test"
"some" | "some"
}
}

class ControllableSampler implements Sampler, PrioritySampler {
Expand Down
18 changes: 18 additions & 0 deletions internal-api/src/main/java/datadog/trace/api/DynamicConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,8 @@ public final class Builder {

Double traceSampleRate;

String preferredServiceName;

Builder() {}

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

this.traceSampleRate = snapshot.traceSampleRate;
this.preferredServiceName = snapshot.preferredServiceName;
}

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

public Builder setPreferredServiceName(String preferredServiceName) {
this.preferredServiceName = preferredServiceName;
return this;
}

/** Overwrites the current configuration with a new snapshot. */
public DynamicConfig<S> apply() {
S oldSnapshot = currentSnapshot;
Expand Down Expand Up @@ -289,6 +297,8 @@ public static class Snapshot implements TraceConfig {

final Double traceSampleRate;

final String preferredServiceName;

protected Snapshot(DynamicConfig<?>.Builder builder, Snapshot oldSnapshot) {

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

this.spanSamplingRules = builder.spanSamplingRules;
this.traceSamplingRules = builder.traceSamplingRules;
this.preferredServiceName = builder.preferredServiceName;
}

private static <K, V> Map<K, V> nullToEmpty(Map<K, V> mapping) {
Expand Down Expand Up @@ -350,6 +361,11 @@ public Double getTraceSampleRate() {
return traceSampleRate;
}

@Override
public String getPreferredServiceName() {
return preferredServiceName;
}

@Override
public List<? extends SpanSamplingRule> getSpanSamplingRules() {
return spanSamplingRules;
Expand Down Expand Up @@ -385,6 +401,8 @@ public String toString() {
+ traceSamplingRules
+ ", traceSampleRate="
+ traceSampleRate
+ ", preferredServiceName="
+ preferredServiceName
+ '}';
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,13 @@ public interface TraceConfig {

Double getTraceSampleRate();

/**
* The preferred service name to be used for tracing.
*
* @return null if not set (will use tracing default one)
*/
String getPreferredServiceName();

/**
* Get the tracer sampler Span Sampling Rules.
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,13 @@ default SpanBuilder buildSpan(CharSequence spanName) {
ProfilingContextIntegration getProfilingContext();

AgentHistogram newHistogram(double relativeAccuracy, int maxNumBins);

/**
* Sets the new service name to be used as a default
*
* @param serviceName
*/
void updatePreferredServiceName(String serviceName);
}

public interface SpanBuilder {
Expand Down Expand Up @@ -534,6 +541,11 @@ public TraceConfig captureTraceConfig() {
public AgentHistogram newHistogram(double relativeAccuracy, int maxNumBins) {
return NoopAgentHistogram.INSTANCE;
}

@Override
public void updatePreferredServiceName(String serviceName) {
// no ops
}
}

public static final class BlackholeAgentSpan extends NoopAgentSpan {
Expand Down Expand Up @@ -1260,6 +1272,11 @@ public Double getTraceSampleRate() {
return null;
}

@Override
public String getPreferredServiceName() {
return null;
}

@Override
public List<? extends SamplingRule.SpanSamplingRule> getSpanSamplingRules() {
return Collections.emptyList();
Expand Down