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:
Mateusz Rzeszutek 2021-12-16 02:32:01 +01:00 committed by GitHub
parent 98d3f88ab8
commit e8e6813f97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 6 deletions

View File

@ -61,9 +61,11 @@ class RockerMqConsumerAttributeExtractor extends MessagingAttributesExtractor<Me
return null;
}
@Nullable
@Override
protected Long messagePayloadSize(MessageExt request) {
return (long) request.getBody().length;
byte[] body = request.getBody();
return body == null ? null : (long) body.length;
}
@Nullable

View File

@ -10,6 +10,8 @@ import io.opentelemetry.instrumentation.api.instrumenter.messaging.MessagingAttr
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
import javax.annotation.Nullable;
import org.apache.rocketmq.client.hook.SendMessageContext;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;
class RockerMqProducerAttributeExtractor
extends MessagingAttributesExtractor<SendMessageContext, Void> {
@ -28,9 +30,11 @@ class RockerMqProducerAttributeExtractor
return SemanticAttributes.MessagingDestinationKindValues.TOPIC;
}
@Nullable
@Override
protected String destination(SendMessageContext sendMessageContext) {
return sendMessageContext.getMessage().getTopic();
Message message = sendMessageContext.getMessage();
return message == null ? null : message.getTopic();
}
@Override
@ -77,6 +81,7 @@ class RockerMqProducerAttributeExtractor
@Nullable
@Override
protected String messageId(SendMessageContext request, @Nullable Void unused) {
return request.getSendResult().getMsgId();
SendResult sendResult = request.getSendResult();
return sendResult == null ? null : sendResult.getMsgId();
}
}

View File

@ -22,7 +22,9 @@ class RockerMqProducerExperimentalAttributeExtractor
@Override
public void onStart(AttributesBuilder attributes, SendMessageContext request) {
set(attributes, MESSAGING_ROCKETMQ_TAGS, request.getMessage().getTags());
if (request.getMessage() != null) {
set(attributes, MESSAGING_ROCKETMQ_TAGS, request.getMessage().getTags());
}
set(attributes, MESSAGING_ROCKETMQ_BROKER_ADDRESS, request.getBrokerAddr());
}

View File

@ -40,9 +40,10 @@ final class TracingSendMessageHookImpl implements SendMessageHook {
if (context == null) {
return;
}
if (context.getMqTraceContext() instanceof Context) {
if (context.getMqTraceContext() instanceof Context
&& (context.getSendResult() != null || context.getException() != null)) {
Context otelContext = (Context) context.getMqTraceContext();
instrumenter.end(otelContext, context, null, null);
instrumenter.end(otelContext, context, null, context.getException());
}
}
}