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

Previous change logs can be found at . <hr> See and for any breaking changes. 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. Fix . Get AuthToken automatically when clientConn is ready. Fix for linux locking. Compile with . <hr> See and for any breaking changes. A is added when etcd use any existing directory that has a permission different than 700 on Linux and 777 on Windows. See and for any breaking changes. Fix . Fix . Optimize . Add . Compile with . <hr> See and for any breaking changes. Fix . Changed behavior on . Previously, the permission was not checked on existing data directory and the directory used for automatically generating self-signed certificates for TLS connections with clients. Now a check is added to make sure those directories, if already exist, has a desired permission of 700 on Linux and 777 on Windows. Fix . Add flag to customize `simpleTokenTTL` settings. Improve . Improve . Compile with . <hr> See and for any breaking changes. Add . See https://github.com/etcd-io/etcd/issues/11918. Compile with . <hr> See and for any breaking changes. Make sure . Make sure . Improve logging around snapshot send and receive. . . 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 . Compile with . <hr> See and for any breaking changes. Add . Add . Compile with . <hr> See and for any breaking changes. Fix . Previously, `clientv3.WithRequireLeader(ctx)` was overwriting existing context keys. . Log . Fix command to prevent potential timeout. See for all metrics per release. Add . Fix for metrics handler. Compile with . <hr> See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add Prometheus metric. Add Prometheus metric. Fix . Previously, during shutdown etcd could accidentally remove needed wal files, resulting in catastrophic error `etcdserver: open wal error: wal: file not found.` during startup. Now, etcd makes sure the purge file loop exits before server signals stop of the raft node. <hr> See and for any breaking changes. This release replaces 3.3.16. Due to the etcd 3.3.16 release being incorrectly released (see details below), please use this release instead. <hr> WARNING: This is a bad release! Please use etcd 3.3.17 instead. See https://github.com/etcd-io/etcd/issues/11241 for details. go mod for 'v3.3.16' may return a different hash if retrieved from a go mod proxy than if retrieved directly from github. Depending on this version is unsafe. See https://github.com/etcd-io/etcd/issues/11241 for details. The binaries and docker image for this release have been published and will be left as-is, but will not be signed since this is a bad release. See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Add `etcd --experimental-peer-skip-client-san-verification` to . See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add Prometheus metric. Add Prometheus metric. Upgrade from to . Fix command to prevent potential timeout. Compile with including security fixes. Fix . Fix . Fix . Fix

<hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . NOTE: This patch release had to include some new features from 3.4, while trying to minimize the difference between client balancer implementation. This release fixes . Revert "Migrate dependency management tool from `glide` to ". Now, etcd >= v3.3.15 uses `glide` for dependency management. See for more contexts. Require . Compile with including security fixes. <hr> See and for any breaking changes. (2019-08-15), see . (2019-08-14), see . Again, before running upgrades from any previous release, please make sure to read change logs below and . NOTE: This patch release had to include some new features from 3.4, while trying to minimize the difference between client balancer implementation. This release fixes . Rewrite with . Upgrade . Improve . Fix . uses an asynchronous resolver to pass endpoints to the gRPC dial function. to block until the underlying connection is up, pass `grpc.WithBlock()` to `clientv3.Config.DialOptions`. Require . Compile with including security fixes. Migrate dependency management tool from `glide` to . <= 3.3 puts `vendor` directory under `cmd/vendor` directory to . 3.4 moves `cmd/vendor` directory to `vendor` at repository root. Remove recursive symlinks in `cmd` directory. Now `go get/install/build` on `etcd` packages (e.g. `clientv3`, `tools/benchmark`) enforce builds with etcd `vendor` directory. Deprecated `latest` tag. `docker pull gcr.io/etcd-development/etcd:latest` would not be up-to-date. Deprecated version tags. `docker pull gcr.io/etcd-development/etcd:v3.3` would still work but may be stale. `docker pull gcr.io/etcd-development/etcd:v3.4` would not work. Use `docker pull gcr.io/etcd-development/etcd:v3.3.14` instead, with the exact patch version. Deprecated . , as of late 2016. is not maintained anymore. `*.aci` files are not available from `v3.4` release. Add . Now linearizable requests with read index would fail fast when there is a leadership change, instead of waiting until context timeout. Fix . Add to allow user-provided watch ID to `mvcc`. Corresponding `watch_id` is returned via `etcdserverpb.WatchResponse`, if any. Add to request etcd server to when the total size of events exceeds `etcd --max-request-bytes` flag value plus gRPC-overhead 512 bytes. The default server-side request bytes limit is `embed.DefaultMaxRequestBytes` which is 1.5 MiB plus gRPC-overhead 512 bytes. If watch response events exceed this server-side request limit and watch request is created with `fragment` field `true`, the server will split watch events into a set of chunks, each of which is a subset of watch events below server-side request limit. Useful when client-side has limited bandwidths. For example, watch response contains 10 events, where each event is 1 MiB. And server `etcd --max-request-bytes` flag value is 1 MiB. Then, server will send 10 separate fragmented events to the client. For example, watch response contains 5 events, where each event is 2 MiB. And server `etcd --max-request-bytes` flag value is 1 MiB and `clientv3.Config.MaxCallRecvMsgSize` is 1 MiB. Then, server will try to send 5 separate fragmented events to the client, and the client will error with `"code = ResourceExhausted desc = grpc: received message larger than max (...)"`. Client must implement fragmented watch event merge (which `clientv3` does in etcd v3.4). Add . To manually trigger broadcasting watch progress event (empty watch response with latest header) to all associated watch streams. Think of it as `WithProgressNotify` that can be triggered manually. See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Fix by upgrading from to . Rewrite with . Upgrade

