Project: etcd (Orchestration & Management / Coordination & Service Discovery)
File: CHANGELOG-3.5.md

Previous change logs can be found at . <hr> Fix . Add . Fix . Update . Fix Add to enable client failover on defrag. Add Add . Fix . Compile binaries using . Upgrade . <hr> Fix leases wrongly revoked by the leader by . Fix . Fix . Add . . Add `--dial-keepalive-time` `--dial-keepalive-timeout` `--permit-without-stream` Upgrade . Compile binaries using . Upgrade . Upgrade github.com/sirupsen/logrus to v1.9.3 to address . . <hr> Fix Document Fix Add Fix Add Compile binaries using Upgrade Fix distributed tracing by ensuring `--experimental-distributed-tracing-sampling-rate` configuration option is available to . Fix Add Compile binaries using Fix by . <hr> Fix . Fix Improve Improve Fix Add . Add . Fix . Fix Fix Fix Fix Compile binaries using . Upgrade gRPC to 1.58.3 in https://github.com/etcd-io/etcd/pull/16625, https://github.com/etcd-io/etcd/pull/16781 and https://github.com/etcd-io/etcd/pull/16790. Note that gRPC server will reject requests with connection header (refer to https://github.com/grpc/grpc-go/pull/4803). Upgrade <hr> Fix . Compile binaries using . <hr> Add to enable support for TLS 1.3. Add flag to support separating http server from grpc one, thus giving full immunity to . Change Fix Fix Fix Fix . Etcd now uses zap timestamp format: `2006-01-02T15:04:05.999999Z0700` (microsecond instead of milliseconds precision). Fix . Fix by . Fix . Fix . Fix . Fix . Recommend . Compile binaries using Upgrade Upgrade . Fix <hr> Fix . Fix . Fix . Fix . Fix . Reverted the fix to . Recommend . Compile binaries using Bumped to address some HIGH Vulnerabilities. Use to address critical Vulnerabilities. Updated . <hr> Fix Fix Fix Fix Fix Fix Fix . Fix Fix . Add flag to support adding configurable cipher list. <hr> Deprecated . Fix . Fix . . Add flag to configure the max concurrent streams each client can open at a time, and defaults to math.MaxUint32. Add flags to support enabling reliable corruption detection on compacted revisions. Fix . Fix . Fix . Fix . Fix . Fix Fix Fix Fix Fix Fix to address . . <hr> Fix returned by DNS lookup <hr> Fix Fix Fix Fix Fix Fix . in SRV records returned by DNS lookup when displaying member list in json. <hr> See and for any breaking changes. Fix . Add flag to enable checkpoint persisting. Fix , requires enabling checkpoint persisting. Fix Fix <hr> See and for any breaking changes. Fix . Fix Endpoints self identify now as `etcd-endpoints://{id}/{authority}` where authority is based on first endpoint passed, for example `etcd-endpoints://0xc0009d8540/localhost:2079` Updated from `debian:buster-v1.4.0` to `debian:bullseye-20210927` to fix the following critical CVEs: : miscalculation of a buffer size in openssl's SM2 decryption : integer overflow flaw in glibc : incorrect syscall argument generation in libseccomp : libfetch in apk-tools mishandles numeric strings in FTP and HTTP protocols to allow out of bound reads. <hr> See and for any breaking changes. (2021 TBD), see . (2021-06-10), see . (2021-06-04), see . (2021-05-26), see . (2021-05-18), see . (2021-05-18), see . (2021-05-18), see . Again, before running upgrades from any previous release, please make sure to read change logs below and . `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 conventions `go.etcd.io/clientv3/snapshot` SnapshotManager class have moved to `go.etcd.io/clientv3/etcdctl`. The method

