package config

import "go.etcd.io/etcd/server/v3/config"

Index

Constants

const (
	// V2Depr0NotYet means v2store isn't deprecated yet.
	// Default in v3.5, and no longer supported in v3.6.
	V2Depr0NotYet = V2DeprecationEnum("not-yet")

	// Deprecated: to be decommissioned in 3.7. Please use V2Depr0NotYet.
	// TODO: remove in 3.7
	//revive:disable-next-line:var-naming
	V2_DEPR_0_NOT_YET = V2Depr0NotYet

	// V2Depr1WriteOnly means only writing v2store is allowed.
	// Default in v3.6.  Meaningful v2 state is not allowed.
	// The V2 files are maintained for v3.5 rollback.
	V2Depr1WriteOnly = V2DeprecationEnum("write-only")

	// Deprecated: to be decommissioned in 3.7. Please use V2Depr1WriteOnly.
	// TODO: remove in 3.7
	//revive:disable-next-line:var-naming
	V2_DEPR_1_WRITE_ONLY = V2Depr1WriteOnly

	// V2Depr1WriteOnlyDrop means v2store is WIPED if found !!!
	// Will be default in 3.7.
	V2Depr1WriteOnlyDrop = V2DeprecationEnum("write-only-drop-data")

	// Deprecated: to be decommissioned in 3.7. Pleae use V2Depr1WriteOnlyDrop.
	// TODO: remove in 3.7
	//revive:disable-next-line:var-naming
	V2_DEPR_1_WRITE_ONLY_DROP = V2Depr1WriteOnlyDrop

	// V2Depr2Gone means v2store is completely gone. The v2store is
	// neither written nor read. Anything related to v2store will be
	// cleaned up in v3.8. Usage of this configuration is blocking
	// ability to rollback to etcd v3.5.
	V2Depr2Gone = V2DeprecationEnum("gone")

	// Deprecated: to be decommissioned in 3.7. Please use V2Depr2Gone.
	// TODO: remove in 3.7
	//revive:disable-next-line:var-naming
	V2_DEPR_2_GONE = V2Depr2Gone

	// V2DeprDefault is the default deprecation level.
	V2DeprDefault = V2Depr1WriteOnly

	// Deprecated: to be decommissioned in 3.7. Please use V2DeprDefault.
	// TODO: remove in 3.7
	//revive:disable-next-line:var-naming
	V2_DEPR_DEFAULT = V2DeprDefault
)

Functions

func CheckDuplicateURL

func CheckDuplicateURL(urlsmap types.URLsMap) bool

Types

type ServerConfig