Improve . Fix . uses an asynchronous resolver to pass endpoints to the gRPC dial function. to block until the underlying connection is up, pass `grpc.WithBlock()` to `clientv3.Config.DialOptions`. Add . Previously, . The command output is changed. Previously, if endpoint is unreachable, the command output is "\<endpoint\> is unhealthy: failed to connect: \<error message\>". This change unified the error message, all error types now have the same output "\<endpoint\> is unhealthy: failed to commit proposal: \<error message\>". Add . Change . See and . Improve . See and . Fix . Previously, delete operation violates . Require . Compile with including security fixes. <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Improve . Add . See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Fix bug where . Fix . Add . Migrate to (See for more). Migrate to (See for more). Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . with etcdctl v2 Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Fix . Disable gRPC-gateway proxy requests to etcd server use the etcd client server TLS certificate. If that certificate contains CommonName we do not want to use that for authentication as it could lead to permission escalation. Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Improve , which indicates message send to a peer failed. Improve , which indicates that local node might have slow network. Add ; enable `etcd --debug` flag to see per-request debug information. Add . If consistency check on snapshot file fails, `snapshot status` returns `"snapshot file integrity check failed..."` error. See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Improve Prometheus metric to track leader heartbeats. Previously, it only samples the TCP connection for snapshot messages. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Fix logic on in `clientv3/concurrency` package. Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Improve . Compile with to support . See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Add Prometheus metric. Use it with `etcdmvccdbtotalsizeinbytes` and `etcdmvccdbtotalsizeinuseinbytes`. `etcdserverquotabackendbytes 2.147483648e+09` means current quota size is 2 GB. `etcdmvccdbtotalsizeinbytes 20480` means current physically allocated DB size is 20 KB. `etcdmvccdbtotalsizeinuseinbytes 16384` means future DB size if defragment operation is complete. `etcdmvccdbtotalsizeinbytes - etcdmvccdbtotalsizeinuseinbytes` is the number of bytes that can be saved on disk with defragment operation. Add Prometheus metric. In addition to . Add Prometheus metric. Use it with `etcdmvccdbtotalsizeinbytes` and `etcdmvccdbtotalsizeinuseinbytes`. `etcdserverquotabackendbytes 2.147483648e+09` means current quota size is 2