to download a snapshot from the remote server was preserved in 'go.etcd.io/clientv3/snapshot`. `go.etcd.io/client' package got migrated to 'go.etcd.io/client/v2'. Changed behavior of clientv3 API . Previously, it is directly served with server's local data, which could be stale. Now, it is served with linearizable guarantee. If the server is disconnected from quorum, `MemberList` call will fail. only supports endpoint. Deprecated . `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. v2 storage emulation feature will be deprecated in the next release. etcd 3.5 is the last version that supports V2 API. Flags `--enable-v2` and `--experimental-enable-v2v3` 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. Remove . `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.. Use `etcd --logger=zap --log-outputs=stderr`. Or, use `etcd --logger=zap --log-outputs=systemd/journal` to send logs to the local systemd journal. Previously, if etcd parent process ID (PPID) is 1 (e.g. run with systemd), `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. However, even with PPID 1, it can fail to dial systemd journal (e.g. run embedded etcd with Docker container). Then, and fall back to `os.Stderr`, which is inefficient. To avoid this problem, systemd journal logging must be configured manually. `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. Please use `etcd --logger=zap --log-outputs=stderr` instead. Deprecated `etcddebuggingmvccdbtotalsizeinbytes` Prometheus metric. Use `etcdmvccdbtotalsizein_bytes` instead. Deprecated `etcddebuggingmvccputtotal` Prometheus metric. Use `etcdmvccput_total` instead. Deprecated `etcddebuggingmvccdeletetotal` Prometheus metric. Use `etcdmvccdelete_total` instead. Deprecated `etcddebuggingmvcctxntotal` Prometheus metric. Use `etcdmvcctxn_total` instead. Deprecated `etcddebuggingmvccrangetotal` Prometheus metric. Use `etcdmvccrange_total` instead. Main branch `/version` outputs `3.5.0-pre`, instead of `3.4.0+git`. Changed `proxy` package function signature to . Previously, `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{})`. Previously, `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{}`. Previously, `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`. Changed `pkg/flags` function signature to . Previously, `SetFlagsFromEnv(prefix string, fs flag.FlagSet) error`, now `SetFlagsFromEnv(lg zap.Logger, prefix string, fs *flag.FlagSet) error`. Previously, `SetPflagsFromEnv(prefix string, fs pflag.FlagSet) error`, now `SetPflagsFromEnv(lg zap.Logger, prefix string, fs *pflag.FlagSet) error`. ClientV3 supports . Endpoints can be managed using Previously supported . Use instead. Turned on . Should prevent disrupting RAFT leader by an individual member. : Now supports log levels (debug, info, warn, error, dpanic, panic, fatal). Only when set, overrides application-wide grpc logging settings. needs to called exactly once and closes Etcd.Err()

