protected Pair<Deque<Span>, Map<String, String>> linkTracingAndMdcToCurrentThread(ChannelHandlerContext ctx) { return AsyncNettyHelper.linkTracingAndMdcToCurrentThread(ctx); }
protected Pair<Deque<Span>, Map<String, String>> linkTracingAndMdcToCurrentThread(ChannelHandlerContext ctx) { return AsyncNettyHelper.linkTracingAndMdcToCurrentThread(ctx); }
@Override public U get() { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origSupplier.get(); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void run() { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); origRunnable.run(); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public R apply(T t, U u) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origBiFunction.apply(t, u); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void run() { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); origRunnable.run(); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public U apply(T t) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origFunction.apply(t); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void accept(T t) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); origConsumer.accept(t); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void operationComplete(ChannelFuture future) throws Exception { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); postCompleteOperation.accept(future); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void accept(T t, U u) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); origBiConsumer.accept(t, u); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void accept(T t) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); origConsumer.accept(t); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public U call() throws Exception { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origCallable.call(); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public U get() { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origSupplier.get(); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void accept(T t, U u) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); origBiConsumer.accept(t, u); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public U call() throws Exception { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origCallable.call(); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public void operationComplete(ChannelFuture future) throws Exception { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); postCompleteOperation.accept(future); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public R apply(T t, U u) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origBiFunction.apply(t, u); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Override public U apply(T t) { Pair<Deque<Span>, Map<String, String>> originalThreadInfo = null; try { originalThreadInfo = linkTracingAndMdcToCurrentThread(distributedTraceStackForExecution, mdcContextMapForExecution); return origFunction.apply(t); } finally { unlinkTracingAndMdcFromCurrentThread(originalThreadInfo); } } }
@Test public void linkTracingAndMdcToCurrentThread_pair_works_as_expected_with_non_null_pair_and_null_innards() { // given Pair<Deque<Span>, Map<String, String>> infoForLinking = Pair.of(null, null); resetTracingAndMdc(); Tracer.getInstance().startRequestWithRootSpan("foo-" + UUID.randomUUID().toString()); Pair<Deque<Span>, Map<String, String>> expectedPreCallInfo = Pair.of( Tracer.getInstance().getCurrentSpanStackCopy(), MDC.getCopyOfContextMap() ); // when Pair<Deque<Span>, Map<String, String>> preCallInfo = AsyncNettyHelper.linkTracingAndMdcToCurrentThread(infoForLinking); Pair<Deque<Span>, Map<String, String>> postCallInfo = Pair.of( Tracer.getInstance().getCurrentSpanStackCopy(), MDC.getCopyOfContextMap() ); // then assertThat(preCallInfo).isEqualTo(expectedPreCallInfo); assertThat(postCallInfo).isEqualTo(Pair.of(null, Collections.emptyMap())); }
private Pair<Deque<Span>, Map<String, String>> setupStateWithNewSpan(String spanName) { Deque<Span> origSpanInfo = Tracer.getInstance().unregisterFromThread(); Map<String, String> origMdcInfo = MDC.getCopyOfContextMap(); Tracer.getInstance().startRequestWithRootSpan(spanName); Pair<Deque<Span>, Map<String, String>> infoForStatePair = AsyncNettyHelper.linkTracingAndMdcToCurrentThread(origSpanInfo, origMdcInfo); state.setDistributedTraceStack(infoForStatePair.getLeft()); state.setLoggerMdcContextMap(infoForStatePair.getRight()); return infoForStatePair; }