Skip to content

Commit

Permalink
CXF-8969: Update to Brave 6
Browse files Browse the repository at this point in the history
  • Loading branch information
reta committed Jun 10, 2024
1 parent 4937257 commit a1eaa4e
Show file tree
Hide file tree
Showing 33 changed files with 379 additions and 336 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,17 @@
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-okhttp3</artifactId>
<version>2.17.1</version>
<version>${cxf.zipkin-reporter.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter</artifactId>
<version>${cxf.zipkin-reporter.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-reporter-brave</artifactId>
<version>${cxf.zipkin-reporter.version}</version>
</dependency>
<dependency>
<groupId>io.zipkin.brave</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,13 @@
import brave.propagation.ThreadLocalCurrentTraceContext;
import zipkin2.Span;
import zipkin2.reporter.AsyncReporter;
import zipkin2.reporter.Sender;
import zipkin2.reporter.BytesMessageSender;
import zipkin2.reporter.brave.ZipkinSpanHandler;
import zipkin2.reporter.okhttp3.OkHttpSender;

public class CatalogTracing implements AutoCloseable {
private volatile AsyncReporter<Span> reporter;
private volatile Sender sender;
private volatile BytesMessageSender sender;
private volatile HttpTracing httpTracing;
private final String serviceName;

Expand Down Expand Up @@ -74,10 +75,10 @@ private static HttpTracing createHttpTracing(String serviceName, AsyncReporter<S
.currentTraceContext(
ThreadLocalCurrentTraceContext
.newBuilder()
.addScopeDecorator(MDCScopeDecorator.create())
.addScopeDecorator(MDCScopeDecorator.get())
.build()
)
.spanReporter(reporter)
.addSpanHandler(ZipkinSpanHandler.create(reporter))
.build();

return HttpTracing.create(tracing);
Expand Down
3 changes: 2 additions & 1 deletion distribution/src/main/release/samples/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,8 @@
<cxf.lucene.version>9.10.0</cxf.lucene.version>
<cxf.olingo.server.version>5.0.0</cxf.olingo.server.version>
<cxf.aspectj.version>1.9.22.1</cxf.aspectj.version>
<cxf.brave.version>5.17.0</cxf.brave.version>
<cxf.brave.version>6.0.3</cxf.brave.version>
<cxf.zipkin-reporter.version>3.4.0</cxf.zipkin-reporter.version>
<cxf.zest.version>2.1</cxf.zest.version>
<cxf.activemq.artemis.version>2.31.0</cxf.activemq.artemis.version>
<cxf.h2.version>2.2.224</cxf.h2.version>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,16 @@
package org.apache.cxf.tracing.brave;

import java.net.URI;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import brave.Span;
import brave.Tracer.SpanInScope;
import brave.http.HttpClientAdapter;
import brave.http.HttpClientHandler;
import brave.http.HttpClientRequest;
import brave.http.HttpClientResponse;
import brave.http.HttpTracing;
import brave.propagation.Propagation.Setter;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.phase.PhaseInterceptorChain;
import org.apache.cxf.tracing.AbstractTracingProvider;
Expand All @@ -54,15 +51,10 @@ protected TraceScopeHolder<TraceScope> startTraceSpan(final Map<String, List<Str
URI uri, String method) {

final Request request = HttpAdapterFactory.request(requestHeaders, uri, method);
final HttpClientAdapter<Request, ?> adapter = HttpClientAdapterFactory.create(request);
final HttpClientRequest wrapper = HttpClientAdapterFactory.create(request);

final HttpClientHandler<Request, ?> handler = HttpClientHandler.create(brave, adapter);
final Span span = handler.handleSend(
brave
.tracing()
.propagation()
.injector(inject(requestHeaders)),
request);
final HttpClientHandler<HttpClientRequest, ?> handler = HttpClientHandler.create(brave);
final Span span = handler.handleSend(wrapper);

// 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.
Expand All @@ -73,20 +65,13 @@ protected TraceScopeHolder<TraceScope> startTraceSpan(final Map<String, List<Str

return new TraceScopeHolder<TraceScope>(new TraceScope(span, scope), scope == null /* detached */);
}

private <C> Setter<C, String> inject(final Map<String, List<String>> requestHeaders) {
return (carrier, key, value) -> {
if (!requestHeaders.containsKey(key)) {
requestHeaders.put(key, Collections.singletonList(value));
}
};
}

private boolean isAsyncInvocation() {
return !PhaseInterceptorChain.getCurrentMessage().getExchange().isSynchronous();
}

protected void stopTraceSpan(final TraceScopeHolder<TraceScope> holder, final int responseStatus) {
protected void stopTraceSpan(final TraceScopeHolder<TraceScope> holder, final String method,
final URI uri, final int responseStatus) {
if (holder == null) {
return;
}
Expand All @@ -100,18 +85,19 @@ protected void stopTraceSpan(final TraceScopeHolder<TraceScope> holder, final in
brave.tracing().tracer().joinSpan(scope.getSpan().context());
}

final Response response = HttpAdapterFactory.response(responseStatus);
final HttpClientAdapter<?, Response> adapter = HttpClientAdapterFactory.create(response);
final Response response = HttpAdapterFactory.response(method, uri.toASCIIString(), responseStatus);
final HttpClientResponse wrapper = HttpClientAdapterFactory.create(response);

final HttpClientHandler<?, Response> handler = HttpClientHandler.create(brave, adapter);
handler.handleReceive(response, null, scope.getSpan());
final HttpClientHandler<?, HttpClientResponse> handler = HttpClientHandler.create(brave);
handler.handleReceive(wrapper, scope.getSpan());
} finally {
scope.close();
}
}
}

protected void stopTraceSpan(final TraceScopeHolder<TraceScope> holder, final Throwable ex) {
protected void stopTraceSpan(final TraceScopeHolder<TraceScope> holder, final String method,
final URI uri, final Throwable ex) {
if (holder == null) {
return;
}
Expand All @@ -125,9 +111,9 @@ protected void stopTraceSpan(final TraceScopeHolder<TraceScope> holder, final Th
brave.tracing().tracer().joinSpan(scope.getSpan().context());
}

final HttpClientHandler<HttpClientRequest, HttpClientResponse> handler =
HttpClientHandler.create(brave);
handler.handleReceive(null, ex, scope.getSpan());
final HttpClientResponse wrapper = HttpClientAdapterFactory.create(method, uri, ex);
final HttpClientHandler<?, HttpClientResponse> handler = HttpClientHandler.create(brave);
handler.handleReceive(wrapper, scope.getSpan());
} finally {
scope.close();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,9 @@

import brave.Span;
import brave.Tracer.SpanInScope;
import brave.http.HttpServerAdapter;
import brave.http.HttpServerHandler;
import brave.http.HttpServerRequest;
import brave.http.HttpServerResponse;
import brave.http.HttpTracing;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.phase.PhaseInterceptorChain;
Expand All @@ -50,16 +51,10 @@ protected TraceScopeHolder<TraceScope> startTraceSpan(final Map<String, List<Str
URI uri, String method) {

final Request request = HttpAdapterFactory.request(requestHeaders, uri, method);
final HttpServerAdapter<Request, ?> adapter = HttpServerAdapterFactory.create(request);
final HttpServerRequest wrapper = HttpServerAdapterFactory.create(request);

final HttpServerHandler<Request, ?> handler = HttpServerHandler.create(brave, adapter);

Span span = handler.handleReceive(
brave
.tracing()
.propagation()
.extractor(adapter::requestHeader),
request);
final HttpServerHandler<HttpServerRequest, ?> handler = HttpServerHandler.create(brave);
Span span = handler.handleReceive(wrapper);

// If the service resource is using asynchronous processing mode, the trace
// scope will be closed in another thread and as such should be detached.
Expand All @@ -76,6 +71,8 @@ protected TraceScopeHolder<TraceScope> startTraceSpan(final Map<String, List<Str

protected void stopTraceSpan(final Map<String, List<String>> requestHeaders,
final Map<String, List<Object>> responseHeaders,
final String method,
final URI uri,
final int responseStatus,
final TraceScopeHolder<TraceScope> holder) {
if (holder == null) {
Expand All @@ -93,11 +90,11 @@ protected void stopTraceSpan(final Map<String, List<String>> requestHeaders,
span = brave.tracing().tracer().joinSpan(scope.getSpan().context());
}

final Response response = HttpAdapterFactory.response(responseStatus);
final HttpServerAdapter<?, Response> adapter = HttpServerAdapterFactory.create(response);
final Response response = HttpAdapterFactory.response(method, uri.getPath(), responseStatus);
final HttpServerResponse wrapper = HttpServerAdapterFactory.create(response);

final HttpServerHandler<?, Response> handler = HttpServerHandler.create(brave, adapter);
handler.handleSend(response, null, scope.getSpan());
final HttpServerHandler<?, HttpServerResponse> handler = HttpServerHandler.create(brave);
handler.handleSend(wrapper, scope.getSpan());
} finally {
scope.close();
if (span != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,8 @@ public Portable(final Tracing tracing) {
this(
HttpTracing
.newBuilder(tracing)
.clientParser(new HttpClientSpanParser())
.clientRequestParser(new HttpClientRequestParser())
.clientResponseParser(new HttpClientResponseParser())
.build()
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,6 @@ public void handleFault(Message message) {
(TraceScopeHolder<TraceScope>)message.getExchange().get(TRACE_SPAN);

final Exception ex = message.getContent(Exception.class);
super.stopTraceSpan(holder, ex);
super.stopTraceSpan(holder, (String) message.get(Message.HTTP_REQUEST_METHOD), getUri(message), ex);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import brave.http.HttpTracing;
import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.message.Message;
import org.apache.cxf.message.MessageUtils;
import org.apache.cxf.phase.Phase;

public class BraveClientStopInterceptor extends AbstractBraveClientInterceptor {
Expand All @@ -43,6 +44,11 @@ public void handleMessage(Message message) throws Fault {
responseCode = 200;
}

super.stopTraceSpan(holder, responseCode);
boolean isRequestor = MessageUtils.isRequestor(message);
final Message requestMessage = isRequestor ? message.getExchange().getOutMessage()
: message.getExchange().getInMessage();

super.stopTraceSpan(holder, (String) requestMessage.get(Message.HTTP_REQUEST_METHOD),
getUri(requestMessage), responseCode);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ public void doInitializeProvider(InterceptorProvider provider, Bus bus) {
private static HttpTracing newTracer(Tracing tracing) {
return HttpTracing
.newBuilder(tracing)
.serverParser(new HttpServerSpanParser())
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ public void handleMessage(Message message) throws Fault {
responseCode = 200;
}

super.stopTraceSpan(requestHeaders, responseHeaders, responseCode, holder);
super.stopTraceSpan(requestHeaders, responseHeaders, (String)requestMessage.get(Message.HTTP_REQUEST_METHOD),
getUri(requestMessage), responseCode, holder);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,17 @@
*/
package org.apache.cxf.tracing.brave;

import brave.http.HttpAdapter;
import brave.http.HttpClientParser;
import brave.http.HttpRequest;
import brave.http.HttpRequestParser;
import brave.propagation.TraceContext;
import org.apache.cxf.common.util.StringUtils;

public class HttpClientSpanParser extends HttpClientParser {
public class HttpClientRequestParser extends HttpRequestParser.Default {
@Override
protected <Req> String spanName(HttpAdapter<Req, ?> adapter, Req request) {
return buildSpanDescription(adapter.url(request), adapter.method(request));
}

private String buildSpanDescription(final String path, final String method) {
if (StringUtils.isEmpty(method)) {
return path;
protected String spanName(HttpRequest req, TraceContext context) {
if (StringUtils.isEmpty(req.url())) {
return req.method();
}
return method + " " + path;
return req.method() + " " + req.url();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,20 +18,17 @@
*/
package org.apache.cxf.tracing.brave;

import brave.http.HttpAdapter;
import brave.http.HttpServerParser;
import org.apache.cxf.common.util.StringUtils;
import brave.SpanCustomizer;
import brave.Tags;
import brave.http.HttpResponseParser;

public class HttpServerSpanParser extends HttpServerParser {
public class HttpClientResponseParser extends HttpResponseParser.Default {
@Override
protected <Req> String spanName(HttpAdapter<Req, ?> adapter, Req request) {
return buildSpanDescription(adapter.path(request), adapter.method(request));
}

private String buildSpanDescription(final String path, final String method) {
if (StringUtils.isEmpty(method)) {
return path;
protected void error(int httpStatus, Throwable error, SpanCustomizer span) {
if (error != null) {
span.tag(Tags.ERROR.key(), error.getMessage());
} else {
super.error(httpStatus, error, span);
}
return method + " " + path;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -48,12 +48,24 @@ String method() {
}

final class Response {
private final String method;
private final String path;
private final Integer status;

Response(Integer status) {
Response(String method, String path, Integer status) {
this.method = method;
this.path = path;
this.status = status;
}

String path() {
return path;
}

String method() {
return method;
}

Integer status() {
return status;
}
Expand All @@ -63,7 +75,7 @@ static Request request(Map<String, List<String>> headers, URI uri, String method
return new Request(headers, uri, method);
}

static Response response(Integer status) {
return new Response(status);
static Response response(String method, String path, Integer status) {
return new Response(method, path, status);
}
}

0 comments on commit a1eaa4e

Please sign in to comment.