diff --git a/CHANGES.md b/CHANGES.md index a0933d8386b54c6a5252782ab4d7c91f7b7f056f..ec780510f40cd0ef102b577a78661452fb7bde9b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -8,7 +8,7 @@ Release Notes. * Chore: adapt `create_source_release.sh` to make it runnable on Linux. #### Java Agent - +* Fix jdk-http and okhttp-3.x plugin did not overwrite the old trace header. #### OAP-Backend * Make meter receiver support MAL. diff --git a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java index 8b1a12b2baf517f7d9575bcf88f127d0ff955b9d..b88f846233ee6749dd8a520331d1814ceefc25af 100644 --- a/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java +++ b/apm-sniffer/apm-sdk-plugin/okhttp-3.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/okhttp/v3/RealCallInterceptor.java @@ -74,7 +74,7 @@ public class RealCallInterceptor implements InstanceMethodsAroundInterceptor, In CarrierItem next = contextCarrier.items(); while (next.hasNext()) { next = next.next(); - headerBuilder.add(next.getHeadKey(), next.getHeadValue()); + headerBuilder.set(next.getHeadKey(), next.getHeadValue()); } headersField.set(request, headerBuilder.build()); } diff --git a/apm-sniffer/bootstrap-plugins/jdk-http-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdk/http/HttpClientWriteRequestInterceptor.java b/apm-sniffer/bootstrap-plugins/jdk-http-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdk/http/HttpClientWriteRequestInterceptor.java index 37d66776d0e8d2a3a91e6395ee278fa84f01e821..58298b3acf23ad656da816afaabe38804d6a2fa1 100644 --- a/apm-sniffer/bootstrap-plugins/jdk-http-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdk/http/HttpClientWriteRequestInterceptor.java +++ b/apm-sniffer/bootstrap-plugins/jdk-http-plugin/src/main/java/org/apache/skywalking/apm/plugin/jdk/http/HttpClientWriteRequestInterceptor.java @@ -52,7 +52,7 @@ public class HttpClientWriteRequestInterceptor implements InstanceMethodsAroundI CarrierItem next = contextCarrier.items(); while (next.hasNext()) { next = next.next(); - headers.add(next.getHeadKey(), next.getHeadValue()); + headers.set(next.getHeadKey(), next.getHeadValue()); } } diff --git a/test/plugin/scenarios/jdk-http-scenario/src/main/java/org/apache/skywalking/apm/testcase/jdkhttp/controller/CaseController.java b/test/plugin/scenarios/jdk-http-scenario/src/main/java/org/apache/skywalking/apm/testcase/jdkhttp/controller/CaseController.java index 8310a1666fbba7532bbe4a7d6f0e76cec26229e0..4ff7fcaa54c4a261a0387062663ed6f23238cfb3 100644 --- a/test/plugin/scenarios/jdk-http-scenario/src/main/java/org/apache/skywalking/apm/testcase/jdkhttp/controller/CaseController.java +++ b/test/plugin/scenarios/jdk-http-scenario/src/main/java/org/apache/skywalking/apm/testcase/jdkhttp/controller/CaseController.java @@ -38,9 +38,11 @@ public class CaseController { @RequestMapping("/jdk-http-scenario") @ResponseBody public String testcase() throws IOException { + // Like gateway forward trace header. URL url = new URL("http://localhost:8080/jdk-http-scenario/case/receiveContext-0"); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.addRequestProperty("key", "value"); + connection.addRequestProperty("sw8", "123456"); int responseCode = connection.getResponseCode(); return "Success:" + responseCode; } diff --git a/test/plugin/scenarios/okhttp-scenario/src/main/java/test/apache/skywalking/testcase/okhttp/controller/CaseController.java b/test/plugin/scenarios/okhttp-scenario/src/main/java/test/apache/skywalking/testcase/okhttp/controller/CaseController.java index ace50a9fc80f1260d359da91592c1aab93990a26..efbe4b7df6459204a007801ae2e67c57c2cbc1a3 100644 --- a/test/plugin/scenarios/okhttp-scenario/src/main/java/test/apache/skywalking/testcase/okhttp/controller/CaseController.java +++ b/test/plugin/scenarios/okhttp-scenario/src/main/java/test/apache/skywalking/testcase/okhttp/controller/CaseController.java @@ -47,7 +47,9 @@ public class CaseController { @RequestMapping("/okhttp-case") @ResponseBody public String okHttpScenario() { - Request request = new Request.Builder().url("http://127.0.0.1:8080/okhttp-case/case/receiveContext-0").build(); + // Like gateway forward trace header. + Request request = new Request.Builder().url("http://127.0.0.1:8080/okhttp-case/case/receiveContext-0") + .header("sw8", "123456").build(); new OkHttpClient().newCall(request).enqueue(new Callback() { @Override @@ -58,6 +60,7 @@ public class CaseController { @Override public void onResponse(Call call, Response response) throws IOException { Request request = new Request.Builder().url("http://127.0.0.1:8080/okhttp-case/case/receiveContext-1") + .header("sw8", "123456") .build(); new OkHttpClient().newCall(request).execute(); }