diff --git a/.gitignore b/.gitignore index c0a3593f4..c87d599c0 100644 --- a/.gitignore +++ b/.gitignore @@ -53,6 +53,7 @@ local.properties # IntelliJ /out/ /jaeger-core/out/ +/jaeger-core-ot-0.32.0-itest/out/ ### Intellij Patch ### # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 diff --git a/build.gradle b/build.gradle index b00f08780..c9b100c2d 100644 --- a/build.gradle +++ b/build.gradle @@ -17,13 +17,13 @@ plugins { id 'net.researchgate.release' version '2.6.0' } -ext.opentracingVersion = getProperty('opentracingVersion','0.32.0') +ext.opentracingVersion = getProperty('opentracingVersion','0.33.0') ext.guavaVersion = getProperty('guavaVersion','18.0') ext.apacheThriftVersion = getProperty('apacheThriftVersion','0.12.0') ext.jerseyVersion = getProperty('jerseyVersion','2.22.2') ext.slf4jVersion = getProperty('slf4jVersion','1.7.25') ext.gsonVersion = getProperty('gsonVersion','2.8.2') -ext.tracerResolverVersion = getProperty('tracerResolverVersion','0.1.6') +ext.tracerResolverVersion = getProperty('tracerResolverVersion','0.1.8') ext.micrometerVersion = getProperty('micrometerVersion','1.0.0') ext.okhttpVersion = getProperty('okhttpVersion','3.9.0') diff --git a/jaeger-core-ot-0.32.0-itest/build.gradle b/jaeger-core-ot-0.32.0-itest/build.gradle new file mode 100644 index 000000000..2ae7c55a9 --- /dev/null +++ b/jaeger-core-ot-0.32.0-itest/build.gradle @@ -0,0 +1,16 @@ +description = 'Test module for compatibility with opentracing-api:0.32.0' + +dependencies { + testCompile group: 'io.opentracing', name: 'opentracing-api', version: "0.32.0" + testCompile group: 'io.opentracing', name: 'opentracing-util', version: "0.32.0" + testCompile group: 'com.google.code.gson', name: 'gson', version: gsonVersion + testCompile group: 'org.slf4j', name: 'slf4j-api', version: slf4jVersion + + testCompile group: 'junit', name: 'junit', version: junitVersion + testCompile group: 'org.mockito', name: 'mockito-core', version: mockitoVersion + + testCompile files(this.project(':jaeger-core').sourceSets.test.output) + testCompile files(this.project(':jaeger-core').sourceSets.main.output) +} + + diff --git a/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/ActiveSpan032Test.java b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/ActiveSpan032Test.java new file mode 100644 index 000000000..6274575cb --- /dev/null +++ b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/ActiveSpan032Test.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2016, Uber Technologies, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package io.jaegertracing.internal; + +public class ActiveSpan032Test extends ActiveSpanTest { +} diff --git a/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/RemovedFrom032Test.java b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/RemovedFrom032Test.java new file mode 100644 index 000000000..668186d92 --- /dev/null +++ b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/RemovedFrom032Test.java @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2016, Uber Technologies, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package io.jaegertracing.internal; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import io.jaegertracing.internal.reporters.InMemoryReporter; +import io.jaegertracing.internal.samplers.ConstSampler; +import io.opentracing.Scope; +import io.opentracing.Span; +import io.opentracing.Tracer; +import io.opentracing.util.AutoFinishScopeManager; +import java.util.Collections; +import org.junit.Before; +import org.junit.Test; + +/** + * Tests for removed deprecated APIs from 0.32.0 to 0.33.0. + */ +@SuppressWarnings("deprecation") +public class RemovedFrom032Test { + private static final String SPAN_NAME = "foo"; + + private InMemoryReporter reporter; + private Tracer tracer; + + @Before + public void setUp() { + reporter = new InMemoryReporter(); + tracer = + new JaegerTracer.Builder("TracerTestService") + .withReporter(reporter) + .withSampler(new ConstSampler(true)) + .build(); + } + + @Test + public void testScopeManager_active() { + Span span = tracer.buildSpan(SPAN_NAME).start(); + Scope scope = tracer.activateSpan(span); + try { + assertEquals(scope, tracer.scopeManager().active()); + } finally { + scope.close(); + } + } + + @Test + public void testScopeManager_activate_and_not_finish() { + Span span = tracer.buildSpan(SPAN_NAME).start(); + Scope scope = tracer.scopeManager().activate(span, false); + try { + assertEquals(scope, tracer.scopeManager().active()); + } finally { + scope.close(); + } + assertEquals(0, reporter.getSpans().size()); + } + + @Test + public void testScopeManager_activate_and_finish() { + Span span = tracer.buildSpan(SPAN_NAME).start(); + Scope scope = tracer.scopeManager().activate(span, true); + try { + assertEquals(scope, tracer.scopeManager().active()); + } finally { + scope.close(); + } + assertEquals(Collections.singletonList(span), reporter.getSpans()); + } + + @Test + public void testScope_span() { + Span span = tracer.buildSpan(SPAN_NAME).start(); + Scope scope = tracer.scopeManager().activate(span); + try { + assertEquals(span, scope.span()); + } finally { + scope.close(); + } + } + + @Test + public void testSpanBuilder_startActive() { + Scope scope = tracer.buildSpan(SPAN_NAME).startActive(true); + try { + assertEquals(scope.span(), tracer.activeSpan()); + } finally { + scope.close(); + } + assertEquals(Collections.singletonList(scope.span()), reporter.getSpans()); + } + + @Test + public void testTracer_startManual() { + Span span = tracer.buildSpan(SPAN_NAME).startManual(); + assertEquals(null, tracer.activeSpan()); + span.finish(); + assertEquals(Collections.singletonList(span), reporter.getSpans()); + } + + @Test + public void testAutoFinishScopeManager() { + assertNotNull(new AutoFinishScopeManager()); + } +} diff --git a/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/Tracer032Test.java b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/Tracer032Test.java new file mode 100644 index 000000000..482e1a456 --- /dev/null +++ b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/Tracer032Test.java @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2016, Uber Technologies, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package io.jaegertracing.internal; + +public class Tracer032Test extends JaegerTracerTest { +} diff --git a/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/Version032Test.java b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/Version032Test.java new file mode 100644 index 000000000..6acc7e247 --- /dev/null +++ b/jaeger-core-ot-0.32.0-itest/src/test/java/io/jaegertracing/internal/Version032Test.java @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016, Uber Technologies, Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package io.jaegertracing.internal; + +import static org.junit.Assert.assertNotNull; + +import io.opentracing.ScopeManager; +import io.opentracing.Span; +import org.junit.Test; + +public class Version032Test { + + @Test + public void testVersion_0_32() throws NoSuchMethodException { + assertNotNull(ScopeManager.class.getMethod("activate", Span.class, boolean.class) + .getAnnotation(Deprecated.class)); + } +} diff --git a/jaeger-core/src/main/java/io/jaegertracing/internal/JaegerTracer.java b/jaeger-core/src/main/java/io/jaegertracing/internal/JaegerTracer.java index 6303b5b71..ab516b491 100644 --- a/jaeger-core/src/main/java/io/jaegertracing/internal/JaegerTracer.java +++ b/jaeger-core/src/main/java/io/jaegertracing/internal/JaegerTracer.java @@ -475,9 +475,26 @@ public JaegerSpan start() { return jaegerSpan; } - @Override - public Scope startActive(boolean finishSpanOnClose) { - return scopeManager.activate(start(), finishSpanOnClose); + @Deprecated + // @Override keep compatibility with 0.32.0 + public Scope startActive(final boolean finishSpanOnClose) { + if (!finishSpanOnClose) { + return scopeManager.activate(start()); + } + return new Scope() { + Span span = start(); + Scope wrapped = scopeManager.activate(span); + @Override + public void close() { + wrapped.close(); + span.finish(); + } + + // @Override keep compatibility with 0.32.0 + public Span span() { + return span; + } + }; } @Override @@ -486,9 +503,9 @@ public JaegerTracer.SpanBuilder ignoreActiveSpan() { return this; } - @Override @Deprecated - public JaegerSpan startManual() { + // @Override keep compatibility with 0.32.0 + public Span startManual() { return start(); } diff --git a/jaeger-core/src/test/java/io/jaegertracing/internal/ActiveSpanTest.java b/jaeger-core/src/test/java/io/jaegertracing/internal/ActiveSpanTest.java index 319ba45bf..de2a39208 100644 --- a/jaeger-core/src/test/java/io/jaegertracing/internal/ActiveSpanTest.java +++ b/jaeger-core/src/test/java/io/jaegertracing/internal/ActiveSpanTest.java @@ -31,8 +31,8 @@ import org.mockito.Mockito; public class ActiveSpanTest { - InMemoryReporter reporter; - JaegerTracer tracer; + protected InMemoryReporter reporter; + protected JaegerTracer tracer; @Before public void setUp() { @@ -47,8 +47,9 @@ public void setUp() { @Test public void testActiveSpan() { JaegerSpan mockSpan = Mockito.mock(JaegerSpan.class); - tracer.scopeManager().activate(mockSpan, true); - assertEquals(mockSpan, tracer.activeSpan()); + try (Scope scope = tracer.scopeManager().activate(mockSpan)) { + assertEquals(mockSpan, tracer.activeSpan()); + } } @Test @@ -60,15 +61,19 @@ public void testActivateSpan() { @Test public void testActiveSpanPropagation() { - try (Scope parent = tracer.buildSpan("parent").startActive(true)) { - assertEquals(parent, tracer.scopeManager().active()); + Span span = tracer.buildSpan("parent").start(); + try (Scope parent = tracer.activateSpan(span)) { + assertEquals(span, tracer.scopeManager().activeSpan()); } } @Test public void testActiveSpanAutoReference() { - try (Scope ignored = tracer.buildSpan("parent").startActive(true)) { - tracer.buildSpan("child").startActive(true).close(); + Span span = tracer.buildSpan("parent").start(); + try (Scope ignored = tracer.activateSpan(span)) { + tracer.buildSpan("child").start().finish(); + } finally { + span.finish(); } assertEquals(2, reporter.getSpans().size()); @@ -89,6 +94,7 @@ public void testActiveSpanAutoReference() { } @Test + @SuppressWarnings("deprecation") public void testActiveSpanAutoFinishOnClose() { tracer.buildSpan("parent").startActive(true).close(); assertEquals(1, reporter.getSpans().size()); @@ -96,9 +102,10 @@ public void testActiveSpanAutoFinishOnClose() { @Test public void testActiveSpanNotAutoFinishOnClose() { - Scope scope = tracer.buildSpan("parent").startActive(false); - Span span = scope.span(); - scope.close(); + Span span = tracer.buildSpan("parent").start(); + try (Scope ignored = tracer.activateSpan(span)) { + // noop + } assertTrue(reporter.getSpans().isEmpty()); span.finish(); assertEquals(1, reporter.getSpans().size()); @@ -106,8 +113,11 @@ public void testActiveSpanNotAutoFinishOnClose() { @Test public void testIgnoreActiveSpan() { - try (Scope ignored = tracer.buildSpan("parent").startActive(true)) { - tracer.buildSpan("child").ignoreActiveSpan().startActive(true).close(); + Span span = tracer.buildSpan("parent").start(); + try (Scope ignored = tracer.activateSpan(span)) { + tracer.buildSpan("child").ignoreActiveSpan().start().finish(); + } finally { + span.finish(); } assertEquals(2, reporter.getSpans().size()); @@ -125,9 +135,12 @@ public void testIgnoreActiveSpan() { @Test public void testNoAutoRefWithExistingRefs() { JaegerSpan initialSpan = tracer.buildSpan("initial").start(); - - try (Scope ignored = tracer.buildSpan("parent").startActive(true)) { - tracer.buildSpan("child").asChildOf(initialSpan.context()).startActive(true).close(); + JaegerSpan parent = tracer.buildSpan("parent").start(); + try (Scope ignored = tracer.activateSpan(parent)) { + tracer.buildSpan("child").asChildOf(initialSpan.context()).start().finish(); + } finally { + parent.finish(); + initialSpan.finish(); } initialSpan.finish(); @@ -154,34 +167,25 @@ public void testNoAutoRefWithExistingRefs() { @Test public void testCustomScopeManager() { + Span span = mock(Span.class); Scope scope = mock(Scope.class); JaegerTracer tracer = new JaegerTracer.Builder("test") .withReporter(new InMemoryReporter()) .withSampler(new ConstSampler(true)) .withScopeManager(new ScopeManager() { - @Override - public Scope activate(Span span, boolean finishSpanOnClose) { - return scope; - } - @Override public Scope activate(Span span) { - return activate(span, false); - } - - @Override - public Scope active() { return scope; } @Override public Span activeSpan() { - return null; + return span; } }).build(); - assertEquals(scope, tracer.scopeManager().active()); - assertEquals(scope, tracer.scopeManager().activate(mock(Span.class))); + assertEquals(span, tracer.scopeManager().activeSpan()); + assertEquals(scope, tracer.scopeManager().activate(span)); } @@ -192,7 +196,7 @@ public void testCustomSpanOnSpanManager() { ScopeManager scopeManager = tracer.scopeManager(); // test - scopeManager.activate(activeSpan, false); + scopeManager.activate(activeSpan); // check assertEquals(activeSpan, tracer.activeSpan()); diff --git a/jaeger-core/src/test/java/io/jaegertracing/internal/JaegerSubclassTest.java b/jaeger-core/src/test/java/io/jaegertracing/internal/JaegerSubclassTest.java index b5293ab3f..661b579a4 100644 --- a/jaeger-core/src/test/java/io/jaegertracing/internal/JaegerSubclassTest.java +++ b/jaeger-core/src/test/java/io/jaegertracing/internal/JaegerSubclassTest.java @@ -17,6 +17,7 @@ import io.jaegertracing.Configuration; import io.opentracing.Scope; +import io.opentracing.Span; import java.util.List; import java.util.Map; @@ -165,11 +166,12 @@ public void testTracer() { final CustomConfiguration config = new CustomConfiguration("test-service"); final CustomTracer.CustomBuilder builder = config.getTracerBuilder(); final CustomTracer tracer = builder.build(); - final Scope scope = tracer.buildSpan("test-operation").startActive(true); - Assert.assertNotNull(tracer.scopeManager().active()); - Assert.assertTrue(tracer.scopeManager().active().span() instanceof CustomSpan); - Assert.assertTrue(tracer.scopeManager().active().span().context() instanceof CustomSpanContext); - scope.close(); + final Span span = tracer.buildSpan("test-operation").start(); + try (Scope scope = tracer.activateSpan(span)) { + Assert.assertNotNull(tracer.scopeManager().activeSpan()); + Assert.assertTrue(tracer.scopeManager().activeSpan() instanceof CustomSpan); + Assert.assertTrue(tracer.scopeManager().activeSpan().context() instanceof CustomSpanContext); + } config.closeTracer(); } } diff --git a/jaeger-crossdock/build.gradle b/jaeger-crossdock/build.gradle index d1c71884d..39c5d96bd 100644 --- a/jaeger-crossdock/build.gradle +++ b/jaeger-crossdock/build.gradle @@ -13,7 +13,7 @@ dependencies { compile project(':jaeger-client') compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: jacksonVersion - compile group: 'io.opentracing.contrib', name: 'opentracing-jaxrs2', version: '0.1.4' + compile group: 'io.opentracing.contrib', name: 'opentracing-jaxrs2', version: '0.5.0' compile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.0' compile group: 'javax.servlet', name: 'servlet-api', version: '2.5' compile group: 'org.glassfish.grizzly', name: 'grizzly-http-servlet', version: '2.3.23' diff --git a/jaeger-crossdock/src/test/java/io/jaegertracing/crossdock/resources/behavior/http/TraceBehaviorResourceTest.java b/jaeger-crossdock/src/test/java/io/jaegertracing/crossdock/resources/behavior/http/TraceBehaviorResourceTest.java index 1faaf551f..23b386913 100644 --- a/jaeger-crossdock/src/test/java/io/jaegertracing/crossdock/resources/behavior/http/TraceBehaviorResourceTest.java +++ b/jaeger-crossdock/src/test/java/io/jaegertracing/crossdock/resources/behavior/http/TraceBehaviorResourceTest.java @@ -32,6 +32,7 @@ import io.jaegertracing.internal.JaegerSpanContext; import io.jaegertracing.internal.samplers.ConstSampler; import io.opentracing.Scope; +import io.opentracing.Span; import io.opentracing.noop.NoopTracerFactory; import io.opentracing.tag.Tags; import io.opentracing.util.GlobalTracer; @@ -103,58 +104,62 @@ public void tearDown() throws Exception { @Test public void testStartTraceHttp() throws Exception { - Scope scope = server.getTracer().buildSpan("root").startActive(true); - String expectedTraceId = ((JaegerSpanContext)scope.span().context()).getTraceId(); + Span root = server.getTracer().buildSpan("root").start(); + String expectedTraceId = ((JaegerSpanContext) root.context()).getTraceId(); String expectedBaggage = "baggage-example"; - Downstream downstream = - new Downstream(SERVICE_NAME, "127.0.0.1", String.valueOf(port), Constants.TRANSPORT_HTTP, "server", null); - StartTraceRequest startTraceRequest = - new StartTraceRequest("server-role", expectedSampled, expectedBaggage, downstream); - - Response resp = - JerseyServer.client - .target(String.format("http://%s/start_trace", hostPort)) - .request(MediaType.APPLICATION_JSON) - .post(Entity.json(startTraceRequest)); - - TraceResponse traceResponse = resp.readEntity(TraceResponse.class); - - assertNotNull(traceResponse.getDownstream()); - validateTraceResponse(traceResponse, expectedTraceId, expectedBaggage, 1); - scope.close(); + try (Scope scope = server.getTracer().activateSpan(root)) { + Downstream downstream = + new Downstream(SERVICE_NAME, "127.0.0.1", String.valueOf(port), Constants.TRANSPORT_HTTP, + "server", null); + StartTraceRequest startTraceRequest = + new StartTraceRequest("server-role", expectedSampled, expectedBaggage, downstream); + + Response resp = + JerseyServer.client + .target(String.format("http://%s/start_trace", hostPort)) + .request(MediaType.APPLICATION_JSON) + .post(Entity.json(startTraceRequest)); + + TraceResponse traceResponse = resp.readEntity(TraceResponse.class); + assertNotNull(traceResponse.getDownstream()); + validateTraceResponse(traceResponse, expectedTraceId, expectedBaggage, 1); + } } @Test public void testJoinTraceHttp() throws Exception { - Scope scope = server.getTracer().buildSpan("root").startActive(true); + Span root = server.getTracer().buildSpan("root").start(); String expectedBaggage = "baggage-example"; - scope.span().setBaggageItem(Constants.BAGGAGE_KEY, expectedBaggage); + root.setBaggageItem(Constants.BAGGAGE_KEY, expectedBaggage); if (expectedSampled) { - Tags.SAMPLING_PRIORITY.set(scope.span(), 1); + Tags.SAMPLING_PRIORITY.set(root, 1); } - Downstream bottomDownstream = - new Downstream(SERVICE_NAME, "127.0.0.1", String.valueOf(port), Constants.TRANSPORT_HTTP, "server", null); - Downstream topDownstream = - new Downstream( - SERVICE_NAME, "127.0.0.1", String.valueOf(port), Constants.TRANSPORT_HTTP, "server", bottomDownstream); + try (Scope scope = server.getTracer().activateSpan(root)) { + Downstream bottomDownstream = + new Downstream(SERVICE_NAME, "127.0.0.1", String.valueOf(port), Constants.TRANSPORT_HTTP, + "server", null); + Downstream topDownstream = + new Downstream( + SERVICE_NAME, "127.0.0.1", String.valueOf(port), Constants.TRANSPORT_HTTP, "server", + bottomDownstream); - JoinTraceRequest joinTraceRequest = new JoinTraceRequest("server-role", topDownstream); + JoinTraceRequest joinTraceRequest = new JoinTraceRequest("server-role", topDownstream); - Response resp = - JerseyServer.client - .target(String.format("http://%s/join_trace", hostPort)) - .request(MediaType.APPLICATION_JSON) - .post(Entity.json(joinTraceRequest)); + Response resp = + JerseyServer.client + .target(String.format("http://%s/join_trace", hostPort)) + .request(MediaType.APPLICATION_JSON) + .post(Entity.json(joinTraceRequest)); - TraceResponse traceResponse = resp.readEntity(TraceResponse.class); + TraceResponse traceResponse = resp.readEntity(TraceResponse.class); - assertNotNull(traceResponse.getDownstream()); - validateTraceResponse(traceResponse, - ((JaegerSpanContext)scope.span().context()).getTraceId(), expectedBaggage, 2); - scope.close(); + assertNotNull(traceResponse.getDownstream()); + validateTraceResponse(traceResponse, + ((JaegerSpanContext) root.context()).getTraceId(), expectedBaggage, 2); + } } private void validateTraceResponse( diff --git a/settings.gradle b/settings.gradle index 6d401207f..e267e22f4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,5 +1,6 @@ rootProject.name = 'jaeger-client' include 'jaeger-core' +include 'jaeger-core-ot-0.32.0-itest' include 'jaeger-zipkin' include 'jaeger-crossdock' include 'jaeger-thrift'