diff --git a/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java b/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java index 905fe0cb1..a2e3fe391 100644 --- a/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java +++ b/src/main/java/io/vertx/core/eventbus/impl/HandlerRegistration.java @@ -398,9 +398,11 @@ public class HandlerRegistration implements MessageConsumer, Handler implements Message { protected U sentBody; protected V receivedBody; protected boolean send; + protected Object trace; public MessageImpl(boolean src, EventBusImpl bus) { this.bus = bus; @@ -127,7 +128,9 @@ public class MessageImpl implements Message { } protected MessageImpl createReply(Object message, DeliveryOptions options) { - return bus.createMessage(true, src, replyAddress, options.getHeaders(), message, options.getCodecName()); + MessageImpl reply = bus.createMessage(true, src, replyAddress, options.getHeaders(), message, options.getCodecName()); + reply.trace = trace; + return reply; } @Override diff --git a/src/main/java/io/vertx/core/eventbus/impl/OutboundDeliveryContext.java b/src/main/java/io/vertx/core/eventbus/impl/OutboundDeliveryContext.java index 5bac8ed81..4bf6b820c 100644 --- a/src/main/java/io/vertx/core/eventbus/impl/OutboundDeliveryContext.java +++ b/src/main/java/io/vertx/core/eventbus/impl/OutboundDeliveryContext.java @@ -34,8 +34,6 @@ public class OutboundDeliveryContext implements DeliveryContext, Handler replyHandler; private final Promise writePromise; - private Object trace; - Iterator> iter; EventBusImpl bus; EventBusMetrics metrics; @@ -66,9 +64,9 @@ public class OutboundDeliveryContext implements DeliveryContext, Handler implements DeliveryContext, Handler biConsumer = (String key, String val) -> message.headers().set(key, val); - trace = tracer.sendRequest(ctx, message, message.send ? "send" : "publish", biConsumer, MessageTagExtractor.INSTANCE); + if (tracer != null) { + if (message.src) { + BiConsumer biConsumer = (String key, String val) -> message.headers().set(key, val); + message.trace = tracer.sendRequest(ctx, message, message.send ? "send" : "publish", biConsumer, MessageTagExtractor.INSTANCE); + } else if (message.trace != null) { + // Handle failure here + tracer.sendResponse(ctx, null, message.trace, null, TagExtractor.empty()); + } } bus.sendOrPub(this); } diff --git a/src/test/java/io/vertx/core/spi/tracing/EventBusTracerTestBase.java b/src/test/java/io/vertx/core/spi/tracing/EventBusTracerTestBase.java index dc244bc71..ed240b597 100644 --- a/src/test/java/io/vertx/core/spi/tracing/EventBusTracerTestBase.java +++ b/src/test/java/io/vertx/core/spi/tracing/EventBusTracerTestBase.java @@ -19,6 +19,7 @@ import io.vertx.core.impl.ContextInternal; import io.vertx.test.core.Repeat; import io.vertx.test.core.TestUtils; import io.vertx.test.core.VertxTestBase; +import org.junit.Ignore; import org.junit.Test; import java.util.*; @@ -244,9 +245,9 @@ public abstract class EventBusTracerTestBase extends VertxTestBase { vertx2.eventBus().request("the_address", "msg", new DeliveryOptions().setSendTimeout(100), onFailure(failure -> { })); }); - waitUntil(() -> ebTracer.sendEvents.size() + ebTracer.receiveEvents.size() == 4); + waitUntil(() -> ebTracer.sendEvents.size() + ebTracer.receiveEvents.size() == 3); assertEquals(Arrays.asList("sendRequest[the_address]", "receiveResponse[TIMEOUT]"), ebTracer.sendEvents); - assertEquals(Arrays.asList("receiveRequest[the_address]", "sendResponse[]"), ebTracer.receiveEvents); + assertEquals(Arrays.asList("receiveRequest[the_address]"), ebTracer.receiveEvents); } @Test