mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Merge pull request #18478 from liangyuanpeng/fg_skipClientSan
KEP-4578: migrate experimental-initial-corrupt-check flag to feature gate.
This commit is contained in:
commit
93a245aed6
@ -97,6 +97,7 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
name string
|
||||
serverFeatureGatesJSON string
|
||||
experimentalStopGRPCServiceOnDefrag string
|
||||
experimentalInitialCorruptCheck string
|
||||
expectErr bool
|
||||
expectedFeatures map[featuregate.Feature]bool
|
||||
}{
|
||||
@ -105,6 +106,7 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.DistributedTracing: false,
|
||||
features.StopGRPCServiceOnDefrag: false,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -113,6 +115,12 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
experimentalStopGRPCServiceOnDefrag: "false",
|
||||
expectErr: true,
|
||||
},
|
||||
{
|
||||
name: "cannot set both experimental flag and feature gate flag for InitialCorruptCheck",
|
||||
serverFeatureGatesJSON: "InitialCorruptCheck=true",
|
||||
experimentalInitialCorruptCheck: "false",
|
||||
expectErr: true,
|
||||
},
|
||||
{
|
||||
name: "ok to set different experimental flag and feature gate flag",
|
||||
serverFeatureGatesJSON: "DistributedTracing=true",
|
||||
@ -120,6 +128,7 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.DistributedTracing: true,
|
||||
features.StopGRPCServiceOnDefrag: true,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -128,6 +137,7 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: true,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -136,14 +146,43 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: false,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "can set feature gate to true from feature gate flag",
|
||||
name: "can set feature gate experimentalInitialCorruptCheck to true from experimental flag",
|
||||
experimentalInitialCorruptCheck: "true",
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: false,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "can set feature gate experimentalInitialCorruptCheck to false from experimental flag",
|
||||
experimentalInitialCorruptCheck: "false",
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: false,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "can set feature gate StopGRPCServiceOnDefrag to true from feature gate flag",
|
||||
serverFeatureGatesJSON: "StopGRPCServiceOnDefrag=true",
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: true,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "can set feature gate InitialCorruptCheck to true from feature gate flag",
|
||||
serverFeatureGatesJSON: "InitialCorruptCheck=true",
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: false,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: true,
|
||||
},
|
||||
},
|
||||
{
|
||||
@ -152,6 +191,7 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
expectedFeatures: map[featuregate.Feature]bool{
|
||||
features.StopGRPCServiceOnDefrag: false,
|
||||
features.DistributedTracing: false,
|
||||
features.InitialCorruptCheck: false,
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -159,11 +199,20 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
yc := struct {
|
||||
ExperimentalStopGRPCServiceOnDefrag *bool `json:"experimental-stop-grpc-service-on-defrag,omitempty"`
|
||||
ExperimentalInitialCorruptCheck *bool `json:"experimental-initial-corrupt-check,omitempty"`
|
||||
ServerFeatureGatesJSON string `json:"feature-gates"`
|
||||
}{
|
||||
ServerFeatureGatesJSON: tc.serverFeatureGatesJSON,
|
||||
}
|
||||
|
||||
if tc.experimentalInitialCorruptCheck != "" {
|
||||
experimentalInitialCorruptCheck, err := strconv.ParseBool(tc.experimentalInitialCorruptCheck)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
yc.ExperimentalInitialCorruptCheck = &experimentalInitialCorruptCheck
|
||||
}
|
||||
|
||||
if tc.experimentalStopGRPCServiceOnDefrag != "" {
|
||||
experimentalStopGRPCServiceOnDefrag, err := strconv.ParseBool(tc.experimentalStopGRPCServiceOnDefrag)
|
||||
if err != nil {
|
||||
@ -171,6 +220,7 @@ func TestConfigFileFeatureGates(t *testing.T) {
|
||||
}
|
||||
yc.ExperimentalStopGRPCServiceOnDefrag = &experimentalStopGRPCServiceOnDefrag
|
||||
}
|
||||
|
||||
b, err := yaml.Marshal(&yc)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
|
@ -48,6 +48,7 @@ import (
|
||||
"go.etcd.io/etcd/server/v3/etcdserver"
|
||||
"go.etcd.io/etcd/server/v3/etcdserver/api/etcdhttp"
|
||||
"go.etcd.io/etcd/server/v3/etcdserver/api/rafthttp"
|
||||
"go.etcd.io/etcd/server/v3/features"
|
||||
"go.etcd.io/etcd/server/v3/storage"
|
||||
"go.etcd.io/etcd/server/v3/verify"
|
||||
)
|
||||
@ -203,7 +204,6 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) {
|
||||
TokenTTL: cfg.AuthTokenTTL,
|
||||
CORS: cfg.CORS,
|
||||
HostWhitelist: cfg.HostWhitelist,
|
||||
InitialCorruptCheck: cfg.ExperimentalInitialCorruptCheck,
|
||||
CorruptCheckTime: cfg.ExperimentalCorruptCheckTime,
|
||||
CompactHashCheckEnabled: cfg.ExperimentalCompactHashCheckEnabled,
|
||||
CompactHashCheckTime: cfg.ExperimentalCompactHashCheckTime,
|
||||
@ -259,7 +259,7 @@ func StartEtcd(inCfg *Config) (e *Etcd, err error) {
|
||||
|
||||
// newly started member ("memberInitialized==false")
|
||||
// does not need corruption check
|
||||
if memberInitialized && srvcfg.InitialCorruptCheck {
|
||||
if memberInitialized && srvcfg.ServerFeatureGate.Enabled(features.InitialCorruptCheck) {
|
||||
if err = e.Server.CorruptionChecker().InitialCheck(); err != nil {
|
||||
// set "EtcdServer" to nil, so that it does not block on "EtcdServer.Close()"
|
||||
// (nothing to close since rafthttp transports have not been started)
|
||||
|
@ -273,7 +273,7 @@ Experimental distributed tracing:
|
||||
Number of samples to collect per million spans for distributed tracing. Disabled by default.
|
||||
|
||||
Experimental feature:
|
||||
--experimental-initial-corrupt-check 'false'
|
||||
--experimental-initial-corrupt-check 'false'. It's deprecated, and will be decommissioned in v3.7. Use '--feature-gates=InitialCorruptCheck=true' instead.
|
||||
Enable to check data corruption before serving any client/peer traffic.
|
||||
--experimental-corrupt-check-time '0s'
|
||||
Duration of time between cluster corruption check passes.
|
||||
|
@ -45,18 +45,25 @@ const (
|
||||
// alpha: v3.6
|
||||
// main PR: https://github.com/etcd-io/etcd/pull/18279
|
||||
StopGRPCServiceOnDefrag featuregate.Feature = "StopGRPCServiceOnDefrag"
|
||||
// InitialCorruptCheck enable to check data corruption before serving any client/peer traffic.
|
||||
// owner: @serathius
|
||||
// alpha: v3.6
|
||||
// main PR: https://github.com/etcd-io/etcd/pull/10524
|
||||
InitialCorruptCheck featuregate.Feature = "InitialCorruptCheck"
|
||||
)
|
||||
|
||||
var (
|
||||
DefaultEtcdServerFeatureGates = map[featuregate.Feature]featuregate.FeatureSpec{
|
||||
DistributedTracing: {Default: false, PreRelease: featuregate.Alpha},
|
||||
StopGRPCServiceOnDefrag: {Default: false, PreRelease: featuregate.Alpha},
|
||||
InitialCorruptCheck: {Default: false, PreRelease: featuregate.Alpha},
|
||||
}
|
||||
// ExperimentalFlagToFeatureMap is the map from the cmd line flags of experimental features
|
||||
// to their corresponding feature gates.
|
||||
// Deprecated: only add existing experimental features here. DO NOT use for new features.
|
||||
ExperimentalFlagToFeatureMap = map[string]featuregate.Feature{
|
||||
"experimental-stop-grpc-service-on-defrag": StopGRPCServiceOnDefrag,
|
||||
"experimental-initial-corrupt-check": InitialCorruptCheck,
|
||||
}
|
||||
)
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user