`etcdmvccdbtotalsizeinbytes 20480` means current physically allocated DB size is 20 KB. `etcdmvccdbtotalsizeinuseinbytes 16384` means future DB size if defragment operation is complete. `etcdmvccdbtotalsizeinbytes - etcdmvccdbtotalsizeinuseinbytes` is the number of bytes that can be saved on disk with defragment operation. Fix . If `<-chan *clientv3LeaseKeepAliveResponse` from `clientv3.Lease.KeepAlive` was never consumed or channel is full, client was instead of expected rate of every "TTL / 3" duration. Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Improve . e.g. `read-only range request "key:\"/a\" rangeend:\"/b\" " with result "rangeresponse_count:3 size:96" took too long (97.966s) to execute`. Redact . Provide . Add . Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Support TLS cipher suite whitelisting. To block . TLS handshake fails when client hello is requested with invalid cipher suites. Add flag. If empty, Go auto-populates the list. Fix . Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Allow . Previously, when auth token is an empty string, it returns . Fix . Fix . Let's assume that a watcher had been requested with a future revision X and sent to node A that became network-partitioned thereafter. Meanwhile, cluster makes progress. Then when the partition gets removed, the leader sends a snapshot to node A. Previously if the snapshot's latest revision is still lower than the watch revision X, etcd server panicked during snapshot restore operation. Now, this server-side panic has been fixed. Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Fix parsing. Previously, `ETCDCTL_API=3 ./bin/etcdctl watch foo -- echo watch event received` panicked. Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add Prometheus metric. Fix Prometheus metric. Fix . Fix when . In Go, server calls `(tls.Config).GetCertificate` for TLS reload if and only if server's `(tls.Config).Certificates` field is not empty, or `(tls.ClientHelloInfo).ServerName` is not empty with a valid SNI from the client. Previously, etcd always populates `(tls.Config).Certificates` on the initial client TLS handshake, as non-empty. Thus, client was always expected to supply a matching SNI in order to pass the TLS verification and to trigger `(*tls.Config).GetCertificate` to reload TLS assets. However, a certificate whose SAN field does would request `*tls.ClientHelloInfo` with an empty `ServerName` field, thus failing to trigger the TLS reload on initial TLS handshake; this becomes a problem when expired certificates need to be replaced online. Now, `(tls.Config).Certificates` is created empty on initial TLS client handshake, first to trigger `(tls.Config).GetCertificate`, and then to populate rest of the certificates on every new TLS connection, even when client SNI is empty (e.g. cert only includes IPs). Add flag to configure initial election tick fast-forward. By default, `etcd --initial-election-tick-advance=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

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. Now, this can be disabled by setting `--initial-election-tick-advance=false`. Disabling this would slow down initial bootstrap process for cross datacenter deployments. Make tradeoffs by configuring `etcd --initial-election-tick-advance` at the cost of slow initial bootstrap. If single-node, it advances ticks regardless. Address . Add to enable/disable initial election tick fast-forward. `embed.NewConfig()` would return `*embed.Config` with `InitialElectionTickAdvance` as true by default. Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Adjust to reduce . Previously, etcd fast-forwards election ticks on server start, with only one tick left for leader election. This is to speed up start phase, without having to wait until all election ticks elapse. Advancing election ticks is useful for cross datacenter deployments with larger election timeouts. However, it was affecting cluster availability if the last tick elapses before leader contacts the restarted node. Now, when etcd restarts, it adjusts election ticks with more than one tick left, thus more time for leader to prevent disruptive restart. Adjust . e.g. `etcd --auto-compaction-mode=revision --auto-compaction-retention=1000` automatically `Compact` on `"latest revision" - 1000` every 5-minute (when latest revision is 30000, compact on revision 29000). e.g. Previously, `etcd --auto-compaction-mode=periodic --auto-compaction-retention=72h` automatically `Compact` with 72-hour retention windown for every 7.2-hour. Now, `Compact` happens, for every 1-hour but still with 72-hour retention window. e.g. Previously, `etcd --auto-compaction-mode=periodic --auto-compaction-retention=30m` automatically `Compact` with 30-minute retention windown for every 3-minute. Now, `Compact` happens, for every 30-minute but still with 30-minute retention window. Periodic compactor keeps recording latest revisions for every compaction period when given period is less than 1-hour, or for every 1-hour when given compaction period is greater than 1-hour (e.g. 1-hour when `etcd --auto-compaction-mode=periodic --auto-compaction-retention=24h`). For every compaction period or 1-hour, compactor uses the last revision that was fetched before compaction period, to discard historical data. The retention window of compaction period moves for every given compaction period or hour. For instance, when hourly writes are 100 and `etcd --auto-compaction-mode=periodic --auto-compaction-retention=24h`, `v3.2.x`, `v3.3.0`, `v3.3.1`, and `v3.3.2` compact revision 2400, 2640, and 2880 for every 2.4-hour, while `v3.3.3` or later compacts revision 2400, 2500, 2600 for every 1-hour. Furthermore, when `etcd --auto-compaction-mode=periodic --auto-compaction-retention=30m` and writes per minute are about 1000, `v3.3.0`, `v3.3.1`, and `v3.3.2` compact revision 30000, 33000, and 36000, for every 3-minute, while `v3.3.3` or later compacts revision 30000, 60000, and 90000, for every 30-minute. See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add missing . Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Fix . Previously, wrong-formatted HTTP requests to Election API could trigger panic in etcd server. e.g. `curl -L http://localhost:2379/v3/election/proclaim -X POST -d '{"value":""}'`, `curl -L http://localhost:2379/v3/election/resign -X POST -d '{"value":""}'`. Fix . Previously, `etcd --auto-compaction-mode revision --auto-compaction-retention 1` was

