You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by re...@apache.org on 2019/05/21 00:55:44 UTC

[cxf] branch master updated: CXF-8021: Upgrade to OpenTracing 0.33

This is an automated email from the ASF dual-hosted git repository.

reta pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 9a2f121  CXF-8021: Upgrade to OpenTracing 0.33
9a2f121 is described below

commit 9a2f1212cd7031c8447ae4294c4c4ccc7322d9e5
Author: reta <dr...@gmail.com>
AuthorDate: Mon May 20 20:54:39 2019 -0400

    CXF-8021: Upgrade to OpenTracing 0.33
---
 .../java/demo/jaxrs/tracing/server/Server.java     |  2 +-
 .../jax_rs/tracing_opentracing_osgi/README.txt     |  6 +--
 .../AbstractOpenTracingClientProvider.java         | 24 +++++++-----
 .../opentracing/AbstractOpenTracingProvider.java   | 25 +++++++------
 .../tracing/opentracing/OpenTracingContext.java    | 10 +++--
 .../apache/cxf/tracing/opentracing/ScopedSpan.java | 43 ++++++++++++++++++++++
 parent/pom.xml                                     |  4 +-
 .../opentracing/OpenTracingTracingTest.java        | 17 ++++++---
 .../jaxws/tracing/opentracing/BookStore.java       |  6 ++-
 .../opentracing/OpenTracingTracingTest.java        | 12 ++++--
 10 files changed, 109 insertions(+), 40 deletions(-)

diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/src/main/java/demo/jaxrs/tracing/server/Server.java b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/src/main/java/demo/jaxrs/tracing/server/Server.java
index 32f9f48..44e76ca 100644
--- a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/src/main/java/demo/jaxrs/tracing/server/Server.java
+++ b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/src/main/java/demo/jaxrs/tracing/server/Server.java
@@ -58,7 +58,7 @@ public class Server {
                 }
             ))
             .getTracer();
-        GlobalTracer.register(tracer);
+        GlobalTracer.registerIfAbsent(tracer);
         
         server.setHandler(context);
         server.start();
diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentracing_osgi/README.txt b/distribution/src/main/release/samples/jax_rs/tracing_opentracing_osgi/README.txt
index 1d219ed..a08719d 100644
--- a/distribution/src/main/release/samples/jax_rs/tracing_opentracing_osgi/README.txt
+++ b/distribution/src/main/release/samples/jax_rs/tracing_opentracing_osgi/README.txt
@@ -59,9 +59,9 @@ we are using Uber Jaeger:
 
   install -s wrap:mvn:com.squareup.okio/okio/1.13.0
   install -s wrap:mvn:com.squareup.okhttp3/okhttp/3.9.0
-  install -s wrap:mvn:org.apache.thrift/libthrift/0.11.0
-  install -s wrap:mvn:io.jaegertracing/jaeger-core/0.30.3 
-  install -s wrap:mvn:io.jaegertracing/jaeger-thrift/0.30.3
+  install -s wrap:mvn:org.apache.thrift/libthrift/0.12.0
+  install -s wrap:mvn:io.jaegertracing/jaeger-core/0.35.4 
+  install -s wrap:mvn:io.jaegertracing/jaeger-thrift/0.35.4
   
 Install this demo bundle (using the appropriate bundle version number)
   
diff --git a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingClientProvider.java b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingClientProvider.java
index 468816f..ef9a526 100644
--- a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingClientProvider.java
+++ b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingClientProvider.java
@@ -48,28 +48,32 @@ public abstract class AbstractOpenTracingClientProvider extends AbstractTracingP
             URI uri, String method) {
 
         final Span parent = tracer.activeSpan();
+        
+        Span activeSpan = null; 
         Scope scope = null; 
         if (parent == null) {
-            scope = tracer.buildSpan(buildSpanDescription(uri.toString(), method)).startActive(false);
+            activeSpan = tracer.buildSpan(buildSpanDescription(uri.toString(), method)).start(); 
+            scope = tracer.scopeManager().activate(activeSpan);
         } else {
-            scope = tracer.buildSpan(buildSpanDescription(uri.toString(), method)).asChildOf(parent).startActive(false);
+            activeSpan = tracer.buildSpan(buildSpanDescription(uri.toString(), method)).asChildOf(parent).start();
+            scope = tracer.scopeManager().activate(activeSpan);
         }
 
         // Set additional tags 
-        scope.span().setTag(Tags.HTTP_METHOD.getKey(), method);
-        scope.span().setTag(Tags.HTTP_URL.getKey(), uri.toString());
+        activeSpan.setTag(Tags.HTTP_METHOD.getKey(), method);
+        activeSpan.setTag(Tags.HTTP_URL.getKey(), uri.toString());
 
-        tracer.inject(scope.span().context(), Builtin.HTTP_HEADERS, new TextMapInjectAdapter(requestHeaders));
+        tracer.inject(activeSpan.context(), Builtin.HTTP_HEADERS, new TextMapInjectAdapter(requestHeaders));
         
         // In case of asynchronous client invocation, the span should be detached as JAX-RS
         // client request / response filters are going to be executed in different threads.
         Span span = null;
         if (isAsyncInvocation()) {
-            span = scope.span();
+            span = activeSpan;
             scope.close();
         }
 
-        return new TraceScopeHolder<TraceScope>(new TraceScope(span, scope), 
+        return new TraceScopeHolder<TraceScope>(new TraceScope(activeSpan, scope), 
                 span != null /* detached */);
     }
 
@@ -90,11 +94,11 @@ public abstract class AbstractOpenTracingClientProvider extends AbstractTracingP
             // If the client invocation was asynchronous , the trace span has been created
             // in another thread and should be re-attached to the current one.
             if (holder.isDetached()) {
-                scope = tracer.scopeManager().activate(span, false);
+                scope = tracer.scopeManager().activate(span);
             }
 
-            scope.span().setTag(Tags.HTTP_STATUS.getKey(), responseStatus);
-            scope.span().finish();
+            span.setTag(Tags.HTTP_STATUS.getKey(), responseStatus);
+            span.finish();
             
             scope.close();
         }
