提交 53587805 编写于 作者: Z zhangwei 提交者: wu-sheng

TracingContext optimize (#2884)

* TracingContext optimize

* fix checkstyle
上级 70064f47
...@@ -72,9 +72,9 @@ public class TracingContext implements AbstractTracerContext { ...@@ -72,9 +72,9 @@ public class TracingContext implements AbstractTracerContext {
/** /**
* The counter indicates * The counter indicates
*/ */
private AtomicInteger asyncSpanCounter; private volatile AtomicInteger asyncSpanCounter;
private volatile boolean isRunningInAsyncMode; private volatile boolean isRunningInAsyncMode;
private ReentrantLock asyncFinishLock; private volatile ReentrantLock asyncFinishLock;
/** /**
* Initialize all fields with default value. * Initialize all fields with default value.
...@@ -82,12 +82,8 @@ public class TracingContext implements AbstractTracerContext { ...@@ -82,12 +82,8 @@ public class TracingContext implements AbstractTracerContext {
TracingContext() { TracingContext() {
this.segment = new TraceSegment(); this.segment = new TraceSegment();
this.spanIdGenerator = 0; this.spanIdGenerator = 0;
if (samplingService == null) { samplingService = ServiceManager.INSTANCE.findService(SamplingService.class);
samplingService = ServiceManager.INSTANCE.findService(SamplingService.class);
}
asyncSpanCounter = new AtomicInteger(0);
isRunningInAsyncMode = false; isRunningInAsyncMode = false;
asyncFinishLock = new ReentrantLock();
} }
/** /**
...@@ -414,7 +410,15 @@ public class TracingContext implements AbstractTracerContext { ...@@ -414,7 +410,15 @@ public class TracingContext implements AbstractTracerContext {
} }
@Override public AbstractTracerContext awaitFinishAsync() { @Override public AbstractTracerContext awaitFinishAsync() {
isRunningInAsyncMode = true; if (!isRunningInAsyncMode) {
synchronized (this) {
if (!isRunningInAsyncMode) {
asyncFinishLock = new ReentrantLock();
asyncSpanCounter = new AtomicInteger(0);
isRunningInAsyncMode = true;
}
}
}
asyncSpanCounter.addAndGet(1); asyncSpanCounter.addAndGet(1);
return this; return this;
} }
...@@ -432,7 +436,7 @@ public class TracingContext implements AbstractTracerContext { ...@@ -432,7 +436,7 @@ public class TracingContext implements AbstractTracerContext {
asyncFinishLock.lock(); asyncFinishLock.lock();
} }
try { try {
if (activeSpanStack.isEmpty() && asyncSpanCounter.get() == 0) { if (activeSpanStack.isEmpty() && (!isRunningInAsyncMode || asyncSpanCounter.get() == 0)) {
return true; return true;
} }
} finally { } finally {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册