Now, `etcd --auto-compaction-mode revision --auto-compaction-retention 1` is correctly parsed as revision retention 1. Prevent . `TTL` parameter to `Grant` request is unit of second. Leases with too large `TTL` values exceeding `math.MaxInt64` . Server now returns `rpctypes.ErrLeaseTTLTooLarge` to client, when the requested `TTL` is larger than 9,000,000,000 seconds (which is >285 years). Again, etcd `Lease` is meant for short-periodic keepalives or sessions, in the range of seconds or minutes. Not for hours or days! Enable etcd server . Fix . Compile with . <hr> See and for any breaking changes. Again, before running upgrades from any previous release, please make sure to read change logs below and . Add . e.g. `etcdserver: read-only range request "key:\"\\000\" range_end:\"\\000\" " took too long [3.389041388s] to execute` Fix . "unsynced" watcher is watcher that needs to be in sync with events that have happened. That is, "unsynced" watcher is the slow watcher that was requested on old revision. "unsynced" watcher restore operation was not correctly populating its underlying watcher group. Which possibly causes . A node gets network partitioned with a watcher on a future revision, and falls behind receiving a leader snapshot after partition gets removed. When applying this snapshot, etcd watch storage moves current synced watchers to unsynced since sync watchers might have become stale during network partition. And reset synced watcher group to restart watcher routines. Previously, there was a bug when moving from synced watcher group to unsynced, thus client would miss events when the watcher was requested to the network-partitioned node. Compile with . <hr> See and for any breaking changes. (2018-02-01), see . (2018-01-22), see . (2018-01-17), see . (2018-01-11), see . (2018-01-02), see . (2017-12-20), see . Again, before running upgrades from any previous release, please make sure to read change logs below and . Use to replace . Fix . (8GiB is now a suggested maximum size for normal environments) on . and lease revoke on restart or leader elections. Prevent . Support `clientv3` balancer failover under . Better warning on flag. etcd compares `etcd --initial-advertise-peer-urls` against corresponding `etcd --initial-cluster` URLs with forward-lookup. If resolved IP addresses of `etcd --initial-advertise-peer-urls` and `etcd --initial-cluster` do not match (e.g. ), etcd will exit with errors. v3.2 error: `etcd --initial-cluster must include s1=https://s1.test:2380 given --initial-advertise-peer-urls=https://s1.test:2380`. v3.3 error: `failed to resolve https://s1.test:2380 to match --initial-cluster=s1=https://s1.test:2380 (failed to resolve "https://s1.test:2380" (error ...))`. Require or . Deprecate . Deprecate `grpclog.Logger`, upgrade to . Deprecate errors in `clientv3`. Use to limit message size, in etcd server. Translate . v3 `etcdctl` on expired lease now prints . <=3.2 prints `"lease LEASE_ID granted with TTL(0s), remaining(-1s)"`. Replace endpoint `/v3alpha` with . To deprecate in v3.4. In v3.3, `curl -L http://localhost:2379/v3alpha/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` still works as a fallback to `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'`, but `curl -L http://localhost:2379/v3alpha/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` won't work in v3.4. Use `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` instead. Change `etcd --auto-compaction-retention` flag to with . Now that `etcd --auto-compaction-retention` accepts string values, etcd configuration YAML file `auto-compaction-retention` field must be changed to `string` type. Previously, `--config-file etcd.config.yaml` can have `auto-compaction-retention: 24` field, now must be `auto-compaction-retention: "24"` or `auto-compaction-retention: "24h"`. If configured as `etcd --auto-compaction-mode periodic --auto-compaction-retention "24h"`, the time duration value for `etcd --auto-compaction-retention` flag must be valid for function in Go. Upgrade from to . Upgrade from to . Upgrade to , and . Upgrade to , and . Upgrade from to