diff --git a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingProvider.java b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingProvider.java
index 0b1ea28..2837cee 100644
--- a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingProvider.java
+++ b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/AbstractOpenTracingProvider.java
@@ -33,7 +33,7 @@ import io.opentracing.Span;
 import io.opentracing.SpanContext;
 import io.opentracing.Tracer;
 import io.opentracing.propagation.Format.Builtin;
-import io.opentracing.propagation.TextMapExtractAdapter;
+import io.opentracing.propagation.TextMapAdapter;
 import io.opentracing.tag.Tags;
 
 public abstract class AbstractOpenTracingProvider extends AbstractTracingProvider {
@@ -50,35 +50,38 @@ public abstract class AbstractOpenTracingProvider extends AbstractTracingProvide
             URI uri, String method) {
 
         SpanContext parent = tracer.extract(Builtin.HTTP_HEADERS, 
-            new TextMapExtractAdapter(
+            new TextMapAdapter(
                 requestHeaders
                     .entrySet()
                     .stream()
                     .collect(Collectors.toMap(Map.Entry::getKey, this::getFirstValueOrEmpty))
             ));
         
+        Span activeSpan = null;
         Scope scope = null;
         if (parent == null) {
-            scope = tracer.buildSpan(buildSpanDescription(uri.getPath(), method)).startActive(false);
+            activeSpan = tracer.buildSpan(buildSpanDescription(uri.getPath(), method)).start(); 
+            scope = tracer.scopeManager().activate(activeSpan);
         } else {
-            scope = tracer.buildSpan(buildSpanDescription(uri.getPath(), method)).asChildOf(parent).startActive(false);
+            activeSpan = tracer.buildSpan(buildSpanDescription(uri.getPath(), method)).asChildOf(parent).start();
+            scope = tracer.scopeManager().activate(activeSpan);
         }
         
         // Set additional tags
-        scope.span().setTag(Tags.HTTP_METHOD.getKey(), method);
-        scope.span().setTag(Tags.HTTP_URL.getKey(), uri.toString());
+        activeSpan.setTag(Tags.HTTP_METHOD.getKey(), method);
+        activeSpan.setTag(Tags.HTTP_URL.getKey(), uri.toString());
         
         // If the service resource is using asynchronous processing mode, the trace
         // scope will be closed in another thread and as such should be detached.
         Span span = null;
         if (isAsyncResponse()) {
            // Do not modify the current context span
-            span = scope.span();
+            span = activeSpan;
             propagateContinuationSpan(span);
             scope.close();
         } 
 
-        return new TraceScopeHolder<TraceScope>(new TraceScope(span, scope), span != null);
+        return new TraceScopeHolder<TraceScope>(new TraceScope(activeSpan, scope), span != null);
     }
 
     protected void stopTraceSpan(final Map<String, List<String>> requestHeaders,
@@ -99,11 +102,11 @@ public abstract class AbstractOpenTracingProvider extends AbstractTracingProvide
             // scope has been created in another thread and should be re-attached to the current
             // one.
             if (holder.isDetached()) {
-                scope = tracer.scopeManager().activate(span, false);
+                scope = tracer.scopeManager().activate(span);
             }
 
-            scope.span().setTag(Tags.HTTP_STATUS.getKey(), responseStatus);
-            scope.span().finish();
+            span.setTag(Tags.HTTP_STATUS.getKey(), responseStatus);
+            span.finish();
             
             scope.close();
         }
diff --git a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/OpenTracingContext.java b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/OpenTracingContext.java
index c82ea8a..290bf00 100644
--- a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/OpenTracingContext.java
+++ b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/OpenTracingContext.java
@@ -51,7 +51,7 @@ public class OpenTracingContext implements TracerContext {
         Scope scope = null;
         
         if (tracer.activeSpan() == null && continuation != null) {
-            scope = tracer.scopeManager().activate(continuation, false);
+            scope = tracer.scopeManager().activate(continuation);
         }
 
         try {
@@ -109,10 +109,14 @@ public class OpenTracingContext implements TracerContext {
     }
     
     private Scope newOrChildSpan(final String description, final Span parent) {
+        Span span = null;
+        
         if (parent == null) {
-            return tracer.buildSpan(description).startActive(true);
+            span = tracer.buildSpan(description).start(); 
         } else {
-            return tracer.buildSpan(description).asChildOf(parent).startActive(true);
+            span = tracer.buildSpan(description).asChildOf(parent).start();
         }
+        
+        return new ScopedSpan(span, tracer.scopeManager().activate(span));
     }
 }
diff --git a/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/ScopedSpan.java b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/ScopedSpan.java
new file mode 100644
index 0000000..be9755f
--- /dev/null
+++ b/integration/tracing/tracing-opentracing/src/main/java/org/apache/cxf/tracing/opentracing/ScopedSpan.java
@@ -0,0 +1,43 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you 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 org.apache.cxf.tracing.opentracing;
+
+import io.opentracing.Scope;
+import io.opentracing.Span;
+
+/**
+ * The instance of the Scope which is finishing the Span upon close() call. 
+ *
+ */
+class ScopedSpan implements Scope {
+    private final Span span;
+    private final Scope scope;
+    
+    ScopedSpan(final Span span, final Scope scope) {
+        this.span = span;
+        this.scope = scope;
+    }
+
+    @Override
+    public void close() {
+        span.finish();
+        scope.close();
+    }
+}
diff --git a/parent/pom.xml b/parent/pom.xml
index 304c5b7..00bdd67 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -235,8 +235,8 @@
         <cxf.brave.version>5.4.2</cxf.brave.version>
         <cxf.brave.zipkin.version>2.11.6</cxf.brave.zipkin.version>
         <cxf.brave.reporter.version>2.7.9</cxf.brave.reporter.version>
-        <cxf.opentracing.version>0.31.0</cxf.opentracing.version>
-        <cxf.jaeger.version>0.30.4</cxf.jaeger.version>
+        <cxf.opentracing.version>0.33.0</cxf.opentracing.version>
+        <cxf.jaeger.version>0.35.4</cxf.jaeger.version>
         <cxf.findbugs.version>3.0.2</cxf.findbugs.version>
         <cxf.checkstyle.extension />
         <cxf.jaxb.context.class />
diff --git a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentracing/OpenTracingTracingTest.java b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentracing/OpenTracingTracingTest.java
index 953241f..1a89e8d 100644
--- a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentracing/OpenTracingTracingTest.java
+++ b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentracing/OpenTracingTracingTest.java
@@ -57,6 +57,7 @@ import io.jaegertracing.internal.JaegerSpanContext;
 import io.jaegertracing.internal.samplers.ConstSampler;
 import io.jaegertracing.spi.Sender;
 import io.opentracing.Scope;
+import io.opentracing.Span;
 import io.opentracing.Tracer;
 import io.opentracing.propagation.Format.Builtin;
 import io.opentracing.propagation.TextMap;
@@ -307,7 +308,8 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
     public void testThatProvidedSpanIsNotClosedWhenActive() throws MalformedURLException {
         final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider);
 
-        try (Scope span = tracer.buildSpan("test span").startActive(true)) {
+        final Span span = tracer.buildSpan("test span").start();
+        try (Scope scope = tracer.scopeManager().activate(span)) {
             final Response r = client.get();
             assertEquals(Status.OK.getStatusCode(), r.getStatus());
 
@@ -318,6 +320,8 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
             assertThat(TestSender.getAllSpans().get(1).getOperationName(), equalTo("GET /bookstore/books"));
             assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI()));
             assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty()));
