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 <solsticedante@gmail.com>
This commit is contained in:
AngstyDuck 2023-05-09 23:10:44 +08:00
parent b526cdcbe8
commit a7344da7d3
4 changed files with 38 additions and 1 deletions

View File

@ -68,6 +68,7 @@ const (
DefaultGRPCKeepAliveTimeout = 20 * time.Second DefaultGRPCKeepAliveTimeout = 20 * time.Second
DefaultDowngradeCheckTime = 5 * time.Second DefaultDowngradeCheckTime = 5 * time.Second
DefaultWaitClusterReadyTimeout = 5 * time.Second DefaultWaitClusterReadyTimeout = 5 * time.Second
DefaultAutoCompactionMode = "periodic"
DefaultDiscoveryDialTimeout = 2 * time.Second DefaultDiscoveryDialTimeout = 2 * time.Second
DefaultDiscoveryRequestTimeOut = 5 * time.Second DefaultDiscoveryRequestTimeOut = 5 * time.Second
@ -546,6 +547,8 @@ func NewConfig() *Config {
Auth: &clientv3.AuthConfig{}, Auth: &clientv3.AuthConfig{},
}, },
}, },
AutoCompactionMode: DefaultAutoCompactionMode,
} }
cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name) cfg.InitialCluster = cfg.InitialClusterFromName(cfg.Name)
return cfg return cfg
@ -772,8 +775,9 @@ func (cfg *Config) Validate() error {
} }
switch cfg.AutoCompactionMode { switch cfg.AutoCompactionMode {
case "":
case CompactorModeRevision, CompactorModePeriodic: case CompactorModeRevision, CompactorModePeriodic:
case "":
return errors.New("undefined auto-compaction-mode")
default: default:
return fmt.Errorf("unknown auto-compaction-mode %q", cfg.AutoCompactionMode) return fmt.Errorf("unknown auto-compaction-mode %q", cfg.AutoCompactionMode)
} }

View File

@ -25,6 +25,7 @@ import (
"time" "time"
"github.com/stretchr/testify/assert" "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/srv"
"go.etcd.io/etcd/client/pkg/v3/transport" "go.etcd.io/etcd/client/pkg/v3/transport"
@ -202,6 +203,11 @@ func TestAutoCompactionModeParse(t *testing.T) {
// err mode // err mode
{"errmode", "1", false, 0}, {"errmode", "1", false, 0},
{"errmode", "1h", false, time.Hour}, {"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 { 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 ( import (
"context" "context"
"errors"
"fmt" "fmt"
"io" "io"
defaultLog "log" defaultLog "log"
@ -887,6 +888,8 @@ func parseCompactionRetention(mode, retention string) (ret time.Duration, err er
ret = time.Duration(int64(h)) ret = time.Duration(int64(h))
case CompactorModePeriodic: case CompactorModePeriodic:
ret = time.Duration(int64(h)) * time.Hour ret = time.Duration(int64(h)) * time.Hour
case "":
return 0, errors.New("--auto-compaction-mode is undefined")
} }
} else { } else {
// periodic compaction // periodic compaction

View File

@ -29,6 +29,7 @@ import (
"testing" "testing"
"time" "time"
"github.com/stretchr/testify/assert"
"go.etcd.io/etcd/client/pkg/v3/testutil" "go.etcd.io/etcd/client/pkg/v3/testutil"
"go.etcd.io/etcd/client/pkg/v3/transport" "go.etcd.io/etcd/client/pkg/v3/transport"
clientv3 "go.etcd.io/etcd/client/v3" 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:] 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()
}