Skip to content

Commit 6db0dc8

Browse files
authored
Fix non-lowercase messaging headers (#14479)
1 parent 7aa80c6 commit 6db0dc8

File tree

30 files changed

+79
-88
lines changed

30 files changed

+79
-88
lines changed

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/CapturedMessageHeadersUtil.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,21 @@
55

66
package io.opentelemetry.instrumentation.api.incubator.semconv.messaging;
77

8-
import static java.util.Collections.unmodifiableList;
9-
108
import io.opentelemetry.api.common.AttributeKey;
119
import java.util.List;
12-
import java.util.Locale;
1310
import java.util.concurrent.ConcurrentHashMap;
1411
import java.util.concurrent.ConcurrentMap;
15-
import java.util.stream.Collectors;
1612

1713
final class CapturedMessageHeadersUtil {
1814

1915
private static final ConcurrentMap<String, AttributeKey<List<String>>> attributeKeysCache =
2016
new ConcurrentHashMap<>();
2117

22-
static List<String> lowercase(List<String> names) {
23-
return unmodifiableList(
24-
names.stream().map(s -> s.toLowerCase(Locale.ROOT)).collect(Collectors.toList()));
25-
}
26-
2718
static AttributeKey<List<String>> attributeKey(String headerName) {
2819
return attributeKeysCache.computeIfAbsent(headerName, n -> createKey(n));
2920
}
3021

3122
private static AttributeKey<List<String>> createKey(String headerName) {
32-
// headerName is always lowercase, see MessagingAttributesExtractor
3323
String key = "messaging.header." + headerName.replace('-', '_');
3424
return AttributeKey.stringArrayKey(key);
3525
}

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractor.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import io.opentelemetry.instrumentation.api.instrumenter.AttributesExtractor;
1414
import io.opentelemetry.instrumentation.api.internal.SpanKey;
1515
import io.opentelemetry.instrumentation.api.internal.SpanKeyProvider;
16+
import java.util.ArrayList;
1617
import java.util.List;
1718
import javax.annotation.Nullable;
1819

@@ -85,7 +86,7 @@ public static <REQUEST, RESPONSE> MessagingAttributesExtractorBuilder<REQUEST, R
8586
List<String> capturedHeaders) {
8687
this.getter = getter;
8788
this.operation = operation;
88-
this.capturedHeaders = CapturedMessageHeadersUtil.lowercase(capturedHeaders);
89+
this.capturedHeaders = new ArrayList<>(capturedHeaders);
8990
}
9091

9192
@Override

instrumentation-api-incubator/src/main/java/io/opentelemetry/instrumentation/api/incubator/semconv/messaging/MessagingAttributesExtractorBuilder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ public final class MessagingAttributesExtractorBuilder<REQUEST, RESPONSE> {
3030
* Configures the messaging headers that will be captured as span attributes.
3131
*
3232
* <p>The messaging header values will be captured under the {@code messaging.header.<name>}
33-
* attribute key. The {@code <name>} part in the attribute key is the normalized header name:
34-
* lowercase, with dashes replaced by underscores.
33+
* attribute key. The {@code <name>} part in the attribute key is the header name with dashes
34+
* replaced by underscores.
3535
*
3636
* @param capturedHeaders A list of messaging header names.
3737
*/

instrumentation/aws-sdk/aws-sdk-1.11/library-autoconfigure/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ dependencies {
2626
tasks {
2727
withType<Test>().configureEach {
2828
systemProperty("otel.instrumentation.aws-sdk.experimental-span-attributes", "true")
29-
systemProperty("otel.instrumentation.messaging.experimental.capture-headers", "test-message-header")
29+
systemProperty("otel.instrumentation.messaging.experimental.capture-headers", "Test-Message-Header")
3030
}
3131

3232
val testReceiveSpansDisabled by registering(Test::class) {

instrumentation/aws-sdk/aws-sdk-1.11/library/src/test/java/io/opentelemetry/instrumentation/awssdk/v1_11/SqsTracingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public AmazonSQSAsyncClientBuilder configureClient(AmazonSQSAsyncClientBuilder c
2828
AwsSdkTelemetry.builder(testing().getOpenTelemetry())
2929
.setCaptureExperimentalSpanAttributes(true)
3030
.setMessagingReceiveInstrumentationEnabled(true)
31-
.setCapturedHeaders(singletonList("test-message-header"))
31+
.setCapturedHeaders(singletonList("Test-Message-Header"))
3232
.build()
3333
.newRequestHandler());
3434
}

instrumentation/aws-sdk/aws-sdk-1.11/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v1_11/AbstractSqsTracingTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -106,15 +106,15 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead
106106

107107
if (testCaptureHeaders) {
108108
sendMessageRequest.addMessageAttributesEntry(
109-
"test-message-header",
109+
"Test-Message-Header",
110110
new MessageAttributeValue().withDataType("String").withStringValue("test"));
111111
}
112112
sqsClient.sendMessage(sendMessageRequest);
113113

114114
ReceiveMessageRequest receiveMessageRequest =
115115
new ReceiveMessageRequest("http://localhost:" + sqsPort + "/000000000000/testSdkSqs");
116116
if (testCaptureHeaders) {
117-
receiveMessageRequest.withMessageAttributeNames("test-message-header");
117+
receiveMessageRequest.withMessageAttributeNames("Test-Message-Header");
118118
}
119119
ReceiveMessageResult receiveMessageResult = sqsClient.receiveMessage(receiveMessageRequest);
120120

@@ -182,7 +182,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead
182182
if (testCaptureHeaders) {
183183
attributes.add(
184184
satisfies(
185-
stringArrayKey("messaging.header.test_message_header"),
185+
stringArrayKey("messaging.header.Test_Message_Header"),
186186
val -> val.isEqualTo(singletonList("test"))));
187187
}
188188

@@ -222,7 +222,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead
222222
if (testCaptureHeaders) {
223223
attributes.add(
224224
satisfies(
225-
stringArrayKey("messaging.header.test_message_header"),
225+
stringArrayKey("messaging.header.Test_Message_Header"),
226226
val -> val.isEqualTo(singletonList("test"))));
227227
}
228228

@@ -261,7 +261,7 @@ void testSimpleSqsProducerConsumerServicesCaptureHeaders(boolean testCaptureHead
261261
if (testCaptureHeaders) {
262262
attributes.add(
263263
satisfies(
264-
stringArrayKey("messaging.header.test_message_header"),
264+
stringArrayKey("messaging.header.Test_Message_Header"),
265265
val -> val.isEqualTo(singletonList("test"))));
266266
}
267267
span.hasName("testSdkSqs process")

instrumentation/aws-sdk/aws-sdk-2.2/library-autoconfigure/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ tasks {
2828
withType<Test>().configureEach {
2929
systemProperty("otel.instrumentation.aws-sdk.experimental-span-attributes", true)
3030
systemProperty("otel.instrumentation.aws-sdk.experimental-record-individual-http-error", true)
31-
systemProperty("otel.instrumentation.messaging.experimental.capture-headers", "test-message-header")
31+
systemProperty("otel.instrumentation.messaging.experimental.capture-headers", "Test-Message-Header")
3232
systemProperty("testLatestDeps", findProperty("testLatestDeps") as Boolean)
3333
}
3434

instrumentation/aws-sdk/aws-sdk-2.2/library/src/test/java/io/opentelemetry/instrumentation/awssdk/v2_2/Aws2SqsTracingTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ void setup() {
3333
AwsSdkTelemetry.builder(getTesting().getOpenTelemetry())
3434
.setCaptureExperimentalSpanAttributes(true)
3535
.setMessagingReceiveInstrumentationEnabled(true)
36-
.setCapturedHeaders(singletonList("test-message-header"));
36+
.setCapturedHeaders(singletonList("Test-Message-Header"));
3737

3838
configure(telemetryBuilder);
3939
telemetry = telemetryBuilder.build();

instrumentation/aws-sdk/aws-sdk-2.2/testing/src/main/java/io/opentelemetry/instrumentation/awssdk/v2_2/AbstractAws2SqsTracingTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ protected void assertSqsTraces(boolean withParent, boolean captureHeaders) {
9393
if (captureHeaders) {
9494
attributes.add(
9595
satisfies(
96-
stringArrayKey("messaging.header.test_message_header"),
96+
stringArrayKey("messaging.header.Test_Message_Header"),
9797
v -> v.isEqualTo(ImmutableList.of("test"))));
9898
}
9999
span.hasName("testSdkSqs publish")
@@ -163,7 +163,7 @@ protected void assertSqsTraces(boolean withParent, boolean captureHeaders) {
163163
if (captureHeaders) {
164164
attributes.add(
165165
satisfies(
166-
stringArrayKey("messaging.header.test_message_header"),
166+
stringArrayKey("messaging.header.Test_Message_Header"),
167167
v -> v.isEqualTo(ImmutableList.of("test"))));
168168
}
169169

@@ -201,7 +201,7 @@ protected void assertSqsTraces(boolean withParent, boolean captureHeaders) {
201201
if (captureHeaders) {
202202
attributes.add(
203203
satisfies(
204-
stringArrayKey("messaging.header.test_message_header"),
204+
stringArrayKey("messaging.header.Test_Message_Header"),
205205
v -> v.isEqualTo(singletonList("test"))));
206206
}
207207

@@ -238,13 +238,13 @@ void testCaptureMessageHeaderAsAttributeSpan() throws URISyntaxException {
238238
sendMessageRequest.toBuilder()
239239
.messageAttributes(
240240
Collections.singletonMap(
241-
"test-message-header",
241+
"Test-Message-Header",
242242
MessageAttributeValue.builder().dataType("String").stringValue("test").build()))
243243
.build();
244244
client.sendMessage(newSendMessageRequest);
245245

246246
ReceiveMessageRequest newReceiveMessageRequest =
247-
receiveMessageRequest.toBuilder().messageAttributeNames("test-message-header").build();
247+
receiveMessageRequest.toBuilder().messageAttributeNames("Test-Message-Header").build();
248248
ReceiveMessageResponse response = client.receiveMessage(newReceiveMessageRequest);
249249

250250
assertThat(response.messages().size()).isEqualTo(1);

instrumentation/jms/jms-1.1/javaagent/src/test/java/io/opentelemetry/javaagent/instrumentation/jms/v1_1/AbstractJms1Test.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -177,8 +177,8 @@ void shouldCaptureMessageHeaders(
177177
// given
178178
Destination destination = destinationFactory.create(session);
179179
TextMessage sentMessage = session.createTextMessage("a message");
180-
sentMessage.setStringProperty("test_message_header", "test");
181-
sentMessage.setIntProperty("test_message_int_header", 1234);
180+
sentMessage.setStringProperty("Test_Message_Header", "test");
181+
sentMessage.setIntProperty("Test_Message_Int_Header", 1234);
182182

183183
MessageProducer producer = session.createProducer(destination);
184184
cleanup.deferCleanup(producer::close);
@@ -215,10 +215,10 @@ void shouldCaptureMessageHeaders(
215215
equalTo(MESSAGING_MESSAGE_ID, messageId),
216216
messagingTempDestination(isTemporary),
217217
equalTo(
218-
stringArrayKey("messaging.header.test_message_header"),
218+
stringArrayKey("messaging.header.Test_Message_Header"),
219219
singletonList("test")),
220220
equalTo(
221-
stringArrayKey("messaging.header.test_message_int_header"),
221+
stringArrayKey("messaging.header.Test_Message_Int_Header"),
222222
singletonList("1234"))),
223223
span ->
224224
span.hasName(destinationName + " process")
@@ -231,10 +231,10 @@ void shouldCaptureMessageHeaders(
231231
equalTo(MESSAGING_MESSAGE_ID, messageId),
232232
messagingTempDestination(isTemporary),
233233
equalTo(
234-
stringArrayKey("messaging.header.test_message_header"),
234+
stringArrayKey("messaging.header.Test_Message_Header"),
235235
singletonList("test")),
236236
equalTo(
237-
stringArrayKey("messaging.header.test_message_int_header"),
237+
stringArrayKey("messaging.header.Test_Message_Int_Header"),
238238
singletonList("1234"))),
239239
span -> span.hasName("consumer").hasParent(trace.getSpan(2))));
240240
}

0 commit comments

Comments
 (0)