+        } finally {
+            span.finish();
         }
 
         // Await till flush happens, usually every second
@@ -332,12 +336,13 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
     public void testThatProvidedSpanIsNotDetachedWhenActiveUsingAsyncClient() throws Exception {
         final WebClient client = createWebClient("/bookstore/books", openTracingClientProvider);
 
-        try (Scope scope = tracer.buildSpan("test span").startActive(true)) {
+        final Span span = tracer.buildSpan("test span").start();
+        try (Scope scope = tracer.scopeManager().activate(span)) {
             final Future<Response> f = client.async().get();
 
             final Response r = f.get(1, TimeUnit.HOURS);
             assertEquals(Status.OK.getStatusCode(), r.getStatus());
-            assertThat(tracer.activeSpan().context(), equalTo(scope.span().context()));
+            assertThat(tracer.activeSpan().context(), equalTo(span.context()));
 
             assertThat(TestSender.getAllSpans().size(), equalTo(3));
             assertThat(TestSender.getAllSpans().get(0).getOperationName(), equalTo("Get Books"));
@@ -346,6 +351,8 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
             assertThat(TestSender.getAllSpans().get(1).getReferences(), not(empty()));
             assertThat(TestSender.getAllSpans().get(2).getOperationName(), equalTo("GET " + client.getCurrentURI()));
             assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty()));
+        } finally {
+            span.finish();
         }
 
         // Await till flush happens, usually every second
