From f541d783e103b6f2442a1183d67d587ede21e9c6 Mon Sep 17 00:00:00 2001 From: Jiayin Mao Date: Sat, 1 Feb 2025 21:17:35 +0000 Subject: [PATCH] Do not allow both exprimental flag and non-expriemntal flag to be set at the same time. Signed-off-by: Jiayin Mao --- server/embed/config.go | 5 +++-- server/etcdmain/config_test.go | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/server/embed/config.go b/server/embed/config.go index 614f98c512fc..4f95956f3388 100644 --- a/server/embed/config.go +++ b/server/embed/config.go @@ -132,7 +132,7 @@ var ( // in 3.6, we are migration all the --experimental flags to feature gate and flags without the prefix. // This is the mapping from the non boolean `experimental-` to the new flags. // TODO: delete in v3.7 - experimentalNonBoolFlagMigrationMap = map[string]string{ + experimentalFlagMigrationMap = map[string]string{ "experimental-compact-hash-check-time": "compact-hash-check-time", "experimental-corrupt-check-time": "corrupt-check-time", "experimental-compaction-batch-limit": "compaction-batch-limit", @@ -140,6 +140,7 @@ var ( "experimental-warning-apply-duration": "warning-apply-duration", "experimental-bootstrap-defrag-threshold-megabytes": "bootstrap-defrag-threshold-megabytes", "experimental-max-learners": "max-learners", + "experimental-memory-mlock": "memory-mlock", } ) @@ -1056,7 +1057,7 @@ func updateMinMaxVersions(info *transport.TLSInfo, min, max string) { func (cfg *Config) Validate() error { // make sure there is no conflict in the flag settings in the ExperimentalNonBoolFlagMigrationMap // TODO: delete in v3.7 - for oldFlag, newFlag := range experimentalNonBoolFlagMigrationMap { + for oldFlag, newFlag := range experimentalFlagMigrationMap { if cfg.FlagsExplicitlySet[oldFlag] && cfg.FlagsExplicitlySet[newFlag] { return fmt.Errorf("cannot set --%s and --%s at the same time, please use --%s only", oldFlag, newFlag, newFlag) } diff --git a/server/etcdmain/config_test.go b/server/etcdmain/config_test.go index 559f023daab4..5c4ef120abf8 100644 --- a/server/etcdmain/config_test.go +++ b/server/etcdmain/config_test.go @@ -955,11 +955,18 @@ func TestMemoryMlockFlagMigration(t *testing.T) { memoryMlock bool experimentalMemoryMlock bool expectedMemoryMlock bool + expectErr bool }{ { name: "default", expectedMemoryMlock: false, }, + { + name: "cannot set both experimental flag and non experimental flag", + memoryMlock: true, + experimentalMemoryMlock: true, + expectErr: true, + }, { name: "can set experimental flag", experimentalMemoryMlock: true, @@ -991,6 +998,13 @@ func TestMemoryMlockFlagMigration(t *testing.T) { cfgFromCmdLine, errFromCmdLine, cfgFromFile, errFromFile := generateCfgsFromFileAndCmdLine(t, yc, cmdLineArgs) + if tc.expectErr { + if errFromCmdLine == nil || errFromFile == nil { + t.Fatal("expect parse error") + } + return + } + if errFromCmdLine != nil || errFromFile != nil { t.Fatal("error parsing config") }