Skip to content

Commit f98f7dd

Browse files
authored
Introduce ConfigOrigin.CALCULATED (#9371)
* Use origin CALCULATED for merged methods * fix javadoc for ConfigOrigin.CALCULATED * apply github suggestions
1 parent 9bade09 commit f98f7dd

File tree

3 files changed

+38
-11
lines changed

3 files changed

+38
-11
lines changed

internal-api/src/main/java/datadog/trace/api/ConfigOrigin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ public enum ConfigOrigin {
1919
DD_CONFIG("dd_config"),
2020
/** set for cases where it is difficult/not possible to determine the source of a config. */
2121
UNKNOWN("unknown"),
22+
/** set when the config is calculated from multiple configs */
23+
CALCULATED("calculated"),
2224
/** set when the user has not set any configuration for the key (defaults to a value) */
2325
DEFAULT("default");
2426

internal-api/src/main/java/datadog/trace/bootstrap/config/provider/ConfigProvider.java

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,12 @@ public Map<String, String> getMergedMap(String key, String... aliases) {
255255
String value = sources[i].get(key, aliases);
256256
Map<String, String> parsedMap = ConfigConverter.parseMap(value, key);
257257
if (!parsedMap.isEmpty()) {
258-
origin = sources[i].origin();
258+
if (origin != ConfigOrigin.DEFAULT) {
259+
// if we already have a non-default origin, the value is calculated from multiple sources
260+
origin = ConfigOrigin.CALCULATED;
261+
} else {
262+
origin = sources[i].origin();
263+
}
259264
}
260265
merged.putAll(parsedMap);
261266
}
@@ -277,7 +282,12 @@ public Map<String, String> getMergedTagsMap(String key, String... aliases) {
277282
Map<String, String> parsedMap =
278283
ConfigConverter.parseTraceTagsMap(value, ':', Arrays.asList(',', ' '));
279284
if (!parsedMap.isEmpty()) {
280-
origin = sources[i].origin();
285+
if (origin != ConfigOrigin.DEFAULT) {
286+
// if we already have a non-default origin, the value is calculated from multiple sources
287+
origin = ConfigOrigin.CALCULATED;
288+
} else {
289+
origin = sources[i].origin();
290+
}
281291
}
282292
merged.putAll(parsedMap);
283293
}
@@ -298,7 +308,12 @@ public Map<String, String> getOrderedMap(String key) {
298308
String value = sources[i].get(key);
299309
Map<String, String> parsedMap = ConfigConverter.parseOrderedMap(value, key);
300310
if (!parsedMap.isEmpty()) {
301-
origin = sources[i].origin();
311+
if (origin != ConfigOrigin.DEFAULT) {
312+
// if we already have a non-default origin, the value is calculated from multiple sources
313+
origin = ConfigOrigin.CALCULATED;
314+
} else {
315+
origin = sources[i].origin();
316+
}
302317
}
303318
merged.putAll(parsedMap);
304319
}
@@ -322,7 +337,13 @@ public Map<String, String> getMergedMapWithOptionalMappings(
322337
Map<String, String> parsedMap =
323338
ConfigConverter.parseMapWithOptionalMappings(value, key, defaultPrefix, lowercaseKeys);
324339
if (!parsedMap.isEmpty()) {
325-
origin = sources[i].origin();
340+
if (origin != ConfigOrigin.DEFAULT) {
341+
// if we already have a non-default origin, the value is calculated from multiple
342+
// sources
343+
origin = ConfigOrigin.CALCULATED;
344+
} else {
345+
origin = sources[i].origin();
346+
}
326347
}
327348
merged.putAll(parsedMap);
328349
}

internal-api/src/test/groovy/datadog/trace/api/ConfigCollectorTest.groovy

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -64,22 +64,26 @@ class ConfigCollectorTest extends DDSpecification {
6464

6565
def "should collect merged data from multiple sources"() {
6666
setup:
67-
injectEnvConfig(Strings.toEnvVar(configKey), configValue1)
68-
injectSysConfig(configKey, configValue2)
67+
injectEnvConfig(Strings.toEnvVar(configKey), envValue)
68+
if (jvmValue != null) {
69+
injectSysConfig(configKey, jvmValue)
70+
}
6971

7072
expect:
7173
def setting = ConfigCollector.get().collect().get(configKey)
7274
setting.stringValue() == expectedValue
73-
setting.origin == ConfigOrigin.JVM_PROP
75+
setting.origin == expectedOrigin
7476

7577
where:
76-
configKey | configValue1 | configValue2 | expectedValue
78+
configKey | envValue | jvmValue | expectedValue | expectedOrigin
7779
// ConfigProvider.getMergedMap
78-
TracerConfig.TRACE_PEER_SERVICE_MAPPING | "service1:best_service,userService:my_service" | "service2:backup_service" | "service2:backup_service,service1:best_service,userService:my_service"
80+
TracerConfig.TRACE_PEER_SERVICE_MAPPING | "service1:best_service,userService:my_service" | "service2:backup_service" | "service2:backup_service,service1:best_service,userService:my_service" | ConfigOrigin.CALCULATED
7981
// ConfigProvider.getOrderedMap
80-
TracerConfig.TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING | "/asdf/*:/test,/b:some" | "/a:prop" | "/asdf/*:/test,/b:some,/a:prop"
82+
TracerConfig.TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING | "/asdf/*:/test,/b:some" | "/a:prop" | "/asdf/*:/test,/b:some,/a:prop" | ConfigOrigin.CALCULATED
8183
// ConfigProvider.getMergedMapWithOptionalMappings
82-
TracerConfig.HEADER_TAGS | "j:ten" | "e:five,b:six" | "e:five,j:ten,b:six"
84+
TracerConfig.HEADER_TAGS | "j:ten" | "e:five,b:six" | "e:five,j:ten,b:six" | ConfigOrigin.CALCULATED
85+
// ConfigProvider.getMergedMap, but only one source
86+
TracerConfig.TRACE_PEER_SERVICE_MAPPING | "service1:best_service,userService:my_service" | null | "service1:best_service,userService:my_service" | ConfigOrigin.ENV
8387
}
8488

8589
def "default not-null config settings are collected"() {

0 commit comments

Comments
 (0)