Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ public enum ConfigOrigin {
DD_CONFIG("dd_config"),
/** set for cases where it is difficult/not possible to determine the source of a config. */
UNKNOWN("unknown"),
/** set when the config is calculated from multiple configs */
CALCULATED("calculated"),
/** set when the user has not set any configuration for the key (defaults to a value) */
DEFAULT("default");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,12 @@ public Map<String, String> getMergedMap(String key, String... aliases) {
String value = sources[i].get(key, aliases);
Map<String, String> parsedMap = ConfigConverter.parseMap(value, key);
if (!parsedMap.isEmpty()) {
origin = sources[i].origin();
if (origin != ConfigOrigin.DEFAULT) {
// if we already have a non-default origin, the value is calculated from multiple sources
origin = ConfigOrigin.CALCULATED;
} else {
origin = sources[i].origin();
}
}
merged.putAll(parsedMap);
}
Expand All @@ -277,7 +282,12 @@ public Map<String, String> getMergedTagsMap(String key, String... aliases) {
Map<String, String> parsedMap =
ConfigConverter.parseTraceTagsMap(value, ':', Arrays.asList(',', ' '));
if (!parsedMap.isEmpty()) {
origin = sources[i].origin();
if (origin != ConfigOrigin.DEFAULT) {
// if we already have a non-default origin, the value is calculated from multiple sources
origin = ConfigOrigin.CALCULATED;
} else {
origin = sources[i].origin();
}
}
merged.putAll(parsedMap);
}
Expand All @@ -298,7 +308,12 @@ public Map<String, String> getOrderedMap(String key) {
String value = sources[i].get(key);
Map<String, String> parsedMap = ConfigConverter.parseOrderedMap(value, key);
if (!parsedMap.isEmpty()) {
origin = sources[i].origin();
if (origin != ConfigOrigin.DEFAULT) {
// if we already have a non-default origin, the value is calculated from multiple sources
origin = ConfigOrigin.CALCULATED;
} else {
origin = sources[i].origin();
}
}
merged.putAll(parsedMap);
}
Expand All @@ -322,7 +337,13 @@ public Map<String, String> getMergedMapWithOptionalMappings(
Map<String, String> parsedMap =
ConfigConverter.parseMapWithOptionalMappings(value, key, defaultPrefix, lowercaseKeys);
if (!parsedMap.isEmpty()) {
origin = sources[i].origin();
if (origin != ConfigOrigin.DEFAULT) {
// if we already have a non-default origin, the value is calculated from multiple
// sources
origin = ConfigOrigin.CALCULATED;
} else {
origin = sources[i].origin();
}
}
merged.putAll(parsedMap);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -64,22 +64,26 @@ class ConfigCollectorTest extends DDSpecification {

def "should collect merged data from multiple sources"() {
setup:
injectEnvConfig(Strings.toEnvVar(configKey), configValue1)
injectSysConfig(configKey, configValue2)
injectEnvConfig(Strings.toEnvVar(configKey), envValue)
if (jvmValue != null) {
injectSysConfig(configKey, jvmValue)
}

expect:
def setting = ConfigCollector.get().collect().get(configKey)
setting.stringValue() == expectedValue
setting.origin == ConfigOrigin.JVM_PROP
setting.origin == expectedOrigin

where:
configKey | configValue1 | configValue2 | expectedValue
configKey | envValue | jvmValue | expectedValue | expectedOrigin
// ConfigProvider.getMergedMap
TracerConfig.TRACE_PEER_SERVICE_MAPPING | "service1:best_service,userService:my_service" | "service2:backup_service" | "service2:backup_service,service1:best_service,userService:my_service"
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
// ConfigProvider.getOrderedMap
TracerConfig.TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING | "/asdf/*:/test,/b:some" | "/a:prop" | "/asdf/*:/test,/b:some,/a:prop"
TracerConfig.TRACE_HTTP_SERVER_PATH_RESOURCE_NAME_MAPPING | "/asdf/*:/test,/b:some" | "/a:prop" | "/asdf/*:/test,/b:some,/a:prop" | ConfigOrigin.CALCULATED
// ConfigProvider.getMergedMapWithOptionalMappings
TracerConfig.HEADER_TAGS | "j:ten" | "e:five,b:six" | "e:five,j:ten,b:six"
TracerConfig.HEADER_TAGS | "j:ten" | "e:five,b:six" | "e:five,j:ten,b:six" | ConfigOrigin.CALCULATED
// ConfigProvider.getMergedMap, but only one source
TracerConfig.TRACE_PEER_SERVICE_MAPPING | "service1:best_service,userService:my_service" | null | "service1:best_service,userService:my_service" | ConfigOrigin.ENV
}

def "default not-null config settings are collected"() {
Expand Down
Loading