From bafe9067498be25ae6afef20c76657560d276250 Mon Sep 17 00:00:00 2001 From: meizengxin Date: Thu, 4 Jul 2024 14:00:07 +0800 Subject: [PATCH 1/2] Fix problem in the jetty-client-9.x which leading original listener reading empty content --- .../jetty-client-9.x-plugin/pom.xml | 2 +- .../v9/client/CompleteListenerWrapper.java | 46 ++++++++++++++++++- .../AsyncHttpRequestSendInterceptorTest.java | 5 +- .../SyncHttpRequestSendInterceptorTest.java | 3 +- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml index 8e091d09b2..1963d3fa6b 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/pom.xml @@ -31,7 +31,7 @@ http://maven.apache.org - 9.1.0.v20131115 + 9.4.55.v20240627 diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java index 50697bf3e4..24074d922c 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/main/java/org/apache/skywalking/apm/plugin/jetty/v9/client/CompleteListenerWrapper.java @@ -25,9 +25,17 @@ import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.eclipse.jetty.client.api.Response; import org.eclipse.jetty.client.api.Result; +import org.eclipse.jetty.http.HttpField; +import org.eclipse.jetty.util.Callback; + +import java.nio.ByteBuffer; + +public class CompleteListenerWrapper implements + Response.BeginListener, Response.HeaderListener, Response.HeadersListener, Response.ContentListener, + Response.SuccessListener, Response.FailureListener, Response.CompleteListener, Response.AsyncContentListener { -public class CompleteListenerWrapper implements Response.CompleteListener { private Response.CompleteListener callback; + private ContextSnapshot context; public CompleteListenerWrapper(Response.CompleteListener callback, ContextSnapshot context) { @@ -48,4 +56,40 @@ public void onComplete(Result result) { } ContextManager.stopSpan(); } + + @Override + public void onContent(Response response, ByteBuffer content) { + ((Response.ContentListener) callback).onContent(response, content); + } + + @Override + public void onFailure(Response response, Throwable failure) { + ((Response.FailureListener) callback).onFailure(response, failure); + } + + @Override + public void onSuccess(Response response) { + ((Response.SuccessListener) callback).onSuccess(response); + } + + @Override + public void onBegin(Response response) { + ((Response.BeginListener) callback).onBegin(response); + } + + @Override + public boolean onHeader(Response response, HttpField field) { + return ((Response.HeaderListener) callback).onHeader(response, field); + + } + + @Override + public void onHeaders(Response response) { + ((Response.HeadersListener) callback).onHeaders(response); + } + + @Override + public void onContent(Response response, ByteBuffer content, Callback originalCallback) { + ((Response.AsyncContentListener) this.callback).onContent(response, content, originalCallback); + } } diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java index ae3dc47db1..a2934b6194 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/AsyncHttpRequestSendInterceptorTest.java @@ -33,6 +33,7 @@ import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner; import org.apache.skywalking.apm.network.trace.component.ComponentsDefine; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.HttpConversation; import org.eclipse.jetty.client.HttpRequest; import org.eclipse.jetty.client.ResponseNotifier; import org.eclipse.jetty.client.api.Response; @@ -147,7 +148,7 @@ private void assertJettySpan() { private class MockHttpRequest extends HttpRequest implements EnhancedInstance { public MockHttpRequest(HttpClient httpClient, URI uri) { - super(httpClient, uri); + super(httpClient, new HttpConversation(), uri); } @Override @@ -173,7 +174,7 @@ public void setSkyWalkingDynamicField(Object value) { private class MockResponseNotifier extends ResponseNotifier implements EnhancedInstance { public MockResponseNotifier(HttpClient client) { - super(client); + super(); } @Override diff --git a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java index e4a861fbc7..19358b8af5 100644 --- a/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java +++ b/apm-sniffer/apm-sdk-plugin/jetty-plugin/jetty-client-9.x-plugin/src/test/java/org/apache/skywalking/apm/plugin/jetty/v9/client/SyncHttpRequestSendInterceptorTest.java @@ -34,6 +34,7 @@ import org.apache.skywalking.apm.agent.test.tools.SpanAssert; import org.apache.skywalking.apm.agent.test.tools.TracingSegmentRunner; import org.eclipse.jetty.client.HttpClient; +import org.eclipse.jetty.client.HttpConversation; import org.eclipse.jetty.client.HttpRequest; import org.junit.Assert; import org.junit.Before; @@ -124,7 +125,7 @@ public void testMethodsAroundError() throws Throwable { private class MockHttpRequest extends HttpRequest implements EnhancedInstance { public MockHttpRequest(HttpClient httpClient, URI uri) { - super(httpClient, uri); + super(httpClient, new HttpConversation(), uri); } @Override From 101c1aff9d389d76861b3b31da74215112109a34 Mon Sep 17 00:00:00 2001 From: meizengxin Date: Thu, 4 Jul 2024 14:23:17 +0800 Subject: [PATCH 2/2] update CHANGES.md. --- CHANGES.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGES.md b/CHANGES.md index 623b5015f1..387d8ff0ff 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -22,6 +22,7 @@ Release Notes. * Improve 4x performance of ContextManagerExtendService.createTraceContext() * Add a plugin that supports the Solon framework. * Fixed issues in the MySQL component where the executeBatch method could result in empty SQL statements . +* Fix problem in the jetty-client-9.x which leading original listener reading empty content All issues and pull requests are [here](https://github.com/apache/skywalking/milestone/213?closed=1)