diff --git a/dd-trace/src/main/java/datadog/trace/tracer/SpanImpl.java b/dd-trace/src/main/java/datadog/trace/tracer/SpanImpl.java index 0ee412afa9..a311aa11d0 100644 --- a/dd-trace/src/main/java/datadog/trace/tracer/SpanImpl.java +++ b/dd-trace/src/main/java/datadog/trace/tracer/SpanImpl.java @@ -4,7 +4,6 @@ import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonGetter; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.annotation.JsonSerialize; @@ -215,7 +214,6 @@ class SpanImpl implements Span { } @Override - @JsonIgnore public synchronized Map getMeta() { return Collections.unmodifiableMap(meta); } diff --git a/dd-trace/src/main/java/datadog/trace/tracer/Tracer.java b/dd-trace/src/main/java/datadog/trace/tracer/Tracer.java index 4aaf25bb09..0a5c9a5274 100644 --- a/dd-trace/src/main/java/datadog/trace/tracer/Tracer.java +++ b/dd-trace/src/main/java/datadog/trace/tracer/Tracer.java @@ -148,6 +148,8 @@ public class Tracer implements Closeable { @Override public void close() { + // FIXME: Handle the possibility of close being called more than once or not at all. + // FIXME: Depends on order of execution between finalize, GC, and the shutdown hook. writer.close(); } diff --git a/dd-trace/src/test/groovy/datadog/trace/tracer/TracerTest.groovy b/dd-trace/src/test/groovy/datadog/trace/tracer/TracerTest.groovy index 99fed2be57..ac2a203f57 100644 --- a/dd-trace/src/test/groovy/datadog/trace/tracer/TracerTest.groovy +++ b/dd-trace/src/test/groovy/datadog/trace/tracer/TracerTest.groovy @@ -45,6 +45,26 @@ class TracerTest extends Specification { 0 * _ // don't allow any other interaction } + def "finalize closes writer"() { + setup: + def writer = Mock(Writer) + def tracer = Tracer.builder().writer(writer).build() + + when: + tracer.finalize() + + then: "closed writer" + 1 * writer.close() + 0 * _ // don't allow any other interaction + + when: + tracer.finalize() + + then: "thrown error swallowed" + 1 * writer.close() >> { throw new Exception("test error") } + 0 * _ // don't allow any other interaction + } + def "test create current timestamp"() { setup: def tracer = Tracer.builder().config(config).build()