Skip to content

Commit d3fa7ea

Browse files
committed
Answer to comments
1 parent 8e33b54 commit d3fa7ea

File tree

4 files changed

+44
-23
lines changed

4 files changed

+44
-23
lines changed

bin/format

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ docker_clang_format() {
6464
process_arg "$arg"
6565
done | xargs -0 \
6666
docker run \
67-
--platform linux/amd64 \
6867
--interactive \
6968
--rm \
7069
--volume /etc/passwd:/etc/passwd:ro \

include/datadog/config.h

Lines changed: 29 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,16 +62,38 @@ struct ConfigMetadata {
6262
: name(n), value(std::move(v)), origin(orig), error(std::move(err)) {}
6363
};
6464

65-
// Return the chosen configuration value, in order of precedence: `from_env`,
66-
// `from_user`, and `fallback`.
67-
// This overload directly populates both telemetry_configs[config_name] and
68-
// metadata[config_name] using the stringified value, with all values found,
69-
// from lowest to highest precedence. Returns the chosen value directly.
65+
66+
// Returns the final configuration value using the following
67+
// precedence order: environment > user code > default, and populates two maps:
68+
// 1. `telemetry_configs`: Records ALL configuration sources that were provided,
69+
// ordered from lowest to highest precedence.
70+
// 2. `metadata`: Records ONLY the winning configuration value (highest precedence).
71+
// Template Parameters:
72+
// Value: The type of the configuration value
73+
// Stringifier: Optional function type to convert Value to string
74+
// (defaults to std::nullptr_t, which uses string construction)
75+
// DefaultValue: Type of the fallback value (defaults to std::nullptr_t)
76+
//
77+
// Parameters:
78+
// from_env: Optional value from environment variables (highest precedence)
79+
// from_user: Optional value from user code (middle precedence)
80+
// telemetry_configs: Output map that will be populated with all config
81+
// sources found for this config_name, in precedence order
82+
// metadata: Output map that will be populated with the winning config value
83+
// for this config_name
84+
// config_name: The configuration parameter name identifier
85+
// fallback: Optional default value (lowest precedence). Pass nullptr to
86+
// indicate no default.
87+
// to_string_fn: Optional custom function to convert Value to string.
88+
// Required for non-string types. For string-like types, uses
89+
// default string construction if not provided.
7090
//
71-
// The fallback parameter is optional and defaults to nullptr.
91+
// Returns:
92+
// The chosen configuration value based on precedence, or Value{} if no value
93+
// was provided.
7294
template <typename Value, typename Stringifier = std::nullptr_t,
7395
typename DefaultValue = std::nullptr_t>
74-
Value pick(const Optional<Value>& from_env, const Optional<Value>& from_user,
96+
Value resolve_and_record_config(const Optional<Value>& from_env, const Optional<Value>& from_user,
7597
std::unordered_map<ConfigName, std::vector<ConfigMetadata>>*
7698
telemetry_configs,
7799
std::unordered_map<ConfigName, ConfigMetadata>* metadata,

src/datadog/trace_sampler_config.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ Expected<FinalizedTraceSamplerConfig> finalize_config(
227227

228228
std::unordered_map<ConfigName, std::vector<ConfigMetadata>>
229229
telemetry_configs_tmp;
230-
double max_per_second = pick(
230+
double max_per_second = resolve_and_record_config(
231231
env_config->max_per_second, config.max_per_second, &telemetry_configs_tmp,
232232
&result.metadata, ConfigName::TRACE_SAMPLING_LIMIT, 100.0,
233233
[](const double &d) { return std::to_string(d); });

src/datadog/tracer_config.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
288288
all_sources_configs;
289289

290290
// DD_SERVICE
291-
final_config.defaults.service = pick(
291+
final_config.defaults.service = resolve_and_record_config(
292292
env_config->service, user_config.service, &all_sources_configs,
293293
&final_config.metadata, ConfigName::SERVICE_NAME, get_process_name());
294294

@@ -297,21 +297,21 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
297297
value_or(env_config->service_type, user_config.service_type, "web");
298298

299299
// DD_ENV
300-
final_config.defaults.environment = pick(
300+
final_config.defaults.environment = resolve_and_record_config(
301301
env_config->environment, user_config.environment, &all_sources_configs,
302302
&final_config.metadata, ConfigName::SERVICE_ENV);
303303

304304
// DD_VERSION
305305
final_config.defaults.version =
306-
pick(env_config->version, user_config.version, &all_sources_configs,
306+
resolve_and_record_config(env_config->version, user_config.version, &all_sources_configs,
307307
&final_config.metadata, ConfigName::SERVICE_VERSION);
308308

309309
// Span name
310310
final_config.defaults.name = value_or(env_config->name, user_config.name, "");
311311

312312
// DD_TAGS
313313
final_config.defaults.tags =
314-
pick(env_config->tags, user_config.tags, &all_sources_configs,
314+
resolve_and_record_config(env_config->tags, user_config.tags, &all_sources_configs,
315315
&final_config.metadata, ConfigName::TAGS,
316316
std::unordered_map<std::string, std::string>{},
317317
[](const auto &tags) { return join_tags(tags); });
@@ -322,7 +322,7 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
322322
PropagationStyle::BAGGAGE};
323323

324324
final_config.extraction_styles =
325-
pick(env_config->extraction_styles, user_config.extraction_styles,
325+
resolve_and_record_config(env_config->extraction_styles, user_config.extraction_styles,
326326
&all_sources_configs, &final_config.metadata,
327327
ConfigName::EXTRACTION_STYLES, default_propagation_styles,
328328
[](const std::vector<PropagationStyle> &styles) {
@@ -336,7 +336,7 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
336336

337337
// Injection Styles
338338
final_config.injection_styles =
339-
pick(env_config->injection_styles, user_config.injection_styles,
339+
resolve_and_record_config(env_config->injection_styles, user_config.injection_styles,
340340
&all_sources_configs, &final_config.metadata,
341341
ConfigName::INJECTION_STYLES, default_propagation_styles,
342342
[](const std::vector<PropagationStyle> &styles) {
@@ -349,13 +349,13 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
349349
}
350350

351351
// Startup Logs
352-
final_config.log_on_startup = pick(
352+
final_config.log_on_startup = resolve_and_record_config(
353353
env_config->log_on_startup, user_config.log_on_startup,
354354
&all_sources_configs, &final_config.metadata, ConfigName::STARTUP_LOGS,
355355
true, [](const bool &b) { return to_string(b); });
356356

357357
// Report traces
358-
final_config.report_traces = pick(
358+
final_config.report_traces = resolve_and_record_config(
359359
env_config->report_traces, user_config.report_traces,
360360
&all_sources_configs, &final_config.metadata, ConfigName::REPORT_TRACES,
361361
true, [](const bool &b) { return to_string(b); });
@@ -370,7 +370,7 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
370370

371371
// 128b Trace IDs
372372
final_config.generate_128bit_trace_ids =
373-
pick(env_config->generate_128bit_trace_ids,
373+
resolve_and_record_config(env_config->generate_128bit_trace_ids,
374374
user_config.generate_128bit_trace_ids, &all_sources_configs,
375375
&final_config.metadata, ConfigName::GENEREATE_128BIT_TRACE_IDS, true,
376376
[](const bool &b) { return to_string(b); });
@@ -384,14 +384,14 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
384384

385385
// Baggage - max items
386386
final_config.baggage_opts.max_items =
387-
pick(env_config->baggage_max_items, user_config.baggage_max_items,
387+
resolve_and_record_config(env_config->baggage_max_items, user_config.baggage_max_items,
388388
&all_sources_configs, &final_config.metadata,
389389
ConfigName::TRACE_BAGGAGE_MAX_ITEMS, 64UL,
390390
[](const size_t &i) { return std::to_string(i); });
391391

392392
// Baggage - max bytes
393393
final_config.baggage_opts.max_bytes =
394-
pick(env_config->baggage_max_bytes, user_config.baggage_max_bytes,
394+
resolve_and_record_config(env_config->baggage_max_bytes, user_config.baggage_max_bytes,
395395
&all_sources_configs, &final_config.metadata,
396396
ConfigName::TRACE_BAGGAGE_MAX_BYTES, 8192UL,
397397
[](const size_t &i) { return std::to_string(i); });
@@ -460,22 +460,22 @@ Expected<FinalizedTracerConfig> finalize_config(const TracerConfig &user_config,
460460

461461
// APM Tracing Enabled
462462
final_config.tracing_enabled =
463-
pick(env_config->tracing_enabled, user_config.tracing_enabled,
463+
resolve_and_record_config(env_config->tracing_enabled, user_config.tracing_enabled,
464464
&all_sources_configs, &final_config.metadata,
465465
ConfigName::APM_TRACING_ENABLED, true,
466466
[](const bool &b) { return to_string(b); });
467467

468468
{
469469
// Resource Renaming Enabled
470-
const bool resource_renaming_enabled = pick(
470+
const bool resource_renaming_enabled = resolve_and_record_config(
471471
env_config->resource_renaming_enabled,
472472
user_config.resource_renaming_enabled, &all_sources_configs,
473473
&final_config.metadata, ConfigName::TRACE_RESOURCE_RENAMING_ENABLED,
474474
false, [](const bool &b) { return to_string(b); });
475475

476476
// Resource Renaming Always Simplified Endpoint
477477
const bool resource_renaming_always_simplified_endpoint =
478-
pick(env_config->resource_renaming_always_simplified_endpoint,
478+
resolve_and_record_config(env_config->resource_renaming_always_simplified_endpoint,
479479
user_config.resource_renaming_always_simplified_endpoint,
480480
&all_sources_configs, &final_config.metadata,
481481
ConfigName::TRACE_RESOURCE_RENAMING_ALWAYS_SIMPLIFIED_ENDPOINT,

0 commit comments

Comments
 (0)