Upgrade to . See for all metrics per release. Note that any `etcddebugging*` metrics are experimental and subject to change. Add flag for additional `/metrics` and `/health` endpoints. Useful for . Add Prometheus metric. To replace . Add Prometheus metric. Add Prometheus metric. To improve . Document . Initialize gRPC server . Fix with transaction. `etcddebuggingmvccrangetotal` `etcddebuggingmvccputtotal` `etcddebuggingmvccdeletetotal` `etcddebuggingmvcctxntotal` Fix on restore. Fix on restore. Also change to . See for more details. Add to manage . Document . . For instance, if peer cert contains IP addresses and DNS names in Subject Alternative Name (SAN) field, and the remote IP address matches one of those IP addresses, server just accepts connection without further checking the DNS names. . For instance, if peer cert contains only DNS names (no IP addresses) in Subject Alternative Name (SAN) field, server first reverse-lookups the remote IP address to get a list of names mapping to that address (e.g. `nslookup IPADDR`). Then accepts the connection if those names have a matching name with peer cert's DNS names (either by exact or wildcard match). If none is matched, server forward-lookups each DNS entry in peer cert (e.g. look up `example.default.svc` when the entry is `*.example.default.svc`), and accepts connection only when the host's resolved addresses have the matching IP address with the peer's remote IP address. Add flag. To support for inter peer connection. of cert CommonName(CN) and username + password. To address . Protect . Provide user's role on . Fix . Add flag to . `etcd --experimental-initial-corrupt-check=false` by default. v3.4 will enable `--initial-corrupt-check=true` by default. Add flag to . `etcd --experimental-corrupt-check-time=0s` disabled by default. Add flag to . `etcd --experimental-enable-v2v3=false` by default. Add flag to . Add flag to . If not configured, it defaults to 1.5 MiB. Add flags for . Add flag to support . Add flag for additional `/metrics` and `/health` endpoints. Support . e.g. `etcd --listen-metrics-urls=https://localhost:2378,http://localhost:9379` to serve `/metrics` and `/health` on secure port 2378 and insecure port 9379. Useful for . Add flag to . Change `etcd --auto-compaction-retention` flag to with . Now that `etcd --auto-compaction-retention` accepts string values, etcd configuration YAML file `auto-compaction-retention` field must be changed to `string` type. Previously, `etcd --config-file etcd.config.yaml` can have `auto-compaction-retention: 24` field, now must be `auto-compaction-retention: "24"` or `auto-compaction-retention: "24h"`. If configured as `--auto-compaction-mode periodic --auto-compaction-retention "24h"`, the time duration value for `etcd --auto-compaction-retention` flag must be valid for function in Go. e.g. `etcd --auto-compaction-mode=revision --auto-compaction-retention=1000` automatically `Compact` on `"latest revision" - 1000` every 5-minute (when latest revision is 30000, compact on revision 29000). e.g. `etcd --auto-compaction-mode=periodic --auto-compaction-retention=72h` automatically `Compact` with 72-hour retention windown, for every 7.2-hour. e.g. `etcd --auto-compaction-mode=periodic --auto-compaction-retention=30m` automatically `Compact` with 30-minute retention windown, for every 3-minute. Periodic compactor continues to record latest revisions for every 1/10 of given compaction period (e.g. 1-hour when `etcd --auto-compaction-mode=periodic --auto-compaction-retention=10h`). For every 1/10 of given compaction period, compactor uses the last revision that was fetched before compaction period, to discard historical data. The retention window of compaction period moves for every 1/10 of given compaction period. For instance, when hourly writes are 100 and `--auto-compaction-retention=10`, v3.1 compacts revision 1000, 2000, and 3000 for every 10-hour, while v3.2.x, v3.3.0, v3.3.1, and v3.3.2 compact revision 1000, 1100, and 1200 for every 1-hour. Furthermore, when writes per minute are 1000, v3.3.0, v3.3.1, and v3.3.2 with `--auto-compaction-mode=periodic --auto-compaction-retention=30m` compact revision 30000, 33000, and 36000, for every 3-minute with more finer