type ServerConfig struct {
	Name string

	DiscoveryURL   string
	DiscoveryProxy string
	DiscoveryCfg   v3discovery.DiscoveryConfig

	ClientURLs types.URLs
	PeerURLs   types.URLs
	DataDir    string
	// DedicatedWALDir config will make the etcd to write the WAL to the WALDir
	// rather than the dataDir/member/wal.
	DedicatedWALDir string

	SnapshotCount uint64

	// SnapshotCatchUpEntries is the number of entries for a slow follower
	// to catch-up after compacting the raft storage entries.
	// We expect the follower has a millisecond level latency with the leader.
	// The max throughput is around 10K. Keep a 5K entries is enough for helping
	// follower to catch up.
	SnapshotCatchUpEntries uint64

	MaxSnapFiles uint
	MaxWALFiles  uint

	// BackendBatchInterval is the maximum time before commit the backend transaction.
	BackendBatchInterval time.Duration
	// BackendBatchLimit is the maximum operations before commit the backend transaction.
	BackendBatchLimit int

	// BackendFreelistType is the type of the backend boltdb freelist.
	BackendFreelistType bolt.FreelistType

	InitialPeerURLsMap  types.URLsMap
	InitialClusterToken string
	NewCluster          bool
	PeerTLSInfo         transport.TLSInfo

	CORS map[string]struct{}

	// HostWhitelist lists acceptable hostnames from client requests.
	// If server is insecure (no TLS), server only accepts requests
	// whose Host header value exists in this white list.
	HostWhitelist map[string]struct{}

	TickMs        uint
	ElectionTicks int

	// InitialElectionTickAdvance is true, then local member fast-forwards
	// election ticks to speed up "initial" leader election trigger. This
	// benefits the case of larger election ticks. For instance, cross
	// datacenter deployment may require longer election timeout of 10-second.
	// If true, local node does not need wait up to 10-second. Instead,
	// forwards its election ticks to 8-second, and have only 2-second left
	// before leader election.
	//
	// Major assumptions are that:
	//  - cluster has no active leader thus advancing ticks enables faster
	//    leader election, or
	//  - cluster already has an established leader, and rejoining follower
	//    is likely to receive heartbeats from the leader after tick advance
	//    and before election timeout.
	//
	// However, when network from leader to rejoining follower is congested,
	// and the follower does not receive leader heartbeat within left election
	// ticks, disruptive election has to happen thus affecting cluster
	// availabilities.
	//
	// Disabling this would slow down initial bootstrap process for cross
	// datacenter deployments. Make your own tradeoffs by configuring
	// --initial-election-tick-advance at the cost of slow initial bootstrap.
	//
	// If single-node, it advances ticks regardless.
	//
	// See https://github.com/etcd-io/etcd/issues/9333 for more detail.
	InitialElectionTickAdvance bool

	BootstrapTimeout time.Duration

	AutoCompactionRetention time.Duration
	AutoCompactionMode      string
	CompactionBatchLimit    int
	CompactionSleepInterval time.Duration
	QuotaBackendBytes       int64
	MaxTxnOps               uint

	// MaxRequestBytes is the maximum request size to send over raft.
	MaxRequestBytes uint

	// MaxConcurrentStreams specifies the maximum number of concurrent
	// streams that each client can open at a time.
	MaxConcurrentStreams uint32

	WarningApplyDuration        time.Duration
	WarningUnaryRequestDuration time.Duration

	StrictReconfigCheck bool

	// ClientCertAuthEnabled is true when cert has been signed by the client CA.
	ClientCertAuthEnabled bool

	AuthToken  string
	BcryptCost uint
	TokenTTL   uint

	// InitialCorruptCheck is true to check data corruption on boot
	// before serving any peer/client traffic.
	InitialCorruptCheck  bool
	CorruptCheckTime     time.Duration
	CompactHashCheckTime time.Duration

	// PreVote is true to enable Raft Pre-Vote.
	PreVote bool

	// SocketOpts are socket options passed to listener config.
	SocketOpts transport.SocketOpts

	// Logger logs server-side operations.
	Logger *zap.Logger

	ForceNewCluster bool

	// LeaseCheckpointInterval time.Duration is the wait duration between lease checkpoints.
	LeaseCheckpointInterval time.Duration

	EnableGRPCGateway bool

	// EnableDistributedTracing enables distributed tracing using OpenTelemetry protocol.
	EnableDistributedTracing bool
	// TracerOptions are options for OpenTelemetry gRPC interceptor.
	TracerOptions []otelgrpc.Option

	WatchProgressNotifyInterval time.Duration

	// UnsafeNoFsync disables all uses of fsync.
	// Setting this is unsafe and will cause data loss.
	UnsafeNoFsync bool `json:"unsafe-no-fsync"`

	DowngradeCheckTime time.Duration

	// MemoryMlock enables mlocking of etcd owned memory pages.
	// The setting improves etcd tail latency in environments were:
	//   - memory pressure might lead to swapping pages to disk
	//   - disk latency might be unstable
	// Currently all etcd memory gets mlocked, but in future the flag can
	// be refined to mlock in-use area of bbolt only.
	MemoryMlock bool `json:"memory-mlock"`

	// ExperimentalTxnModeWriteWithSharedBuffer enable write transaction to use
	// a shared buffer in its readonly check operations.
	// TODO: Delete in v3.7
	// Deprecated: Use TxnModeWriteWithSharedBuffer Feature Gate instead. Will be decommissioned in v3.7.
	ExperimentalTxnModeWriteWithSharedBuffer bool `json:"experimental-txn-mode-write-with-shared-buffer"`

	// BootstrapDefragThresholdMegabytes is the minimum number of megabytes needed to be freed for etcd server to
	// consider running defrag during bootstrap. Needs to be set to non-zero value to take effect.
	BootstrapDefragThresholdMegabytes uint `json:"bootstrap-defrag-threshold-megabytes"`

	// MaxLearners sets a limit to the number of learner members that can exist in the cluster membership.
	MaxLearners int `json:"max-learners"`

	// V2Deprecation defines a phase of v2store deprecation process.
	V2Deprecation V2DeprecationEnum `json:"v2-deprecation"`

	// ExperimentalLocalAddress is the local IP address to use when communicating with a peer.
	ExperimentalLocalAddress string `json:"experimental-local-address"`

	// ServerFeatureGate is a server level feature gate
	ServerFeatureGate featuregate.FeatureGate

	// Metrics types of metrics - should be either 'basic' or 'extensive'
	Metrics string
}

ServerConfig holds the configuration of etcd as taken from the command line or discovery.

func (*ServerConfig) BackendPath

func (c *ServerConfig) BackendPath() string

func (*ServerConfig) BootstrapTimeoutEffective

func (c *ServerConfig) BootstrapTimeoutEffective() time.Duration

func (*ServerConfig) ElectionTimeout

func (c *ServerConfig) ElectionTimeout() time.Duration

func (*ServerConfig) MaxRequestBytesWithOverhead

func (c *ServerConfig) MaxRequestBytesWithOverhead() uint

func (*ServerConfig) MemberDir

func (c *ServerConfig) MemberDir() string

func (*ServerConfig) PeerDialTimeout

func (c *ServerConfig) PeerDialTimeout() time.Duration

func (*ServerConfig) ReqTimeout

func (c *ServerConfig) ReqTimeout() time.Duration

ReqTimeout returns timeout for request to finish.

func (*ServerConfig) ShouldDiscover

func (c *ServerConfig) ShouldDiscover() bool

func (*ServerConfig) SnapDir

func (c *ServerConfig) SnapDir() string

func (*ServerConfig) VerifyBootstrap

func (c *ServerConfig) VerifyBootstrap() error

VerifyBootstrap sanity-checks the initial config for bootstrap case and returns an error for things that should never happen.

func (*ServerConfig) VerifyJoinExisting

func (c *ServerConfig) VerifyJoinExisting() error

VerifyJoinExisting sanity-checks the initial config for join existing cluster case and returns an error for things that should never happen.

func (*ServerConfig) WALDir

func (c *ServerConfig) WALDir() string

type V2DeprecationEnum

type V2DeprecationEnum string

func (V2DeprecationEnum) IsAtLeast

func (e V2DeprecationEnum) IsAtLeast(v2d V2DeprecationEnum) bool

Source Files

config.go v2_deprecation.go

Version
v3.6.10 (latest)
Published
Apr 1, 2026
Platform
linux/amd64
Imports
15 packages
Last checked
2 weeks ago

Tools for package owners.