From cc2163b7c2e4d39cfa4aadcabfe83bf9ae340ef5 Mon Sep 17 00:00:00 2001 From: wusheng Date: Tue, 19 Sep 2017 23:36:29 +0800 Subject: [PATCH] Fix compile issues. --- .../toolkit/opentracing/SkywalkingTracer.java | 74 +------------------ .../toolkit/opentracing/TextMapContext.java | 9 +-- .../agent/core/context/CarrierItemHead.java | 10 +++ .../agent/core/context/ContextCarrier.java | 4 +- .../apm/agent/core/context/ids/ID.java | 27 +++++-- .../core/context/ContextManagerTest.java | 4 +- .../apm/plugin/dubbo/DubboInterceptor.java | 12 +-- .../plugin/dubbo/DubboInterceptorTest.java | 41 +--------- .../dubbo/RequestParamForTestBelow283.java | 10 --- .../http/v9/DefaultHttpClientInterceptor.java | 6 +- .../v4/HttpClientExecuteInterceptor.java | 6 +- .../motan/MotanConsumerInterceptor.java | 6 +- .../motan/MotanProviderInterceptor.java | 6 +- .../plugin/okhttp/v3/RealCallInterceptor.java | 6 +- .../plugin/resin/v3/ResinV3Interceptor.java | 6 +- .../plugin/resin/v4/ResinV4Interceptor.java | 6 +- .../ControllerServiceMethodInterceptor.java | 14 ++-- .../async/RestExecuteInterceptor.java | 2 +- .../sync/RestExecuteInterceptor.java | 2 +- .../sync/RestRequestInterceptor.java | 10 ++- .../http/client/RestRequestInterceptor.java | 11 ++- .../tomcat78x/TomcatInvokeInterceptor.java | 6 +- .../SkywalkingTracerExtractInterceptor.java | 31 ++++++-- .../SkywalkingTracerInjectInterceptor.java | 21 +++++- 24 files changed, 143 insertions(+), 187 deletions(-) create mode 100644 apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/CarrierItemHead.java delete mode 100644 apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/RequestParamForTestBelow283.java diff --git a/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingTracer.java b/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingTracer.java index 0ae5db2da3..0a74e4a668 100644 --- a/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingTracer.java +++ b/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/SkywalkingTracer.java @@ -5,64 +5,26 @@ import io.opentracing.Span; import io.opentracing.SpanContext; import io.opentracing.Tracer; import io.opentracing.propagation.Format; -import io.opentracing.propagation.TextMap; -import java.nio.ByteBuffer; -import java.nio.charset.Charset; -import java.util.Iterator; -import java.util.Map; /** * @author wusheng */ public class SkywalkingTracer implements Tracer { - private static String TRACE_HEAD_NAME = "sw3"; - @NeedSnifferActivation("1. ContextManager#inject" + - "2. ContextCarrier#serialize") - private String inject() { - return null; - } - - @NeedSnifferActivation("1. ContextCarrier#deserialize" + - "2. ContextManager#extract") - private void extract(String carrier) { - - } - - @Override public SpanBuilder buildSpan(String operationName) { return new SkywalkingSpanBuilder(operationName); } + @NeedSnifferActivation @Override public void inject(SpanContext spanContext, Format format, C carrier) { - if (Format.Builtin.TEXT_MAP.equals(format) || Format.Builtin.HTTP_HEADERS.equals(format)) { - ((TextMap)carrier).put(TRACE_HEAD_NAME, inject()); - } else if (Format.Builtin.BINARY.equals(format)) { - byte[] key = TRACE_HEAD_NAME.getBytes(ByteBufferContext.CHARSET); - byte[] value = inject().getBytes(ByteBufferContext.CHARSET); - ((ByteBuffer)carrier).put(key); - ((ByteBuffer)carrier).putInt(value.length); - ((ByteBuffer)carrier).put(value); - } else { - throw new IllegalArgumentException("Unsupported format: " + format); - } } + @NeedSnifferActivation @Override public SpanContext extract(Format format, C carrier) { - if (Format.Builtin.TEXT_MAP.equals(format) || Format.Builtin.HTTP_HEADERS.equals(format)) { - TextMap textMapCarrier = (TextMap)carrier; - extract(fetchContextData(textMapCarrier)); - return new TextMapContext(textMapCarrier); - } else if (Format.Builtin.BINARY.equals(format)) { - ByteBuffer byteBufferCarrier = (ByteBuffer)carrier; - extract(fetchContextData(byteBufferCarrier)); - return new ByteBufferContext((ByteBuffer)carrier); - } else { - throw new IllegalArgumentException("Unsupported format: " + format); - } + return new TextMapContext(); } @Override @@ -78,34 +40,4 @@ public class SkywalkingTracer implements Tracer { throw new IllegalArgumentException("span must be a type of SkywalkingSpan"); } } - - private String fetchContextData(TextMap textMap) { - Iterator> iterator = textMap.iterator(); - while (iterator.hasNext()) { - Map.Entry entry = iterator.next(); - if (TRACE_HEAD_NAME.equals(entry.getKey())) { - return entry.getValue(); - } - } - - return null; - } - - private String fetchContextData(ByteBuffer byteBuffer) { - String contextDataStr = new String(byteBuffer.array(), Charset.forName("UTF-8")); - int index = contextDataStr.indexOf(TRACE_HEAD_NAME); - if (index == -1) { - return null; - } - - try { - byteBuffer.position(index + TRACE_HEAD_NAME.getBytes().length); - byte[] contextDataBytes = new byte[byteBuffer.getInt()]; - byteBuffer.get(contextDataBytes); - return new String(contextDataBytes, Charset.forName("UTF-8")); - } catch (Exception e) { - return null; - } - } - } diff --git a/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/TextMapContext.java b/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/TextMapContext.java index 90152ce225..1afef3a082 100644 --- a/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/TextMapContext.java +++ b/apm-application-toolkit/apm-toolkit-opentracing/src/main/java/org/skywalking/apm/toolkit/opentracing/TextMapContext.java @@ -1,8 +1,6 @@ package org.skywalking.apm.toolkit.opentracing; import io.opentracing.SpanContext; -import io.opentracing.propagation.TextMap; - import java.util.HashMap; import java.util.Map; @@ -10,14 +8,11 @@ import java.util.Map; * Created by wusheng on 2016/12/21. */ public class TextMapContext implements SpanContext { - private final TextMap textMap; - - TextMapContext(TextMap textMap) { - this.textMap = textMap; + public TextMapContext() { } @Override public Iterable> baggageItems() { - return new HashMap().entrySet(); + return new HashMap(0).entrySet(); } } diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/CarrierItemHead.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/CarrierItemHead.java new file mode 100644 index 0000000000..baf4827822 --- /dev/null +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/CarrierItemHead.java @@ -0,0 +1,10 @@ +package org.skywalking.apm.agent.core.context; + +/** + * @author wusheng + */ +public class CarrierItemHead extends CarrierItem { + public CarrierItemHead(CarrierItem next) { + super("", "", next); + } +} diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java index 8ff02ad055..4cd4897ff4 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ContextCarrier.java @@ -61,7 +61,8 @@ public class ContextCarrier implements Serializable { public CarrierItem items() { SW3CarrierItem carrierItem = new SW3CarrierItem(this, null); - return carrierItem; + CarrierItemHead head = new CarrierItemHead(carrierItem); + return head; } /** @@ -119,6 +120,7 @@ public class ContextCarrier implements Serializable { */ public boolean isValid() { return traceSegmentId != null + && traceSegmentId.isValid() && getSpanId() > -1 && parentApplicationInstanceId != DictionaryUtil.nullValue() && entryApplicationInstanceId != DictionaryUtil.nullValue() diff --git a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java index 4a5369451d..5f31ac9bc3 100644 --- a/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java +++ b/apm-sniffer/apm-agent-core/src/main/java/org/skywalking/apm/agent/core/context/ids/ID.java @@ -10,24 +10,31 @@ public class ID { private long part2; private long part3; private String encoding; + private boolean isValid; public ID(long part1, long part2, long part3) { this.part1 = part1; this.part2 = part2; this.part3 = part3; this.encoding = null; + this.isValid = true; } public ID(String encodingString) { - String[] idParts = encodingString.split(".", 3); - int index = 0; + String[] idParts = encodingString.split("\\.", 3); + this.isValid = true; for (int part = 0; part < 3; part++) { - if (part == 0) { - part1 = Long.parseLong(idParts[part]); - } else if (part == 1) { - part2 = Long.parseLong(idParts[part]); - } else { - part3 = Long.parseLong(idParts[part]); + try { + if (part == 0) { + part1 = Long.parseLong(idParts[part]); + } else if (part == 1) { + part2 = Long.parseLong(idParts[part]); + } else { + part3 = Long.parseLong(idParts[part]); + } + } catch (NumberFormatException e) { + this.isValid = false; + break; } } @@ -66,6 +73,10 @@ public class ID { return result; } + public boolean isValid() { + return isValid; + } + public UniqueId transform() { return UniqueId.newBuilder().addIdParts(part1).addIdParts(part2).addIdParts(part3).build(); } diff --git a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java index d8f8cb4cb3..1753489285 100644 --- a/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java +++ b/apm-sniffer/apm-agent-core/src/test/java/org/skywalking/apm/agent/core/context/ContextManagerTest.java @@ -79,7 +79,7 @@ public class ContextManagerTest { @Test public void createMultipleEntrySpan() { - ContextCarrier contextCarrier = new ContextCarrier().deserialize("#AQA*#AQA*4WcWe0tQNQA*|1|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + ContextCarrier contextCarrier = new ContextCarrier().deserialize("1.2343.234234234|1|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); assertTrue(contextCarrier.isValid()); AbstractSpan firstEntrySpan = ContextManager.createEntrySpan("/testFirstEntry", contextCarrier); @@ -202,7 +202,7 @@ public class ContextManagerTest { @Test public void testTransform() throws InvalidProtocolBufferException { - ContextCarrier contextCarrier = new ContextCarrier().deserialize("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + ContextCarrier contextCarrier = new ContextCarrier().deserialize("1.234.1983829|3|1|1|#127.0.0.1:8080|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); assertTrue(contextCarrier.isValid()); AbstractSpan firstEntrySpan = ContextManager.createEntrySpan("/testFirstEntry", contextCarrier); diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java index 4a0a05d626..5cfa983eda 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/main/java/org/skywalking/apm/plugin/dubbo/DubboInterceptor.java @@ -50,16 +50,16 @@ public class DubboInterceptor implements InstanceMethodsAroundInterceptor { span = ContextManager.createExitSpan(generateOperationName(requestURL, invocation), contextCarrier, host + ":" + port); //invocation.getAttachments().put("contextData", contextDataStr); //@see https://github.com/alibaba/dubbo/blob/dubbo-2.5.3/dubbo-rpc/dubbo-rpc-api/src/main/java/com/alibaba/dubbo/rpc/RpcInvocation.java#L154-L161 - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); rpcContext.getAttachments().put(next.getHeadKey(), next.getHeadValue()); } } else { ContextCarrier contextCarrier = new ContextCarrier(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); next.setHeadValue(rpcContext.getAttachment(next.getHeadKey())); } diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java index 16b61619b5..bcdc3b7653 100644 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/DubboInterceptorTest.java @@ -13,11 +13,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; import org.powermock.modules.junit4.PowerMockRunnerDelegate; import org.skywalking.apm.agent.core.conf.Config; -import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.trace.AbstractTracingSpan; import org.skywalking.apm.agent.core.context.trace.LogDataEntity; import org.skywalking.apm.agent.core.context.trace.SpanLayer; @@ -26,7 +24,6 @@ import org.skywalking.apm.agent.core.context.trace.TraceSegmentRef; import org.skywalking.apm.agent.core.context.util.KeyValuePair; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; -import org.skywalking.apm.agent.test.helper.FieldSetter; import org.skywalking.apm.agent.test.helper.SegmentHelper; import org.skywalking.apm.agent.test.helper.SegmentRefHelper; import org.skywalking.apm.agent.test.helper.SpanHelper; @@ -34,7 +31,6 @@ import org.skywalking.apm.agent.test.tools.AgentServiceRule; import org.skywalking.apm.agent.test.tools.SegmentStorage; import org.skywalking.apm.agent.test.tools.SegmentStoragePoint; import org.skywalking.apm.agent.test.tools.TracingSegmentRunner; -import org.skywalking.apm.plugin.dubbox.BugFixActive; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNull; @@ -44,7 +40,6 @@ import static org.powermock.api.mockito.PowerMockito.when; @RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(TracingSegmentRunner.class) -@PrepareForTest({RpcContext.class, BugFixActive.class}) public class DubboInterceptorTest { @SegmentStoragePoint @@ -58,7 +53,6 @@ public class DubboInterceptorTest { private DubboInterceptor dubboInterceptor; - private RequestParamForTestBelow283 testParam; @Mock private RpcContext rpcContext; @Mock @@ -76,39 +70,20 @@ public class DubboInterceptorTest { @Before public void setUp() throws Exception { dubboInterceptor = new DubboInterceptor(); - testParam = new RequestParamForTestBelow283(); PowerMockito.mockStatic(RpcContext.class); when(invoker.getUrl()).thenReturn(URL.valueOf("dubbo://127.0.0.1:20880/org.skywalking.apm.test.TestDubboService")); when(invocation.getMethodName()).thenReturn("test"); when(invocation.getParameterTypes()).thenReturn(new Class[] {String.class}); - when(invocation.getArguments()).thenReturn(new Object[] {testParam}); + when(invocation.getArguments()).thenReturn(new Object[] {"abc"}); PowerMockito.when(RpcContext.getContext()).thenReturn(rpcContext); when(rpcContext.isConsumerSide()).thenReturn(true); allArguments = new Object[] {invoker, invocation}; argumentTypes = new Class[] {invoker.getClass(), invocation.getClass()}; Config.Agent.APPLICATION_CODE = "DubboTestCases-APP"; - FieldSetter.setStaticValue(BugFixActive.class, "ACTIVE", false); } - @Test - public void testConsumerBelow283() throws Throwable { - BugFixActive.active(); - - dubboInterceptor.beforeMethod(enhancedInstance, null, allArguments, argumentTypes, methodInterceptResult); - dubboInterceptor.afterMethod(enhancedInstance, null, allArguments, argumentTypes, result); - - assertThat(segmentStorage.getTraceSegments().size(), is(1)); - TraceSegment traceSegment = segmentStorage.getTraceSegments().get(0); - - assertThat(SegmentHelper.getSpans(traceSegment).size(), is(1)); - assertConsumerSpan(SegmentHelper.getSpans(traceSegment).get(0)); - - ContextCarrier contextCarrier = new ContextCarrier(); - contextCarrier.deserialize(testParam.getTraceContext()); - assertTrue(contextCarrier.isValid()); - } @Test public void testConsumerWithAttachment() throws Throwable { @@ -147,25 +122,13 @@ public class DubboInterceptorTest { @Test public void testProviderWithAttachment() throws Throwable { when(rpcContext.isConsumerSide()).thenReturn(false); - when(rpcContext.getAttachment(Config.Plugin.Propagation.HEADER_NAME)).thenReturn("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); + when(rpcContext.getAttachment("sw3")).thenReturn("1.323.4433|3|1|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); dubboInterceptor.beforeMethod(enhancedInstance, null, allArguments, argumentTypes, methodInterceptResult); dubboInterceptor.afterMethod(enhancedInstance, null, allArguments, argumentTypes, result); assertProvider(); } - @Test - public void testProviderBelow283() throws Throwable { - when(rpcContext.isConsumerSide()).thenReturn(false); - FieldSetter.setStaticValue(BugFixActive.class, "ACTIVE", true); - - testParam.setTraceContext("#AQA*#AQA*4WcWe0tQNQA*|3|1|1|#192.168.1.8 :18002|#/portal/|#/testEntrySpan|#AQA*#AQA*Et0We0tQNQA*"); - - dubboInterceptor.beforeMethod(enhancedInstance, null, allArguments, argumentTypes, methodInterceptResult); - dubboInterceptor.afterMethod(enhancedInstance, null, allArguments, argumentTypes, result); - - assertProvider(); - } private void assertConsumerTraceSegmentInErrorCase( TraceSegment traceSegment) { diff --git a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/RequestParamForTestBelow283.java b/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/RequestParamForTestBelow283.java deleted file mode 100644 index 93b8f27f6b..0000000000 --- a/apm-sniffer/apm-sdk-plugin/dubbo-plugin/src/test/java/org/skywalking/apm/plugin/dubbo/RequestParamForTestBelow283.java +++ /dev/null @@ -1,10 +0,0 @@ -package org.skywalking.apm.plugin.dubbo; - -import org.skywalking.apm.plugin.dubbox.SWBaseBean; - -/** - * {@link RequestParamForTestBelow283} store context data for test. - */ -public class RequestParamForTestBelow283 extends SWBaseBean { - -} diff --git a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java index bdd4e0f765..57feb80f8b 100644 --- a/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/feign-default-http-9.x-plugin/src/main/java/org/skywalking/apm/plugin/feign/http/v9/DefaultHttpClientInterceptor.java @@ -61,9 +61,9 @@ public class DefaultHttpClientInterceptor implements InstanceMethodsAroundInterc headersField.setAccessible(true); Map> headers = new LinkedHashMap>(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); List contextCollection = new LinkedList(); contextCollection.add(next.getHeadValue()); headers.put(next.getHeadKey(), contextCollection); diff --git a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java index 601b083ccb..76da7413e2 100644 --- a/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/httpClient-4.x-plugin/src/main/java/org/skywalking/apm/plugin/httpClient/v4/HttpClientExecuteInterceptor.java @@ -42,9 +42,9 @@ public class HttpClientExecuteInterceptor implements InstanceMethodsAroundInterc Tags.HTTP.METHOD.set(span, httpRequest.getRequestLine().getMethod()); SpanLayer.asHttp(span); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); httpRequest.setHeader(next.getHeadKey(), next.getHeadValue()); } } diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptor.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptor.java index bb7c2cf4cf..ed94fe1d74 100644 --- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanConsumerInterceptor.java @@ -42,9 +42,9 @@ public class MotanConsumerInterceptor implements InstanceConstructorInterceptor, span.setComponent(ComponentsDefine.MOTAN); Tags.URL.set(span, url.getIdentity()); SpanLayer.asRPCFramework(span); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); request.setAttachment(next.getHeadKey(), next.getHeadValue()); } } diff --git a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptor.java b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptor.java index c216cdbeff..c647c254f3 100644 --- a/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/motan-plugin/src/main/java/org/skywalking/apm/plugin/motan/MotanProviderInterceptor.java @@ -28,9 +28,9 @@ public class MotanProviderInterceptor implements InstanceMethodsAroundIntercepto Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { Request request = (Request)allArguments[0]; ContextCarrier contextCarrier = new ContextCarrier(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); next.setHeadValue(request.getAttachments().get(next.getHeadKey())); } diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java index 69bda7d753..1ed78316ae 100644 --- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java @@ -67,9 +67,9 @@ public class RealCallInterceptor implements InstanceMethodsAroundInterceptor, In headersField.setAccessible(true); Headers.Builder headerBuilder = request.headers().newBuilder(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); headerBuilder.add(next.getHeadKey(), next.getHeadValue()); } headersField.set(request, headerBuilder.build()); diff --git a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v3/ResinV3Interceptor.java b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v3/ResinV3Interceptor.java index 6c457267ce..10809442f9 100644 --- a/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v3/ResinV3Interceptor.java +++ b/apm-sniffer/apm-sdk-plugin/resin-3.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v3/ResinV3Interceptor.java @@ -26,9 +26,9 @@ public class ResinV3Interceptor implements InstanceMethodsAroundInterceptor { Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { CauchoRequest request = (CauchoRequest)allArguments[0]; ContextCarrier contextCarrier = new ContextCarrier(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); next.setHeadValue(request.getHeader(next.getHeadKey())); } diff --git a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v4/ResinV4Interceptor.java b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v4/ResinV4Interceptor.java index 68a462db0c..92787c4414 100644 --- a/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v4/ResinV4Interceptor.java +++ b/apm-sniffer/apm-sdk-plugin/resin-4.x-plugin/src/main/java/org/skywalking/apm/plugin/resin/v4/ResinV4Interceptor.java @@ -23,9 +23,9 @@ public class ResinV4Interceptor implements InstanceMethodsAroundInterceptor { Class[] argumentsTypes, MethodInterceptResult result) throws Throwable { CauchoRequest request = (CauchoRequest)allArguments[0]; ContextCarrier contextCarrier = new ContextCarrier(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); next.setHeadValue(request.getHeader(next.getHeadKey())); } AbstractSpan span = ContextManager.createEntrySpan(request.getPageURI(), contextCarrier); diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/ControllerServiceMethodInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/ControllerServiceMethodInterceptor.java index 4a5ba25715..9397150692 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/ControllerServiceMethodInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/mvc-annotation-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/mvc/ControllerServiceMethodInterceptor.java @@ -3,7 +3,7 @@ package org.skywalking.apm.plugin.spring.mvc; import java.lang.reflect.Method; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.skywalking.apm.agent.core.conf.Config; +import org.skywalking.apm.agent.core.context.CarrierItem; import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.context.tag.Tags; @@ -19,8 +19,6 @@ import org.springframework.web.context.request.ServletRequestAttributes; /** * The ControllerServiceMethodInterceptor only use the first mapping value. - * - * @See {@link ControllerConstructorInterceptor} to explain why we are doing this. */ public class ControllerServiceMethodInterceptor implements InstanceMethodsAroundInterceptor { @Override @@ -40,8 +38,14 @@ public class ControllerServiceMethodInterceptor implements InstanceMethodsAround } HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); - String tracingHeaderValue = request.getHeader(Config.Plugin.Propagation.HEADER_NAME); - ContextCarrier contextCarrier = new ContextCarrier().deserialize(tracingHeaderValue); + + ContextCarrier contextCarrier = new ContextCarrier(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + next.setHeadValue(request.getHeader(next.getHeadKey())); + } + AbstractSpan span = ContextManager.createEntrySpan(requestURL, contextCarrier); Tags.URL.set(span, request.getRequestURL().toString()); Tags.HTTP.METHOD.set(span, request.getMethod()); diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java index 4ee3e25818..34827ab81c 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/async/RestExecuteInterceptor.java @@ -30,7 +30,7 @@ public class RestExecuteInterceptor implements InstanceMethodsAroundInterceptor SpanLayer.asHttp(span); Object[] cacheValues = new Object[3]; cacheValues[0] = requestURL; - cacheValues[1] = contextCarrier.serialize(); + cacheValues[1] = contextCarrier; objInst.setSkyWalkingDynamicField(cacheValues); } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java index a0764191bd..dab1248e14 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestExecuteInterceptor.java @@ -29,7 +29,7 @@ public class RestExecuteInterceptor implements InstanceMethodsAroundInterceptor Tags.HTTP.METHOD.set(span, httpMethod.toString()); SpanLayer.asHttp(span); - objInst.setSkyWalkingDynamicField(contextCarrier.serialize()); + objInst.setSkyWalkingDynamicField(contextCarrier); } @Override diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java index 23e062c5b1..59bc396944 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/skywalking/apm/plugin/spring/resttemplate/sync/RestRequestInterceptor.java @@ -1,7 +1,8 @@ package org.skywalking.apm.plugin.spring.resttemplate.sync; import java.lang.reflect.Method; -import org.skywalking.apm.agent.core.conf.Config; +import org.skywalking.apm.agent.core.context.CarrierItem; +import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; @@ -22,7 +23,12 @@ public class RestRequestInterceptor implements InstanceMethodsAroundInterceptor ClientHttpRequest clientHttpRequest = (ClientHttpRequest)ret; if (clientHttpRequest instanceof AbstractClientHttpRequest) { AbstractClientHttpRequest httpRequest = (AbstractClientHttpRequest)clientHttpRequest; - httpRequest.getHeaders().set(Config.Plugin.Propagation.HEADER_NAME, String.valueOf(objInst.getSkyWalkingDynamicField())); + ContextCarrier contextCarrier = (ContextCarrier)objInst.getSkyWalkingDynamicField(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + httpRequest.getHeaders().set(next.getHeadKey(), next.getHeadValue()); + } } return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/springframework/http/client/RestRequestInterceptor.java b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/springframework/http/client/RestRequestInterceptor.java index f8bde0b91a..4072cc39a9 100644 --- a/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/springframework/http/client/RestRequestInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/spring-plugins/resttemplate-4.x-plugin/src/main/java/org/springframework/http/client/RestRequestInterceptor.java @@ -1,7 +1,8 @@ package org.springframework.http.client; import java.lang.reflect.Method; -import org.skywalking.apm.agent.core.conf.Config; +import org.skywalking.apm.agent.core.context.CarrierItem; +import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; @@ -19,7 +20,13 @@ public class RestRequestInterceptor implements InstanceMethodsAroundInterceptor Object ret) throws Throwable { AbstractAsyncClientHttpRequest clientHttpRequest = (AbstractAsyncClientHttpRequest)ret; if (ret != null) { - clientHttpRequest.getHeaders().set(Config.Plugin.Propagation.HEADER_NAME, String.valueOf(((Object[])objInst.getSkyWalkingDynamicField())[1])); + Object[] cacheValues = (Object[])objInst.getSkyWalkingDynamicField(); + ContextCarrier contextCarrier = (ContextCarrier)cacheValues[1]; + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + clientHttpRequest.getHeaders().set(next.getHeadKey(), next.getHeadValue()); + } } return ret; } diff --git a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java index 8aafaee966..dd5b679d00 100644 --- a/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/tomcat-7.x-8.x-plugin/src/main/java/org/skywalking/apm/plugin/tomcat78x/TomcatInvokeInterceptor.java @@ -38,9 +38,9 @@ public class TomcatInvokeInterceptor implements InstanceMethodsAroundInterceptor HttpServletRequest request = (HttpServletRequest)allArguments[0]; ContextCarrier contextCarrier = new ContextCarrier(); - CarrierItem items = contextCarrier.items(); - while (items.hasNext()) { - CarrierItem next = items.next(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); next.setHeadValue(request.getHeader(next.getHeadKey())); } diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerExtractInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerExtractInterceptor.java index d91d291442..65df8591d2 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerExtractInterceptor.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerExtractInterceptor.java @@ -1,11 +1,16 @@ package org.skywalking.apm.toolkit.activation.opentracing.tracer; +import io.opentracing.propagation.Format; +import io.opentracing.propagation.TextMap; import java.lang.reflect.Method; +import java.util.Iterator; +import java.util.Map; +import org.skywalking.apm.agent.core.context.CarrierItem; import org.skywalking.apm.agent.core.context.ContextCarrier; -import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.InstanceMethodsAroundInterceptor; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.MethodInterceptResult; +import org.skywalking.apm.toolkit.opentracing.TextMapContext; public class SkywalkingTracerExtractInterceptor implements InstanceMethodsAroundInterceptor { @Override @@ -17,10 +22,26 @@ public class SkywalkingTracerExtractInterceptor implements InstanceMethodsAround @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { - String carrier = (String)allArguments[0]; - ContextCarrier contextCarrier = new ContextCarrier().deserialize(carrier); - ContextManager.extract(contextCarrier); - return ret; + Format format = (Format)allArguments[0]; + if (Format.Builtin.TEXT_MAP.equals(format) || Format.Builtin.HTTP_HEADERS.equals(format)) { + TextMap textMapCarrier = (TextMap)allArguments[1]; + + ContextCarrier contextCarrier = new ContextCarrier(); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + Iterator> iterator = textMapCarrier.iterator(); + while (iterator.hasNext()) { + Map.Entry entry = iterator.next(); + if (next.getHeadKey().equals(entry.getKey())) { + next.setHeadValue(entry.getValue()); + break; + } + } + + } + } + return new TextMapContext(); } @Override diff --git a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerInjectInterceptor.java b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerInjectInterceptor.java index 34a44c21e4..4c899ab6a8 100644 --- a/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerInjectInterceptor.java +++ b/apm-sniffer/apm-toolkit-activation/apm-toolkit-opentracing-activation/src/main/java/org/skywalking/apm/toolkit/activation/opentracing/tracer/SkywalkingTracerInjectInterceptor.java @@ -1,6 +1,9 @@ package org.skywalking.apm.toolkit.activation.opentracing.tracer; +import io.opentracing.propagation.Format; +import io.opentracing.propagation.TextMap; import java.lang.reflect.Method; +import org.skywalking.apm.agent.core.context.CarrierItem; import org.skywalking.apm.agent.core.context.ContextCarrier; import org.skywalking.apm.agent.core.context.ContextManager; import org.skywalking.apm.agent.core.plugin.interceptor.enhance.EnhancedInstance; @@ -17,9 +20,21 @@ public class SkywalkingTracerInjectInterceptor implements InstanceMethodsAroundI @Override public Object afterMethod(EnhancedInstance objInst, Method method, Object[] allArguments, Class[] argumentsTypes, Object ret) throws Throwable { - ContextCarrier contextCarrier = new ContextCarrier(); - ContextManager.inject(contextCarrier); - return contextCarrier.serialize(); + Format format = (Format)allArguments[1]; + if (Format.Builtin.TEXT_MAP.equals(format) || Format.Builtin.HTTP_HEADERS.equals(format)) { + TextMap carrier = (TextMap)allArguments[2]; + ContextCarrier contextCarrier = new ContextCarrier(); + ContextManager.inject(contextCarrier); + CarrierItem next = contextCarrier.items(); + while (next.hasNext()) { + next = next.next(); + carrier.put(next.getHeadKey(), next.getHeadValue()); + } + } else { + //Don't support other format yet. + } + + return null; } @Override -- GitLab