Skip to content

Commit a9a8102

Browse files
committed
[configoptional] Fix behavior when unmarshaling with 'enabled: false'
1 parent 9e38bee commit a9a8102

File tree

3 files changed

+43
-0
lines changed

3 files changed

+43
-0
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: bug_fix
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. receiver/otlp)
7+
component: pkg/config/configoptional
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: Ensure that configoptional.None values resulting from unmarshaling are equivalent to configoptiona.Optional zero value.
11+
12+
# One or more tracking issues or pull requests related to the change
13+
issues: []
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# Optional: The change log or logs in which this entry should be included.
21+
# e.g. '[user]' or '[user, api]'
22+
# Include 'user' if the change is relevant to end users.
23+
# Include 'api' if there is a change to a library API.
24+
# Default: '[user]'
25+
change_logs: []

config/configoptional/optional.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,9 @@ func (o *Optional[T]) Unmarshal(conf *confmap.Conf) error {
222222
o.flavor = someFlavor
223223
} else {
224224
o.flavor = noneFlavor
225+
// override o.value with zero value.
226+
var zero T
227+
o.value = zero
225228
}
226229

227230
return nil

config/configoptional/optional_test.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,21 @@ func TestAddFieldEnabledFeatureGate(t *testing.T) {
528528
}
529529
}
530530

531+
func TestEnabledFalseResetsValue(t *testing.T) {
532+
oldVal := addEnabledFieldFeatureGate.IsEnabled()
533+
require.NoError(t, featuregate.GlobalRegistry().Set(addEnabledFieldFeatureGateID, true))
534+
defer func() { require.NoError(t, featuregate.GlobalRegistry().Set(addEnabledFieldFeatureGateID, oldVal)) }()
535+
536+
cfg := Config[Sub]{Sub1: Some(Sub{Foo: "initial"})}
537+
require.True(t, cfg.Sub1.HasValue())
538+
539+
cm := confmap.NewFromStringMap(map[string]any{
540+
"sub": map[string]any{"enabled": false, "foo": "ignored"},
541+
})
542+
require.NoError(t, cm.Unmarshal(&cfg))
543+
require.Equal(t, None[Sub](), cfg.Sub1)
544+
}
545+
531546
func TestUnmarshalErrorEnabledInvalidType(t *testing.T) {
532547
oldVal := addEnabledFieldFeatureGate.IsEnabled()
533548
require.NoError(t, featuregate.GlobalRegistry().Set(addEnabledFieldFeatureGateID, true))

0 commit comments

Comments
 (0)