diff --git a/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/RemoteHostnameAdder.java b/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/RemoteHostnameAdder.java index 41947b375d8..bc0939a74cb 100644 --- a/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/RemoteHostnameAdder.java +++ b/dd-trace-core/src/main/java/datadog/trace/core/tagprocessor/RemoteHostnameAdder.java @@ -9,6 +9,8 @@ public final class RemoteHostnameAdder extends TagsPostProcessor { private final Supplier hostnameSupplier; + private TagMap.Entry cachedHostEntry = null; + public RemoteHostnameAdder(Supplier hostnameSupplier) { this.hostnameSupplier = hostnameSupplier; } @@ -16,8 +18,23 @@ public RemoteHostnameAdder(Supplier hostnameSupplier) { @Override public void processTags( TagMap unsafeTags, DDSpanContext spanContext, AppendableSpanLinks spanLinks) { - if (spanContext.getSpanId() == spanContext.getRootSpanId()) { - unsafeTags.put(DDTags.TRACER_HOST, hostnameSupplier.get()); + if (spanContext.getSpanId() != spanContext.getRootSpanId()) { + return; + } + + String hostname = hostnameSupplier.get(); + if (hostname == null) { + return; } + + TagMap.Entry cachedHostEntry = this.cachedHostEntry; + if (cachedHostEntry != null && hostname.equals(cachedHostEntry.objectValue())) { + unsafeTags.set(cachedHostEntry); + return; + } + + TagMap.Entry newEntry = TagMap.Entry.create(DDTags.TRACER_HOST, hostname); + unsafeTags.set(newEntry); + this.cachedHostEntry = newEntry; } }