Skip to content

Commit ff9c5bd

Browse files
committed
Nomralize results of keys(), log a one time warning
1 parent d05e9db commit ff9c5bd

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

api/incubator/src/main/java/io/opentelemetry/api/incubator/propagation/EnvironmentGetter.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
import java.util.Collections;
1111
import java.util.List;
1212
import java.util.Map;
13+
import java.util.concurrent.atomic.AtomicBoolean;
14+
import java.util.logging.Level;
15+
import java.util.logging.Logger;
1316
import javax.annotation.Nullable;
1417

1518
/**
@@ -43,6 +46,8 @@
4346
*/
4447
public final class EnvironmentGetter implements TextMapGetter<Map<String, String>> {
4548

49+
private static final AtomicBoolean LOG_KEYS_CALLED = new AtomicBoolean(false);
50+
private static final Logger LOGGER = Logger.getLogger(EnvironmentGetter.class.getName());
4651
private static final EnvironmentGetter INSTANCE = new EnvironmentGetter();
4752

4853
private EnvironmentGetter() {}
@@ -54,6 +59,13 @@ public static EnvironmentGetter getInstance() {
5459

5560
@Override
5661
public Iterable<String> keys(Map<String, String> carrier) {
62+
if (LOG_KEYS_CALLED.compareAndSet(false, true)) {
63+
LOGGER.log(
64+
Level.WARNING,
65+
"keys() called on EnvironmentGetter. "
66+
+ "This may produce unexpected results with propagators which depend on case sensitivity or special characters in keys.",
67+
new Throwable());
68+
}
5769
if (carrier == null) {
5870
return Collections.emptyList();
5971
}

api/incubator/src/test/java/io/opentelemetry/api/incubator/propagation/EnvironmentGetterTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,19 @@
77

88
import static io.opentelemetry.sdk.testing.assertj.OpenTelemetryAssertions.assertThat;
99

10+
import io.github.netmikey.logunit.api.LogCapturer;
11+
import io.opentelemetry.internal.testing.slf4j.SuppressLogger;
1012
import java.util.Collections;
1113
import java.util.HashMap;
1214
import java.util.Map;
1315
import org.junit.jupiter.api.Test;
16+
import org.junit.jupiter.api.extension.RegisterExtension;
1417

1518
class EnvironmentGetterTest {
1619

20+
@RegisterExtension
21+
LogCapturer logCapturer = LogCapturer.create().captureForType(EnvironmentGetter.class);
22+
1723
@Test
1824
void get() {
1925
Map<String, String> carrier = new HashMap<>();
@@ -45,6 +51,7 @@ void get_null() {
4551
}
4652

4753
@Test
54+
@SuppressLogger(EnvironmentGetter.class)
4855
void keys_valuesAreNormalized() {
4956
Map<String, String> carrier = new HashMap<>();
5057
carrier.put("otel.trace.id", "V1");
@@ -53,6 +60,9 @@ void keys_valuesAreNormalized() {
5360
assertThat(EnvironmentGetter.getInstance().keys(carrier))
5461
.containsExactlyInAnyOrder("OTEL_TRACE_ID", "OTEL_BAGGAGE_KEY");
5562
assertThat(EnvironmentGetter.getInstance().keys(null)).isEmpty();
63+
64+
assertThat(logCapturer.size()).isEqualTo(1);
65+
logCapturer.assertContains("keys() called on EnvironmentGetter");
5666
}
5767

5868
@Test

0 commit comments

Comments
 (0)