From 96fe605d95927c8e12de2c19664c49a97be9aa19 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Thu, 18 Jan 2024 10:03:45 -0800 Subject: [PATCH] FeatureFlags: fix setting flags to false in startup (#80836) --- pkg/services/featuremgmt/manager.go | 3 ++- pkg/services/featuremgmt/manager_test.go | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/pkg/services/featuremgmt/manager.go b/pkg/services/featuremgmt/manager.go index 0b7d09825f2..0dabd4d6f76 100644 --- a/pkg/services/featuremgmt/manager.go +++ b/pkg/services/featuremgmt/manager.go @@ -102,7 +102,8 @@ func (fm *FeatureManager) update() { // Update the registry track := 0.0 - if flag.Expression == "true" || (fm.startup[flag.Name]) { + startup, ok := fm.startup[flag.Name] + if startup || (!ok && flag.Expression == "true") { track = 1 enabled[flag.Name] = true } diff --git a/pkg/services/featuremgmt/manager_test.go b/pkg/services/featuremgmt/manager_test.go index e54645ed913..c65e8585c16 100644 --- a/pkg/services/featuremgmt/manager_test.go +++ b/pkg/services/featuremgmt/manager_test.go @@ -75,4 +75,25 @@ func TestFeatureManager(t *testing.T) { require.Equal(t, "second", flag.Description) require.Equal(t, "http://something", flag.DocsURL) }) + + t.Run("check startup false flags", func(t *testing.T) { + ft := FeatureManager{ + flags: map[string]*FeatureFlag{}, + startup: map[string]bool{ + "a": true, + "b": false, // but default true + }, + } + ft.registerFlags(FeatureFlag{ + Name: "a", + }, FeatureFlag{ + Name: "b", + Expression: "true", + }, FeatureFlag{ + Name: "c", + }) + require.True(t, ft.IsEnabledGlobally("a")) + require.False(t, ft.IsEnabledGlobally("b")) + require.False(t, ft.IsEnabledGlobally("c")) + }) }