Skip to content

Commit ec99db5

Browse files
authored
Support empty values in config maps (#4037)
* Support empty values in config maps * Rename method
1 parent d185377 commit ec99db5

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

instrumentation-api/src/main/java/io/opentelemetry/instrumentation/api/config/ConfigValueParsers.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,15 +55,15 @@ private static ConfigParsingException newInvalidPropertyException(
5555
}
5656

5757
static List<String> parseList(@SuppressWarnings("unused") String propertyName, String value) {
58-
return Collections.unmodifiableList(filterBlanksAndNulls(value.split(",")));
58+
return Collections.unmodifiableList(filterBlanks(value.split(",")));
5959
}
6060

6161
static Map<String, String> parseMap(String propertyName, String value) {
6262
return parseList(propertyName, value).stream()
63-
.map(keyValuePair -> filterBlanksAndNulls(keyValuePair.split("=", 2)))
63+
.map(keyValuePair -> trim(keyValuePair.split("=", 2)))
6464
.map(
6565
splitKeyValuePairs -> {
66-
if (splitKeyValuePairs.size() != 2) {
66+
if (splitKeyValuePairs.size() != 2 || splitKeyValuePairs.get(0).isEmpty()) {
6767
throw new ConfigParsingException(
6868
"Invalid map property: " + propertyName + "=" + value);
6969
}
@@ -77,13 +77,17 @@ static Map<String, String> parseMap(String propertyName, String value) {
7777
Map.Entry::getKey, Map.Entry::getValue, (first, next) -> next, LinkedHashMap::new));
7878
}
7979

80-
private static List<String> filterBlanksAndNulls(String[] values) {
80+
private static List<String> filterBlanks(String[] values) {
8181
return Arrays.stream(values)
8282
.map(String::trim)
8383
.filter(s -> !s.isEmpty())
8484
.collect(Collectors.toList());
8585
}
8686

87+
private static List<String> trim(String[] values) {
88+
return Arrays.stream(values).map(String::trim).collect(Collectors.toList());
89+
}
90+
8791
static Duration parseDuration(String propertyName, String value) {
8892
String unitString = getUnitString(value);
8993
String numberString = value.substring(0, value.length() - unitString.length());

javaagent-tooling/src/test/java/io/opentelemetry/javaagent/tooling/config/ConfigPropertiesAdapterTest.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ void allValid() {
3131
properties.put("double", "5.4");
3232
properties.put("list", "cat,dog,bear");
3333
properties.put("map", "cat=meow,dog=bark,bear=growl");
34+
properties.put("mapWithEmptyValue", "cat=meow,dog=,bear=growl");
3435
properties.put("duration", "1s");
3536

3637
ConfigProperties config = createConfig(properties);
@@ -41,6 +42,8 @@ void allValid() {
4142
assertThat(config.getCommaSeparatedValues("list")).containsExactly("cat", "dog", "bear");
4243
assertThat(config.getCommaSeparatedMap("map"))
4344
.containsExactly(entry("cat", "meow"), entry("dog", "bark"), entry("bear", "growl"));
45+
assertThat(config.getCommaSeparatedMap("mapWithEmptyValue"))
46+
.containsExactly(entry("cat", "meow"), entry("dog", ""), entry("bear", "growl"));
4447
assertThat(config.getDuration("duration")).isEqualTo(Duration.ofSeconds(1));
4548
}
4649

@@ -131,11 +134,6 @@ void uncleanMap() {
131134

132135
@Test
133136
void invalidMap() {
134-
assertThatThrownBy(
135-
() ->
136-
createConfig(Collections.singletonMap("map", "a=1,b=")).getCommaSeparatedMap("map"))
137-
.isInstanceOf(ConfigurationException.class)
138-
.hasMessage("Invalid map property: map=a=1,b=");
139137
assertThatThrownBy(
140138
() ->
141139
createConfig(Collections.singletonMap("map", "a=1,b")).getCommaSeparatedMap("map"))

0 commit comments

Comments
 (0)