Merge pull request #15741 from AngstyDuck/set-default-value-for-AutoCompactionMode

server: default value for config file field auto-compaction-mode is n…
This commit is contained in:
Benjamin Wang 2023-05-10 05:44:16 +08:00 committed by GitHub
commit b404d25d84
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 38 additions and 1 deletions

View File

@ -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)
}

View File

@ -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)
}

View File

@ -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

View File

@ -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()
}