Previous change logs can be found at CHANGELOG-3.4.
The minimum recommended etcd versions to run in production are 3.2.28+, 3.3.18+, and 3.4.2+.
See code changes and v3.5 upgrade guide for any breaking changes.
Again, before running upgrades from any previous release, please make sure to read change logs below and v3.5 upgrade guide.
go.etcd.io/etcd Go packages have moved to go.etcd.io/etcd/{api,pkg,raft,client,etcdctl,server,raft,tests}/v3 to follow the Go modules conventionsgo.etcd.io/clientv3/snapshot SnapshotManager class have moved to go.etcd.io/clientv3/etcdctl. The method snapshot.Save to download a snapshot from the remote server was preserved in 'go.etcd.io/clientv3/snapshot`.MemberList call will fail./v3 endpoint./v3beta.curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}' doesn't work in v3.5. Use curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}' instead.etcd --experimental-enable-v2v3 flag remains experimental and to be deprecated.--enable-v2 and --experimental-enable-v2v3 are now deprecated and will be removed in etcd v3.6 release.etcd --experimental-backend-bbolt-freelist-type flag has been deprecated. Use etcd --backend-bbolt-freelist-type instead. The default type is hashmap and it is stable now.etcd --debug flag has been deprecated. Use etcd --log-level=debug instead.embed.Config.Debug.etcd --log-output flag has been deprecated. Use etcd --log-outputs instead.etcd --logger=zap --log-outputs=stderr is now the default.etcd --logger=capnslog flag value has been deprecated.etcd --logger=zap --log-outputs=default flag value is not supported..etcd --logger=zap --log-outputs=stderr.etcd --logger=zap --log-outputs=systemd/journal to send logs to the local systemd journal.etcd --logger=capnslog --log-outputs=default redirects server logs to local systemd journal. And if write to journald fails, it writes to os.Stderr as a fallback.os.Stderr, which is inefficient.etcd --log-outputs=stderr is now the default.etcd --log-package-levels flag for capnslog has been deprecated. Now, etcd --logger=zap --log-outputs=stderr is the default.[CLIENT-URL]/config/local/log endpoint has been deprecated, as is etcd --log-package-levels flag.curl http://127.0.0.1:2379/config/local/log -XPUT -d '{"Level":"DEBUG"}' won't work.etcd --logger=zap --log-outputs=stderr instead.etcd_debugging_mvcc_db_total_size_in_bytes Prometheus metric. Use etcd_mvcc_db_total_size_in_bytes instead.etcd_debugging_mvcc_put_total Prometheus metric. Use etcd_mvcc_put_total instead.etcd_debugging_mvcc_delete_total Prometheus metric. Use etcd_mvcc_delete_total instead.etcd_debugging_mvcc_txn_total Prometheus metric. Use etcd_mvcc_txn_total instead.etcd_debugging_mvcc_range_total Prometheus metric. Use etcd_mvcc_range_total instead./version outputs 3.5.0-pre, instead of 3.4.0+git.proxy package function signature to support structured logger.NewClusterProxy(c *clientv3.Client, advaddr string, prefix string) (pb.ClusterServer, <-chan struct{}), now NewClusterProxy(lg *zap.Logger, c *clientv3.Client, advaddr string, prefix string) (pb.ClusterServer, <-chan struct{}).Register(c *clientv3.Client, prefix string, addr string, ttl int), now Register(lg *zap.Logger, c *clientv3.Client, prefix string, addr string, ttl int) <-chan struct{}.NewHandler(t *http.Transport, urlsFunc GetProxyURLs, failureWait time.Duration, refreshInterval time.Duration) http.Handler, now NewHandler(lg *zap.Logger, t *http.Transport, urlsFunc GetProxyURLs, failureWait time.Duration, refreshInterval time.Duration) http.Handler.pkg/flags function signature to support structured logger.SetFlagsFromEnv(prefix string, fs *flag.FlagSet) error, now SetFlagsFromEnv(lg *zap.Logger, prefix string, fs *flag.FlagSet) error.SetPflagsFromEnv(prefix string, fs *pflag.FlagSet) error, now SetPflagsFromEnv(lg *zap.Logger, prefix string, fs *pflag.FlagSet) error.embed.Config::SetupGlobalLoggers() explicitly.NewZapLoggerBuilder.context cancelled or context deadline exceeded are exposed as codes.Canceled and codes.DeadlineExceeded, instead of codes.Unknown.meta bucket confState key.meta bucket.downgrade in the cluster bucketTLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 and TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 to etcd --cipher-suites.ClientCertFile and ClientKeyFile options for peer and client tls configuration when split certificates are used.See List of metrics for all metrics per release.
Note that any etcd_debugging_* metrics are experimental and subject to change.
etcd_debugging_mvcc_db_total_size_in_bytes Prometheus metric. Use etcd_mvcc_db_total_size_in_bytes instead.etcd_debugging_mvcc_put_total Prometheus metric. Use etcd_mvcc_put_total instead.etcd_debugging_mvcc_delete_total Prometheus metric. Use etcd_mvcc_delete_total instead.etcd_debugging_mvcc_txn_total Prometheus metric. Use etcd_mvcc_txn_total instead.etcd_debugging_mvcc_range_total Prometheus metric. Use etcd_mvcc_range_total instead.etcd_debugging_mvcc_current_revision Prometheus metric.etcd_debugging_mvcc_compact_revision Prometheus metric.etcd_cluster_version Prometheus metrics to include only major and minor version.etcd_debugging_mvcc_total_put_size_in_bytes Prometheus metric.etcd_server_client_requests_total with "type" and "client_api_version" labels.etcd_wal_write_bytes_total.etcd_debugging_auth_revision.os_fd_used and os_fd_limit to monitor current OS file descriptors.TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 and TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 to etcd --cipher-suites.etcd --enable-v2=true --enable-v2v3=/aaa to enable v2 API server that is backed by v3 storage.etcd --backend-bbolt-freelist-type] flag is now stable.etcd --experimental-backend-bbolt-freelist-type has been deprecated.[CLIENT-PORT]/health check in server side.etcd --unsafe-no-fsync flag.etcd --auth-token-ttl flag to customize simpleTokenTTL settings.runtime.FDUsage call pattern to reduce objects malloc of Memory Usage and CPU Usage.etcd --experimental-watch-progress-notify-interval flag to make watch progress notify interval configurable.etcd --self-signed-cert-validity flag to support setting certificate expiration time.etcd --experimental-warning-apply-duration flag which allows apply duration threshold to be configurable.etcd --experimental-memory-mlock flag which prevents etcd memory pages to be swapped out.etcd --socket-reuse-port flagSO_REUSEPORT which allows rebind of a port already in use. User should take caution when using this flag to ensure flock is properly enforced.etcd --socket-reuse-address flagSO_REUSEADDR which allows binding to an address in TIME_WAIT state, improving etcd restart time.ETCD_VERIFY="all" environment triggers additional verification of consistency of etcd data-dir files.etcd --enable-log-rotation boolean flag which enables log rotation if true.etcd --log-rotation-config-json flag which allows passthrough of JSON config to configure log rotation for a file output target.--experimental-enable-distributed-tracing which enables tracing.etcd --experimental-distributed-tracing-address string flag which allows configuring the OpenTelemetry collector address.etcd --experimental-distributed-tracing-service-name string flag which allows changing the default “etcd” service name.etcd --experimental-distributed-tracing-instance-id string flag which configures an instance ID, which must be unique per etcd instance.runtimeembedembed.Config.Debug.embed.Config.LogLevel instead.embed.Config.ZapLoggerBuilder to allow creating a custom zap logger.*zap.Logger with etcd server logger object.embed.Config.EnableLogRotation which enables log rotation if true.embed.Config.LogRotationConfigJSON to allow passthrough of JSON config to configure log rotation for a file output target.embed.Config.ExperimentalEnableDistributedTracing which enables experimental distributed tracing if true.embed.Config.ExperimentalDistributedTracingAddress which allows overriding default collector address.embed.Config.ExperimentalDistributedTracingServiceName which allows overriding default “etcd” service name.embed.Config.ExperimentalDistributedTracingServiceInstanceID which allows configuring an instance ID, which must be uniquer per etcd instance.clientv3TryLock method to clientv3/concurrency/Mutex. A non-blocking method on Mutex which does not wait to get lock on the Mutex, returns immediately if Mutex is locked by another session."hasleader" metadata embedding.clientv3.WithRequireLeader(ctx) was overwriting existing context keys.etcd-endpoints://{id}/#initially={list of endpoints} e.g. etcd-endpoints://0xc0009d8540/#initially=[localhost:2079]leasewaletcd_wal_write_bytes_total.ReadAll and entry limit in decodeRecord.etcdctl member add command to prevent potential timeout. (PR#11194 and PR#11638)etcdctl watch --progress-notify flag.etcdctl auth status command to check if authentication is enabledetcdctl get --count-only flag for output type fields.etcdctl member list -w=json --hex flag to print memberListResponse in hex format json.etcdctl lock <lockname> exec-command to return exit code of exec-command.etcdutl incorporated functionality of: etcdctl snapshot status|restore, etcdctl backup, etcdctl defrag --data-dir ....etcdctl migrate has been decomissioned. Use etcd <=v3.4 to restore v2 storage./v3 endpoint./v3beta.curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}' does work in v3.5. Use curl -L http://localhost:2379/v3/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}' instead.enable-grpc-gateway flag to true when using a config file to keep the defaults the same as the command line configuration.panic on error for metrics handler.grpc-keepalive-min-time, grpc-keepalive-interval and grpc-keepalive-timeout./v3/auth/status endpoint to check if authentication is enabledLinearizable field to etcdserverpb.MemberListRequest.netutilnetutil.DropPort/RecoverPort/SetLatency/RemoveLatency.tools/etcd-dump-metricsgoogle.golang.org/grpc from v1.23.0 to v1.37.0.go.uber.org/zap from v1.14.1 to v1.16.0.arm64.arm64 EC2 instances (Graviton 2).