Skip to content

Commit 392865f

Browse files
committed
Enforce requiring a default value for default dictionary values
1 parent 40e9e70 commit 392865f

File tree

2 files changed

+25
-6
lines changed

2 files changed

+25
-6
lines changed

tracer/src/Datadog.Trace/Configuration/ConfigurationSources/Telemetry/ConfigurationBuilder.cs

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -355,15 +355,34 @@ public bool AsBool(bool defaultValue, Func<bool, bool>? validator)
355355
// ****************
356356
// Dictionary accessors
357357
// ****************
358-
[return: NotNullIfNotNull(nameof(getDefaultValue))]
359-
public IDictionary<string, string>? AsDictionary(Func<DefaultResult<IDictionary<string, string>>>? getDefaultValue = null) => AsDictionary(allowOptionalMappings: false, getDefaultValue: getDefaultValue);
358+
public IDictionary<string, string>? AsDictionary()
359+
=> AsDictionary(allowOptionalMappings: false, getDefaultValue: null, defaultValueForTelemetry: string.Empty);
360+
361+
public IDictionary<string, string>? AsDictionary(bool allowOptionalMappings)
362+
=> AsDictionary(allowOptionalMappings, getDefaultValue: null, defaultValueForTelemetry: string.Empty);
363+
364+
public IDictionary<string, string> AsDictionary(Func<IDictionary<string, string>> getDefaultValue, string defaultValueForTelemetry)
365+
=> AsDictionary(allowOptionalMappings: false, getDefaultValue: getDefaultValue, defaultValueForTelemetry);
360366

361367
[return: NotNullIfNotNull(nameof(getDefaultValue))]
362-
public IDictionary<string, string>? AsDictionary(bool allowOptionalMappings, Func<DefaultResult<IDictionary<string, string>>>? getDefaultValue = null)
368+
public IDictionary<string, string>? AsDictionary(
369+
bool allowOptionalMappings,
370+
Func<IDictionary<string, string>>? getDefaultValue,
371+
string defaultValueForTelemetry)
363372
{
364-
// TODO: Handle/allow default values + validation?
365373
var result = GetDictionaryResult(allowOptionalMappings, separator: ':');
366-
return TryHandleResult(Telemetry, Key, result, recordValue: true, getDefaultValue, out var value) ? value : null;
374+
if (result is { Result: { } ddResult, IsValid: true })
375+
{
376+
return ddResult;
377+
}
378+
379+
if (getDefaultValue?.Invoke() is not { } value)
380+
{
381+
return null;
382+
}
383+
384+
Telemetry.Record(Key, defaultValueForTelemetry, recordValue: true, ConfigurationOrigins.Default);
385+
return value;
367386
}
368387

369388
// ****************

tracer/src/Datadog.Trace/Configuration/TracerSettings.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1377,7 +1377,7 @@ internal static TracerSettings FromDefaultSourcesInternal()
13771377
{
13781378
var configurationDictionary = config
13791379
.WithKeys(key)
1380-
.AsDictionary(allowOptionalMappings: true, () => new Dictionary<string, string>());
1380+
.AsDictionary(allowOptionalMappings: true, () => new Dictionary<string, string>(), string.Empty);
13811381

13821382
if (configurationDictionary == null)
13831383
{

0 commit comments

Comments
 (0)