Skip to content

Commit ca11697

Browse files
committed
Update OverrideWith to handle delayed creation better
1 parent 403e854 commit ca11697

File tree

1 file changed

+49
-32
lines changed

1 file changed

+49
-32
lines changed

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

Lines changed: 49 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -621,42 +621,42 @@ internal readonly struct StructConfigurationResultWithKey<T>(IConfigurationTelem
621621
public readonly ConfigurationResult<T> ConfigurationResult = configurationResult;
622622

623623
public T WithDefault(T defaultValue)
624-
=> WithDefault(getDefaultValue: () => defaultValue);
625-
626-
public T WithDefault(Func<DefaultResult<T>> getDefaultValue)
627624
{
628-
if (TryHandleResult(Telemetry, Key, ConfigurationResult, RecordValue, getDefaultValue, out var value))
625+
if (ConfigurationResult is { Result: { } ddResult, IsValid: true })
629626
{
630-
return value;
627+
return ddResult;
631628
}
632629

633-
return default; // should never be invoked because we have a value for getDefaultValue
630+
RecordTelemetry(Telemetry, Key, RecordValue, defaultValue);
631+
return defaultValue;
634632
}
635633

636634
public T? OverrideWith(in StructConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler)
637-
=> CalculateOverrides(in otelConfig, overrideHandler, getDefaultValue: null);
635+
=> CalculateOverrides(in otelConfig, overrideHandler, defaultValue: null);
638636

639637
public T OverrideWith(in StructConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, T defaultValue)
640-
=> CalculateOverrides(in otelConfig, overrideHandler, getDefaultValue: () => defaultValue).Value;
638+
=> CalculateOverrides(in otelConfig, overrideHandler, defaultValue).Value;
641639

642-
public T OverrideWith(in StructConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, Func<DefaultResult<T>> getDefaultValue)
643-
=> CalculateOverrides(in otelConfig, overrideHandler, getDefaultValue).Value;
644-
645-
[return: NotNullIfNotNull(nameof(getDefaultValue))]
646-
private T? CalculateOverrides(in StructConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, Func<DefaultResult<T>>? getDefaultValue)
640+
[return: NotNullIfNotNull(nameof(defaultValue))]
641+
private T? CalculateOverrides(in StructConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, T? defaultValue)
647642
{
648643
if (overrideHandler.TryHandleOverrides(Key, ConfigurationResult, otelConfig.Key, otelConfig.ConfigurationResult, out var overridden))
649644
{
650645
return overridden;
651646
}
652647

653-
if (TryHandleResult(Telemetry, Key, ConfigurationResult, RecordValue, getDefaultValue, out var value))
648+
if (ConfigurationResult is { Result: { } ddResult, IsValid: true })
654649
{
655-
return value;
650+
return ddResult;
656651
}
657652

658-
// need to return default/default value here depending on whether it's a struct
659-
return null;
653+
if (defaultValue is null)
654+
{
655+
return null;
656+
}
657+
658+
RecordTelemetry(Telemetry, Key, RecordValue, defaultValue);
659+
return defaultValue;
660660
}
661661
}
662662

@@ -669,42 +669,59 @@ internal readonly struct ClassConfigurationResultWithKey<T>(IConfigurationTeleme
669669
public readonly ConfigurationResult<T> ConfigurationResult = configurationResult;
670670

671671
public T WithDefault(T defaultValue)
672-
=> WithDefault(getDefaultValue: () => defaultValue);
673-
674-
public T WithDefault(Func<DefaultResult<T>> getDefaultValue)
675672
{
676-
if (TryHandleResult(Telemetry, Key, ConfigurationResult, RecordValue, getDefaultValue, out var value))
673+
if (ConfigurationResult is { Result: { } ddResult, IsValid: true })
677674
{
678-
return value;
675+
return ddResult;
679676
}
680677

681-
return default!; // should never be invoked because we have a value for getDefaultValue
678+
RecordTelemetry(Telemetry, Key, RecordValue, defaultValue);
679+
return defaultValue;
682680
}
683681

684682
public T? OverrideWith(in ClassConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler)
685-
=> CalculateOverrides(in otelConfig, overrideHandler, getDefaultValue: null);
683+
=> CalculateOverrides(in otelConfig, overrideHandler, defaultValue: null);
686684

687685
public T OverrideWith(in ClassConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, T defaultValue)
688-
=> CalculateOverrides(in otelConfig, overrideHandler, getDefaultValue: () => defaultValue);
686+
=> CalculateOverrides(in otelConfig, overrideHandler, defaultValue);
689687

690688
public T OverrideWith(in ClassConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, Func<DefaultResult<T>> getDefaultValue)
691-
=> CalculateOverrides(in otelConfig, overrideHandler, getDefaultValue);
689+
{
690+
if (overrideHandler.TryHandleOverrides(Key, ConfigurationResult, otelConfig.Key, otelConfig.ConfigurationResult, out var overridden))
691+
{
692+
return overridden;
693+
}
692694

693-
[return: NotNullIfNotNull(nameof(getDefaultValue))]
694-
private T? CalculateOverrides(in ClassConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, Func<DefaultResult<T>>? getDefaultValue)
695+
if (ConfigurationResult is { Result: { } ddResult, IsValid: true })
696+
{
697+
return ddResult;
698+
}
699+
700+
var defaultValue = getDefaultValue();
701+
RecordTelemetry(Telemetry, Key, RecordValue, defaultValue);
702+
return defaultValue.Result;
703+
}
704+
705+
[return: NotNullIfNotNull(nameof(defaultValue))]
706+
private T? CalculateOverrides(in ClassConfigurationResultWithKey<T> otelConfig, IConfigurationOverrideHandler overrideHandler, T? defaultValue)
695707
{
696708
if (overrideHandler.TryHandleOverrides(Key, ConfigurationResult, otelConfig.Key, otelConfig.ConfigurationResult, out var overridden))
697709
{
698710
return overridden;
699711
}
700712

701-
if (TryHandleResult(Telemetry, Key, ConfigurationResult, RecordValue, getDefaultValue, out var value))
713+
if (ConfigurationResult is { Result: { } ddResult, IsValid: true })
702714
{
703-
return value;
715+
return ddResult;
704716
}
705717

706-
// need to return default/default value here depending on whether it's a struct
707-
return null;
718+
if (defaultValue is null)
719+
{
720+
return null;
721+
}
722+
723+
RecordTelemetry(Telemetry, Key, RecordValue, defaultValue);
724+
return defaultValue;
708725
}
709726
}
710727

0 commit comments

Comments
 (0)