From a7344da7d3aded0ea29bce8dd36f1068fa20b6c2 Mon Sep 17 00:00:00 2001 From: AngstyDuck Date: Tue, 9 May 2023 23:10:44 +0800 Subject: [PATCH] server: default value for config file field auto-compaction-mode is now 'periodic'; added additional checks if auto-compaction-mode is undefined Signed-off-by: AngstyDuck --- server/embed/config.go | 6 +++++- server/embed/config_test.go | 13 +++++++++++++ server/embed/etcd.go | 3 +++ tests/integration/embed/embed_test.go | 17 +++++++++++++++++ 4 files changed, 38 insertions(+), 1 deletion(-) diff --git a/server/embed/config.go b/server/embed/config.go index 80487bafb..0b79ce4bc 100644 --- a/server/embed/config.go +++ b/server/embed/config.go @@ -68,6 +68,7 @@ const ( DefaultGRPCKeepAliveTimeout = 20 * time.Second DefaultDowngradeCheckTime = 5 * time.Second DefaultWaitClusterReadyTimeout = 5 * time.Second + DefaultAutoCompactionMode = "periodic" DefaultDiscoveryDialTimeout = 2 * time.Second DefaultDiscoveryRequestTimeOut = 5 * time.Second @@ -546,6 +547,8 @@ func NewConfig() *Config { Auth: &clientv3.AuthConfig{}, }, }, + + AutoCompactionMode: DefaultAutoCompactionMode, } cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name) return cfg @@ -772,8 +775,9 @@ func (cfg *Config) Validate() error { } switch cfg.AutoCompactionMode { - case "": case CompactorModeRevision, CompactorModePeriodic: + case "": + return errors.New("undefined auto-compaction-mode") default: return fmt.Errorf("unknown auto-compaction-mode %q", cfg.AutoCompactionMode) } diff --git a/server/embed/config_test.go b/server/embed/config_test.go index 9609630a6..e4e92744f 100644 --- a/server/embed/config_test.go +++ b/server/embed/config_test.go @@ -25,6 +25,7 @@ import ( "time" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" "go.etcd.io/etcd/client/pkg/v3/srv" "go.etcd.io/etcd/client/pkg/v3/transport" @@ -202,6 +203,11 @@ func TestAutoCompactionModeParse(t *testing.T) { // err mode {"errmode", "1", false, 0}, {"errmode", "1h", false, time.Hour}, + // empty mode + {"", "1", true, 0}, + {"", "1h", false, time.Hour}, + {"", "a", true, 0}, + {"", "-1", true, 0}, } hasErr := func(err error) bool { @@ -507,3 +513,10 @@ func TestTLSVersionMinMax(t *testing.T) { }) } } + +func TestUndefinedAutoCompactionModeValidate(t *testing.T) { + cfg := *NewConfig() + cfg.AutoCompactionMode = "" + err := cfg.Validate() + require.Error(t, err) +} diff --git a/server/embed/etcd.go b/server/embed/etcd.go index 48f5cdb6b..7d30562bc 100644 --- a/server/embed/etcd.go +++ b/server/embed/etcd.go @@ -16,6 +16,7 @@ package embed import ( "context" + "errors" "fmt" "io" defaultLog "log" @@ -887,6 +888,8 @@ func parseCompactionRetention(mode, retention string) (ret time.Duration, err er ret = time.Duration(int64(h)) case CompactorModePeriodic: ret = time.Duration(int64(h)) * time.Hour + case "": + return 0, errors.New("--auto-compaction-mode is undefined") } } else { // periodic compaction diff --git a/tests/integration/embed/embed_test.go b/tests/integration/embed/embed_test.go index e401afbec..4d6bb7f9f 100644 --- a/tests/integration/embed/embed_test.go +++ b/tests/integration/embed/embed_test.go @@ -29,6 +29,7 @@ import ( "testing" "time" + "github.com/stretchr/testify/assert" "go.etcd.io/etcd/client/pkg/v3/testutil" "go.etcd.io/etcd/client/pkg/v3/transport" clientv3 "go.etcd.io/etcd/client/v3" @@ -210,3 +211,19 @@ func setupEmbedCfg(cfg *embed.Config, curls []url.URL, purls []url.URL) { } cfg.InitialCluster = cfg.InitialCluster[1:] } + +func TestEmbedEtcdAutoCompactionRetentionRetained(t *testing.T) { + cfg := embed.NewConfig() + urls := newEmbedURLs(false, 2) + setupEmbedCfg(cfg, []url.URL{urls[0]}, []url.URL{urls[1]}) + cfg.Dir = filepath.Join(t.TempDir(), "embed-etcd") + + cfg.AutoCompactionRetention = "2" + + e, err := embed.StartEtcd(cfg) + assert.NoError(t, err) + autoCompactionRetention := e.Server.Cfg.AutoCompactionRetention + duration_to_compare, _ := time.ParseDuration("2h0m0s") + assert.Equal(t, duration_to_compare, autoCompactionRetention) + e.Close() +}