This is an automated email from the ASF dual-hosted git repository.

liubao pushed a commit to branch 2.8.x
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/2.8.x by this push:
     new 8fb8f0da4 [#4035] fix invocation context loss issue (#4110)
8fb8f0da4 is described below

commit 8fb8f0da487bfde94da14eb91f90a964121e6b71
Author: yanghao <[email protected]>
AuthorDate: Mon Dec 11 09:32:26 2023 +0800

    [#4035] fix invocation context loss issue (#4110)
---
 .../tracing/zipkin/ZipkinConsumerDelegate.java     |  2 +-
 .../zipkin/ZipkinConsumerTracingHandler.java       |  5 +---
 .../tracing/zipkin/ZipkinProviderDelegate.java     |  2 +-
 .../zipkin/ZipkinProviderTracingHandler.java       |  6 +----
 .../tracing/zipkin/ZipkinTracingFilter.java        | 15 ++++--------
 .../tracing/zipkin/ZipkinTracingHandler.java       | 28 ++++++++++++++--------
 .../tracing/zipkin/ZipkinTracingHandlerTest.java   | 14 +++--------
 7 files changed, 29 insertions(+), 43 deletions(-)

diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerDelegate.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerDelegate.java
index 84505d6d2..149dc8c6e 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerDelegate.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerDelegate.java
@@ -50,7 +50,7 @@ class ZipkinConsumerDelegate implements ZipkinTracingDelegate 
{
   }
 
   @Override
-  public synchronized Span createSpan(Invocation invocation) {
+  public Span createSpan(Invocation invocation) {
     return handler.handleSend(requestWrapper.invocation(invocation));
   }
 
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerTracingHandler.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerTracingHandler.java
index 788313413..8d823ffb9 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerTracingHandler.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinConsumerTracingHandler.java
@@ -24,10 +24,7 @@ import brave.http.HttpTracing;
 public class ZipkinConsumerTracingHandler extends ZipkinTracingHandler {
 
   public ZipkinConsumerTracingHandler() {
-    this(new 
ZipkinConsumerDelegate(BeanUtils.getContext().getBean(HttpTracing.class)));
+    super(BeanUtils.getContext().getBean(HttpTracing.class));
   }
 
-  private ZipkinConsumerTracingHandler(ZipkinTracingDelegate tracingHandler) {
-    super(tracingHandler);
-  }
 }
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderDelegate.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderDelegate.java
index 48156c57d..0820f0c8c 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderDelegate.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderDelegate.java
@@ -80,7 +80,7 @@ class ZipkinProviderDelegate implements ZipkinTracingDelegate 
{
   }
 
   @Override
-  public synchronized Span createSpan(Invocation invocation) {
+  public Span createSpan(Invocation invocation) {
     return handler.handleReceive(requestWrapper.invocation(invocation));
   }
 
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderTracingHandler.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderTracingHandler.java
index abec4f330..c66459c0a 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderTracingHandler.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinProviderTracingHandler.java
@@ -24,10 +24,6 @@ import brave.http.HttpTracing;
 public class ZipkinProviderTracingHandler extends ZipkinTracingHandler {
 
   public ZipkinProviderTracingHandler() {
-    this(new 
ZipkinProviderDelegate(BeanUtils.getContext().getBean(HttpTracing.class)));
-  }
-
-  private ZipkinProviderTracingHandler(ZipkinProviderDelegate tracingHandler) {
-    super(tracingHandler);
+    super(BeanUtils.getContext().getBean(HttpTracing.class));
   }
 }
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingFilter.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingFilter.java
index f896004eb..6dd8d5442 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingFilter.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingFilter.java
@@ -39,9 +39,8 @@ import brave.http.HttpTracing;
 public class ZipkinTracingFilter implements Filter {
   public static final String NAME = "zipkin";
 
-  private ZipkinConsumerDelegate consumer;
-
-  private ZipkinProviderDelegate producer;
+  @Autowired
+  private HttpTracing httpTracing;
 
   @Nonnull
   @Override
@@ -49,12 +48,6 @@ public class ZipkinTracingFilter implements Filter {
     return NAME;
   }
 
-  @Autowired
-  public void setHttpTracing(HttpTracing httpTracing) {
-    this.consumer = new ZipkinConsumerDelegate(httpTracing);
-    this.producer = new ZipkinProviderDelegate(httpTracing);
-  }
-
   @SuppressWarnings({"try", "unused"})
   @Override
   public CompletableFuture<Response> onFilter(Invocation invocation, 
FilterNode nextNode) {
@@ -69,9 +62,9 @@ public class ZipkinTracingFilter implements Filter {
 
   private ZipkinTracingDelegate collectTracing(Invocation invocation) {
     if (PRODUCER.equals(invocation.getInvocationType())) {
-      return producer;
+      return new ZipkinProviderDelegate(httpTracing);
     }
 
-    return consumer;
+    return new ZipkinConsumerDelegate(httpTracing);
   }
 }
diff --git 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandler.java
 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandler.java
index 7990d0dfa..5d6593663 100644
--- 
a/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandler.java
+++ 
b/handlers/handler-tracing-zipkin/src/main/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandler.java
@@ -17,6 +17,7 @@
 
 package org.apache.servicecomb.tracing.zipkin;
 
+import brave.http.HttpTracing;
 import org.apache.servicecomb.core.Handler;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.swagger.invocation.AsyncResponse;
@@ -25,31 +26,30 @@ import org.slf4j.LoggerFactory;
 
 import brave.Span;
 import brave.Tracer.SpanInScope;
-import brave.Tracing;
+
+import static 
org.apache.servicecomb.swagger.invocation.InvocationType.PRODUCER;
 
 class ZipkinTracingHandler implements Handler {
 
   private static final Logger LOGGER = 
LoggerFactory.getLogger(ZipkinTracingHandler.class);
 
-  private final Tracing tracer;
-
-  private final ZipkinTracingDelegate tracingDelegate;
+  private final HttpTracing httpTracing;
 
-  ZipkinTracingHandler(ZipkinTracingDelegate tracingDelegate) {
-    this.tracer = tracingDelegate.tracer();
-    this.tracingDelegate = tracingDelegate;
+  ZipkinTracingHandler(HttpTracing httpTracing) {
+    this.httpTracing = httpTracing;
   }
 
   @SuppressWarnings({"try", "unused"})
   @Override
   public void handle(Invocation invocation, AsyncResponse asyncResp) throws 
Exception {
+    ZipkinTracingDelegate tracingDelegate = collectTracing(invocation);
     Span span = tracingDelegate.createSpan(invocation);
-    try (SpanInScope scope = tracer.tracer().withSpanInScope(span)) {
+    try (SpanInScope scope = 
tracingDelegate.tracer().tracer().withSpanInScope(span)) {
       LOGGER.debug("{}: Generated tracing span for {}",
           tracingDelegate.name(),
           invocation.getOperationName());
 
-      invocation.next(onResponse(invocation, asyncResp, span));
+      invocation.next(onResponse(invocation, asyncResp, span, 
tracingDelegate));
     } catch (Exception e) {
       LOGGER.debug("{}: Failed invocation on {}",
           tracingDelegate.name(),
@@ -61,7 +61,7 @@ class ZipkinTracingHandler implements Handler {
     }
   }
 
-  private AsyncResponse onResponse(Invocation invocation, AsyncResponse 
asyncResp, Span span) {
+  private AsyncResponse onResponse(Invocation invocation, AsyncResponse 
asyncResp, Span span, ZipkinTracingDelegate tracingDelegate) {
     return response -> {
       Throwable error = response.isFailed() ? response.getResult() : null;
       tracingDelegate.onResponse(span, response, error);
@@ -74,4 +74,12 @@ class ZipkinTracingHandler implements Handler {
       asyncResp.handle(response);
     };
   }
+
+  private ZipkinTracingDelegate collectTracing(Invocation invocation) {
+    if (PRODUCER.equals(invocation.getInvocationType())) {
+      return new ZipkinProviderDelegate(httpTracing);
+    }
+
+    return new ZipkinConsumerDelegate(httpTracing);
+  }
 }
diff --git 
a/handlers/handler-tracing-zipkin/src/test/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandlerTest.java
 
b/handlers/handler-tracing-zipkin/src/test/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandlerTest.java
index 7773e98a2..f32032060 100644
--- 
a/handlers/handler-tracing-zipkin/src/test/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandlerTest.java
+++ 
b/handlers/handler-tracing-zipkin/src/test/java/org/apache/servicecomb/tracing/zipkin/ZipkinTracingHandlerTest.java
@@ -22,6 +22,7 @@ import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
+import brave.http.HttpTracing;
 import org.apache.servicecomb.core.Invocation;
 import org.apache.servicecomb.swagger.invocation.AsyncResponse;
 import org.apache.servicecomb.swagger.invocation.Response;
@@ -43,8 +44,6 @@ public class ZipkinTracingHandlerTest {
 
   private final AsyncResponse asyncResponse = 
Mockito.mock(AsyncResponse.class);
 
-  private final ZipkinTracingDelegate delegate = 
Mockito.mock(ZipkinTracingDelegate.class);
-
   private final Tracing tracing = Tracing.newBuilder().build();
 
   private final Span span = Mockito.mock(Span.class);
@@ -55,11 +54,8 @@ public class ZipkinTracingHandlerTest {
 
   @BeforeEach
   public void setUp() throws Exception {
-    when(delegate.tracer()).thenReturn(tracing);
-    when(delegate.createSpan(invocation)).thenReturn(span);
-    when(delegate.name()).thenReturn("delegate");
-
-    tracingHandler = new ZipkinTracingHandler(delegate);
+    HttpTracing httpTracing = HttpTracing.create(tracing);
+    tracingHandler = new ZipkinTracingHandler(httpTracing);
   }
 
   @Test
@@ -73,7 +69,6 @@ public class ZipkinTracingHandlerTest {
     argumentCaptor.getValue().handle(response);
 
     verify(asyncResponse).handle(response);
-    verify(delegate).onResponse(span, response, null);
   }
 
   @Test
@@ -90,7 +85,6 @@ public class ZipkinTracingHandlerTest {
     argumentCaptor.getValue().handle(response);
 
     verify(asyncResponse).handle(response);
-    verify(delegate).onResponse(span, response, exception);
   }
 
   @Test
@@ -103,7 +97,5 @@ public class ZipkinTracingHandlerTest {
     } catch (Exception e) {
       Assertions.assertEquals(exception, e);
     }
-
-    verify(delegate).onResponse(span, null, exception);
   }
 }

Reply via email to