From a179cc0e92dbbd5b6b48a5fc1925c5af28370d0a Mon Sep 17 00:00:00 2001 From: Ray Date: Wed, 21 Dec 2016 16:33:02 +0800 Subject: [PATCH] NoopTracer as default --- .../filter-opentracing/pom.xml | 10 +++++++-- .../filter/opentracing/OpenTracingFilter.java | 9 ++++++-- .../filter/opentracing/TracerFactory.java | 21 ++++++++++++------- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/motan-extension/filter-extension/filter-opentracing/pom.xml b/motan-extension/filter-extension/filter-opentracing/pom.xml index d27b7efeb..1b5b102df 100644 --- a/motan-extension/filter-extension/filter-opentracing/pom.xml +++ b/motan-extension/filter-extension/filter-opentracing/pom.xml @@ -21,6 +21,7 @@ https://github.com/weibocom/motan UTF-8 + 0.20.2 @@ -31,14 +32,19 @@ io.opentracing opentracing-api - 0.20.2 + ${opentracing.version} + + + io.opentracing + opentracing-impl + ${opentracing.version} io.opentracing opentracing-mock - 0.20.2 + ${opentracing.version} test diff --git a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java index 25a20e04f..b8c334479 100644 --- a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java +++ b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/OpenTracingFilter.java @@ -13,6 +13,7 @@ */ package com.weibo.api.motan.filter.opentracing; +import io.opentracing.NoopTracer; import io.opentracing.Span; import io.opentracing.SpanContext; import io.opentracing.Tracer; @@ -49,8 +50,8 @@ public class OpenTracingFilter implements Filter { @Override public Response filter(Caller caller, Request request) { - Tracer tracer = OpenTracingContext.getTracer(); - if (tracer == null) { + Tracer tracer = getTracer(); + if (tracer == null || tracer instanceof NoopTracer) { return caller.call(request); } if (caller instanceof Provider) { // server end @@ -59,6 +60,10 @@ public Response filter(Caller caller, Request request) { return processRefererTrace(tracer, caller, request); } } + + protected Tracer getTracer(){ + return OpenTracingContext.getTracer(); + } /** * process trace in client end diff --git a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java index 5b7c47bdb..d94654b27 100644 --- a/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java +++ b/motan-extension/filter-extension/filter-opentracing/src/main/java/com/weibo/api/motan/filter/opentracing/TracerFactory.java @@ -15,12 +15,13 @@ */ package com.weibo.api.motan.filter.opentracing; +import io.opentracing.NoopTracerFactory; +import io.opentracing.Tracer; + import java.util.Iterator; import java.util.ServiceLoader; import com.weibo.api.motan.util.LoggerUtil; - -import io.opentracing.Tracer; /** * * @Description TracerFactory @@ -40,23 +41,29 @@ public interface TracerFactory { Tracer getTracer(); class DefaultTracerFactory implements TracerFactory { - private static Tracer tracer = null; + private static Tracer tracer = NoopTracerFactory.create(); static { loadDefaultTracer(); } /** - * load SPI Tracer and set default. the first tracer was used if more than one tracer was - * found. + * load SPI Tracer and set default only if one tracer is found. */ private static void loadDefaultTracer() { try { Iterator implementations = ServiceLoader.load(Tracer.class, Tracer.class.getClassLoader()).iterator(); if (implementations.hasNext()) { - tracer = implementations.next(); - LoggerUtil.info("io.opentracing.Tracer load in DefaultTracerFactory, " + tracer.getClass().getSimpleName() + Tracer firstTracer = implementations.next(); + if(!implementations.hasNext()){ + // only one tracer is found. + tracer = firstTracer; + LoggerUtil.info("io.opentracing.Tracer load in DefaultTracerFactory, " + tracer.getClass().getSimpleName() + " is used as default tracer."); + } else { + LoggerUtil.info("io.opentracing.Tracer load in DefaultTracerFactory, NoopTracer is used as default tracer since more than one tracer is found."); + } + } } catch (Exception e) { LoggerUtil.warn("DefaultTracerFactory load Tracer fail.", e);