@@ -400,7 +407,7 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
     }
 
     private JaegerSpanContext fromRandom() {
-        return new JaegerSpanContext(random.nextLong(), /* traceId */ random.nextLong() /* spanId */,
-            random.nextLong() /* parentId */, (byte)1 /* sampled */);
+        return new JaegerSpanContext(random.nextLong() /* traceId hi */, random.nextLong() /* traceId lo */, 
+            random.nextLong() /* spanId */, random.nextLong() /* parentId */, (byte)1 /* sampled */);
     }
 }
diff --git a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/BookStore.java b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/BookStore.java
index 6cc3abf..af58418 100644
--- a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/BookStore.java
+++ b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/BookStore.java
@@ -29,6 +29,7 @@ import org.apache.cxf.systest.Book;
 import org.apache.cxf.systest.jaxws.tracing.BookStoreService;
 
 import io.opentracing.Scope;
+import io.opentracing.Span;
 import io.opentracing.Tracer;
 import io.opentracing.util.GlobalTracer;
 
@@ -42,11 +43,14 @@ public class BookStore implements BookStoreService {
 
     @WebMethod
     public Collection< Book > getBooks() {
-        try (Scope span = tracer.buildSpan("Get Books").startActive(true)) {
+        final Span span = tracer.buildSpan("Get Books").start();
+        try (Scope scope = tracer.activateSpan(span)) {
             return Arrays.asList(
                     new Book("Apache CXF in Action", UUID.randomUUID().toString()),
                     new Book("Mastering Apache CXF", UUID.randomUUID().toString())
                 );
+        } finally {
+            span.finish();
         }
     }
 
diff --git a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/OpenTracingTracingTest.java b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/OpenTracingTracingTest.java
index 6c044ac..ddf6ee6 100644
--- a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/OpenTracingTracingTest.java
+++ b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentracing/OpenTracingTracingTest.java
@@ -50,6 +50,7 @@ import io.jaegertracing.internal.JaegerSpanContext;
 import io.jaegertracing.internal.samplers.ConstSampler;
 import io.jaegertracing.spi.Sender;
 import io.opentracing.Scope;
+import io.opentracing.Span;
 import io.opentracing.Tracer;
 import io.opentracing.propagation.Format.Builtin;
 import io.opentracing.util.GlobalTracer;
@@ -88,7 +89,7 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
                     }
                 ))
                 .getTracer();
-            GlobalTracer.register(tracer);
+            GlobalTracer.registerIfAbsent(tracer);
 
             final JaxWsServerFactoryBean sf = new JaxWsServerFactoryBean();
             sf.setServiceClass(BookStore.class);
@@ -180,7 +181,8 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
             }
         });
 
-        try (Scope scope = tracer.buildSpan("test span").startActive(true)) {
+        final Span span = tracer.buildSpan("test span").start();
+        try (Scope scope = tracer.activateSpan(span)) {
             assertThat(service.getBooks().size(), equalTo(2));
             assertThat(tracer.activeSpan(), not(nullValue()));
 
@@ -192,6 +194,8 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
             assertThat(TestSender.getAllSpans().get(2).getOperationName(),
                 equalTo("POST http://localhost:" + PORT + "/BookStore"));
             assertThat(TestSender.getAllSpans().get(2).getReferences(), not(empty()));
+        } finally {
+            span.finish();
         }
 
         // Await till flush happens, usually every second
@@ -274,7 +278,7 @@ public class OpenTracingTracingTest extends AbstractBusClientServerTestBase {
     }
 
     private JaegerSpanContext fromRandom() {
-        return new JaegerSpanContext(random.nextLong(), /* traceId */ random.nextLong() /* spanId */,
-            random.nextLong() /* parentId */, (byte)1 /* sampled */);
+        return new JaegerSpanContext(random.nextLong() /* traceId hi */, random.nextLong() /* traceId lo */, 
+            random.nextLong() /* spanId */, random.nextLong() /* parentId */, (byte)1 /* sampled */);
     }
 }