Whether compaction succeeds or not, this process repeats for every 1/10 of given compaction period. If compaction succeeds, it just removes compacted revision from historical revision records. Add flags to configure server-side keepalive policies. Serve when . Define struct with JSON encoder. Note that `"health"` field is . e.g. `{"health":"false"}`, `{"health":"true"}` since `v3.3.0-rc.3` (did exist only in `v3.3.0-rc.0`, `v3.3.0-rc.1`, `v3.3.0-rc.2`). Move Disable gRPC server info-level logs by default (can be enabled with `etcd --debug` flag). Use for `lease` package. Warn on . Address . etcd v3.4 will exit on this error. e.g. `etcd --advertise-client-urls=http://:2379`. Warn on . Address . etcd v3.4 will exit on this error. Support for . Add to extend . Add . Add . Add for . Add to fix , improve . and add to handle . Add fields to . Fix . Address . In previous versions(v3.2.10, v3.2.11), client response size was limited to only 4 MiB. `MaxCallSendMsgSize` default value is 2 MiB, if not configured. `MaxCallRecvMsgSize` default value is `math.MaxInt32`, if not configured. Accept in . Add to `Cmp` `LeaseID` values in `Txn`. Add to `Maintenance`. Add to `Maintenance`. Add to `Lease`. Add for enforce . Fix . Fix on . Fix . Use store revision from first fetch to resolve write conflicts instead of modified revision. Add flag. Add flags. Add command. Add flag. Make on expired lease print . <=3.2 prints `lease LEASE_ID granted with TTL(0s), remaining(-1s)`. Add flag. Add flag. Add command. Add command. Add flag, equivalent to . Make `etcdctl endpoint health` command terminate with . Add flag. Support , equivalent to . Make `etcdctl watch -- for each event. Support . Enable command. Print in `txn` interactive mode. Print . Fix . For example, start etcd `v3.3.10` Write some data Use etcdctl `v3.3.10` to save snapshot Somehow, upgrading Kubernetes fails, thus rolling back to previous version etcd `v3.2.24` Run etcdctl `v3.2.24` `snapshot status` against the snapshot file saved from `v3.3.10` server Run etcdctl `v3.2.24` `snapshot restore` fails with `"expected sha256 [12..."` Handle in `etcdctl`. Add flag. Add flag. For disconnected linearized reads. Based on . See . Add flag. To ensure serializable reads have monotonically increasing store revisions across endpoints. Add flag for an additional `/metrics` endpoint. Set `--metrics-addr=http://[HOST]:9379` to serve `/metrics` in insecure port 9379. Serve . Add flag. Add flag to . Add flag to . Fix . Fix . Fix . Replace endpoint `/v3alpha` with . To deprecate in v3.4. In v3.3, `curl -L http://localhost:2379/v3alpha/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` still works as a fallback to `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'`, but `curl -L http://localhost:2379/v3alpha/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` won't work in v3.4. Use `curl -L http://localhost:2379/v3beta/kv/put -X POST -d '{"key": "Zm9v", "value": "YmFy"}'` instead. Support . Support . Fix . Upgrade gRPC gateway to . Fix issue on restore (only 3.2.0 is affected). Fix . Fix . Fix on . Prevent with . Make . See for more detail. Make server with . Fix with . Fix . Fix server-side auth so . Handle . Upgrade to `v15` (see https://github.com/coreos/go-systemd/releases/tag/v15). endpoint for python-etcd wrapper. to next endpoint on . Add . To implement . `Learner` node does not vote or promote itself. Support previous two minor versions (see our ). `v3.3.x` is the last release cycle that supports `ACI`. , as of late 2016. is not maintained anymore. `*.aci` files won't be available from etcd v3.4 release. Add container registry . is still supported as secondary. Require . Compile with . Deprecate . <hr>