diff --git a/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/InternalTagsAdder.java b/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/InternalTagsAdder.java index 68b13d19faf..34588dc9da4 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/InternalTagsAdder.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/InternalTagsAdder.java @@ -7,32 +7,40 @@ import datadog.trace.bootstrap.instrumentation.api.AppendableSpanLinks; import datadog.trace.bootstrap.instrumentation.api.UTF8BytesString; import datadog.trace.core.DDSpanContext; +import javax.annotation.Nonnull; import javax.annotation.Nullable; public final class InternalTagsAdder extends TagsPostProcessor { private final UTF8BytesString ddService; - private final UTF8BytesString version; - public InternalTagsAdder(@Nullable final String ddService, @Nullable final String version) { - this.ddService = ddService != null ? UTF8BytesString.create(ddService) : null; - this.version = version != null && !version.isEmpty() ? UTF8BytesString.create(version) : null; + // Prebuilt once to avoid per-span Entry allocation. + private final TagMap.Entry baseServiceEntry; + @Nullable private final TagMap.Entry versionEntry; + + public InternalTagsAdder(@Nonnull final String ddService, @Nullable final String version) { + this.ddService = UTF8BytesString.create(ddService); + this.baseServiceEntry = TagMap.Entry.create(DDTags.BASE_SERVICE, this.ddService); + this.versionEntry = + version != null && !version.isEmpty() + ? TagMap.Entry.create(VERSION, UTF8BytesString.create(version)) + : null; } @Override public void processTags( TagMap unsafeTags, DDSpanContext spanContext, AppendableSpanLinks spanLinks) { - if (spanContext == null || ddService == null) { + if (spanContext == null) { return; } if (!ddService.toString().equalsIgnoreCase(spanContext.getServiceName())) { - // service name != DD_SERVICE - unsafeTags.set(DDTags.BASE_SERVICE, ddService); + // service name != DD_SERVICE + unsafeTags.set(baseServiceEntry); } else { // as per config consistency, the version tag is added across tracers only if // the service name is DD_SERVICE and version tag is not manually set - if (version != null && !unsafeTags.containsKey(VERSION)) { - unsafeTags.set(VERSION, version); + if (versionEntry != null && !unsafeTags.containsKey(VERSION)) { + unsafeTags.set(versionEntry); } } }