be default any longer. If desired, please call `embed.Config::SetupGlobalLoggers()` explicitly. . Client errors of `context cancelled` or `context deadline exceeded` are exposed as `codes.Canceled` and `codes.DeadlineExceeded`, instead of `codes.Unknown`. in the `meta` bucket `confState` key. in the `meta` bucket. Backend persists `downgrade` in the `cluster` bucket Add . Changed . Add third party . A is added when etcd uses any existing directory that has a permission different than 700 on Linux and 777 on Windows. Add optional options for peer and client tls configuration when split certificates are used. See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Deprecated `etcddebuggingmvccdbtotalsizeinbytes` Prometheus metric. Use `etcdmvccdbtotalsizein_bytes` instead. Deprecated `etcddebuggingmvccputtotal` Prometheus metric. Use `etcdmvccput_total` instead. Deprecated `etcddebuggingmvccdeletetotal` Prometheus metric. Use `etcdmvccdelete_total` instead. Deprecated `etcddebuggingmvcctxntotal` Prometheus metric. Use `etcdmvcctxn_total` instead. Deprecated `etcddebuggingmvccrangetotal` Prometheus metric. Use `etcdmvccrange_total` instead. Add Prometheus metric. Add Prometheus metric. Change Prometheus metrics to include only major and minor version. Add Prometheus metric. Add . Add . Add . Add . Add . Add . Add . Add . Automatically (fix ). v4.0 will configure `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. Support . Deprecate v2 apply on cluster version. . . . Fix . Improve to work when peer mTLS is enabled. Log . Log . Improve . . . Improve . Remove . With 40 million key test data,it can shorten the startup time from 5 min to 2.5 min. . Fix . Previously, server restore fails if it had crashed after persisting raft hard state but before saving snapshot. See https://github.com/etcd-io/etcd/issues/10219 for more. Add . See https://github.com/etcd-io/etcd/issues/11918. Improve logging around snapshot send and receive. . Add . Add . Add flag. Setting the flag disables all uses of fsync, which is unsafe and will cause data loss. This flag makes it possible to run an etcd node for testing and development without placing lots of load on the file system. Add flag to customize `simpleTokenTTL` settings. Improve . Improve . Log . . . Add flag to make watch progress notify interval configurable. Fix . Fixed via . when force-new-cluster flag is enabled in a cluster which had learner node. Add flag to support setting certificate expiration time. Notice, certificates generated by etcd are valid for 1 year by default when specifying the auto-tls or peer-auto-tls option. Add flag which allows apply duration threshold to be configurable. Add flag which prevents etcd memory pages to be swapped out. Add flag Setting this flag enables `SO_REUSEPORT` which allows rebind of a port already in use. User should take caution when using this flag to ensure flock is properly enforced. Add flag Setting this flag enables `SOREUSEADDR` which allows binding to an address in `TIMEWAIT` state, improving etcd restart time. Reduce . `ETCD_VERIFY="all"` environment triggers of etcd data-dir files. Add boolean flag which enables log rotation if true. Add flag which allows passthrough of JSON config to configure log rotation for a file output target. Add experimental distributed tracing boolean flag which enables tracing. Add string flag which allows configuring the OpenTelemetry collector

Add string flag which allows changing the default "etcd" service name. Add string flag which configures an instance ID, which must be unique per etcd instance. Add which configures a threshold for the unused db size and etcdserver will automatically perform defragmentation on bootstrap when it exceeds this value. The functionality is disabled if the value is 0. Optimize . Remove . Use `embed.Config.LogLevel` instead. Add to allow creating a custom zap logger. Replace . Add which enables log rotation if true. Add to allow passthrough of JSON config to configure log rotation for a file output target. Add which enables experimental distributed tracing if true. Add which allows overriding default collector address. Add which allows overriding default "etcd" service name. Add which allows configuring an instance ID, which must be uniquer per etcd instance. Remove . See . Add 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. Fix . Fix . Fix . Fix . Fix . This change is compatible with grpc >= , but is not compatible with < v1.26.0 version. Use after bumping to grpc v1.26.0. Remove workaround in . Fix . Previously, `clientv3.WithRequireLeader(ctx)` was overwriting existing context keys. Fix . When clients cancel their watches, a cancel request will now be immediately sent to the server instead of waiting for the next watch event. Make sure . Fix . Get AuthToken automatically when clientConn is ready. Improve . Changed to use grpc resolver API instead of custom balancer. Endpoints self identify now as `etcd-endpoints://{id}/#initially={list of endpoints}` e.g. `etcd-endpoints://0xc0009d8540/#initially=[localhost:2079]` Make sure . Fix . https://github.com/etcd-io/etcd/issues/11495 https://github.com/etcd-io/etcd/issues/11730 Make sure . Add . Handle . Fix `etcdctl member add` command to prevent potential timeout. ( and ) Add flag. Add command to check if authentication is enabled Add flag for output type `fields`. Add flag to print memberListResponse in hex format json. Changed to return exit code of exec-command. incorporated functionality of: `etcdctl snapshot status|restore`, `etcdctl backup`, `etcdctl defrag --data-dir ...`. has been decommissioned. Use etcd <=v3.4 to restore v2 storage. only supports endpoint. Deprecated . `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. Set flag to true when using a config file to keep the defaults the same as the command line configuration. Fix for metrics handler. Add `grpc-keepalive-min-time`, `grpc-keepalive-interval` and `grpc-keepalive-timeout`. . Add . Add . Fix () Fix bug where . . . Fix . Add endpoint to check if authentication is enabled . . Remove . These are not used anymore. They were only used for older versions of functional testing. Removed to adhere to best security practices, minimize arbitrary shell invocation. Implement . Upgrade from to . Upgrade from to . etcd now . See https://github.com/etcd-io/etcd/pull/12928 for adding automated tests with `arm64` EC2 instances (Graviton 2). See https://github.com/etcd-io/website/pull/273 for new platform support tier policies. Add s390x build support ( and ) Require . Compile with etcd uses (instead of vendor dir) to track dependencies. The etcd team has added, a well defined and openly discussed, project . <hr>