Fix NPE in RocketMQ instrumentation (#4901)
* Fix NPE in RocketMQ instrumentation * fix tests * add exception * Changed the condition a bit
This commit is contained in:
parent
98d3f88ab8
commit
e8e6813f97
|
@ -61,9 +61,11 @@ class RockerMqConsumerAttributeExtractor extends MessagingAttributesExtractor<Me
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected Long messagePayloadSize(MessageExt request) {
|
protected Long messagePayloadSize(MessageExt request) {
|
||||||
return (long) request.getBody().length;
|
byte[] body = request.getBody();
|
||||||
|
return body == null ? null : (long) body.length;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|
|
@ -10,6 +10,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.messaging.MessagingAttr
|
||||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import org.apache.rocketmq.client.hook.SendMessageContext;
|
import org.apache.rocketmq.client.hook.SendMessageContext;
|
||||||
|
import org.apache.rocketmq.client.producer.SendResult;
|
||||||
|
import org.apache.rocketmq.common.message.Message;
|
||||||
|
|
||||||
class RockerMqProducerAttributeExtractor
|
class RockerMqProducerAttributeExtractor
|
||||||
extends MessagingAttributesExtractor<SendMessageContext, Void> {
|
extends MessagingAttributesExtractor<SendMessageContext, Void> {
|
||||||
|
@ -28,9 +30,11 @@ class RockerMqProducerAttributeExtractor
|
||||||
return SemanticAttributes.MessagingDestinationKindValues.TOPIC;
|
return SemanticAttributes.MessagingDestinationKindValues.TOPIC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected String destination(SendMessageContext sendMessageContext) {
|
protected String destination(SendMessageContext sendMessageContext) {
|
||||||
return sendMessageContext.getMessage().getTopic();
|
Message message = sendMessageContext.getMessage();
|
||||||
|
return message == null ? null : message.getTopic();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -77,6 +81,7 @@ class RockerMqProducerAttributeExtractor
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
protected String messageId(SendMessageContext request, @Nullable Void unused) {
|
protected String messageId(SendMessageContext request, @Nullable Void unused) {
|
||||||
return request.getSendResult().getMsgId();
|
SendResult sendResult = request.getSendResult();
|
||||||
|
return sendResult == null ? null : sendResult.getMsgId();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,7 +22,9 @@ class RockerMqProducerExperimentalAttributeExtractor
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart(AttributesBuilder attributes, SendMessageContext request) {
|
public void onStart(AttributesBuilder attributes, SendMessageContext request) {
|
||||||
|
if (request.getMessage() != null) {
|
||||||
set(attributes, MESSAGING_ROCKETMQ_TAGS, request.getMessage().getTags());
|
set(attributes, MESSAGING_ROCKETMQ_TAGS, request.getMessage().getTags());
|
||||||
|
}
|
||||||
set(attributes, MESSAGING_ROCKETMQ_BROKER_ADDRESS, request.getBrokerAddr());
|
set(attributes, MESSAGING_ROCKETMQ_BROKER_ADDRESS, request.getBrokerAddr());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,9 +40,10 @@ final class TracingSendMessageHookImpl implements SendMessageHook {
|
||||||
if (context == null) {
|
if (context == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (context.getMqTraceContext() instanceof Context) {
|
if (context.getMqTraceContext() instanceof Context
|
||||||
|
&& (context.getSendResult() != null || context.getException() != null)) {
|
||||||
Context otelContext = (Context) context.getMqTraceContext();
|
Context otelContext = (Context) context.getMqTraceContext();
|
||||||
instrumenter.end(otelContext, context, null, null);
|
instrumenter.end(otelContext, context, null, context.getException());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue